# Infor ION BOD XML Shell Generator

> Source: https://netray.co/tools/infor-ion-bod-xml-shell-generator
> Publisher: Netray (netray.co), AI and integration engineering for ERP and manufacturing systems.
> Section: Free Tools

## Short answer

Pick a verb and noun and get a correctly structured Infor OAGIS BOD envelope for ION, with the matching Acknowledge and ConfirmBOD skeletons.

## Category

developer

## Erp

Infor ION

## Audience

- Integration developer
- ION administrator
- ERP developer

## Tool

**Kind:** template

**Output:** code

**Language:** xml

**Fields:**

#### Verb

**Key:** verb

**Type:** select

**Options:**

- Sync
- Process
- Get

**Default:** Sync

#### Noun

**Key:** noun

**Type:** text

**Default:** ItemMaster

#### Sender logical ID

**Key:** lid

**Type:** text

**Default:** lid://infor.syteline.csi

#### Component ID

**Key:** component

**Type:** text

**Default:** erp

#### Tenant ID

**Key:** tenant

**Type:** text

**Default:** infor

#### Accounting entity ID

**Key:** ae

**Type:** text

**Default:** 1

#### Location ID (may be blank)

**Key:** loc

**Type:** text

#### Action code

**Key:** action

**Type:** select

**Options:**

- Add
- Replace
- Change
- Delete

**Default:** Replace

**Help:** Sync: Add, Replace or Delete. Process: Add or Change. Get: remove ActionCriteria.

#### Document ID

**Key:** docid

**Type:** text

**Default:** ITEM-1001

#### Variation ID

**Key:** variation

**Type:** text

**Default:** 1

#### Creation date time (UTC, ISO 8601)

**Key:** created

**Type:** text

**Default:** 2026-10-22T09:30:00Z

#### releaseID

**Key:** release

**Type:** text

**Default:** 9.2

#### versionID (from the noun schema)

**Key:** version

**Type:** text

**Default:** 2.x.x

**Blocks:**

#### 1. BOD envelope

**Body:** <?xml version="1.0" encoding="UTF-8"?>
<{{verb}}{{noun}} xmlns="http://schema.infor.com/InforOAGIS/2" releaseID="{{release}}" versionID="{{version}}">
  <ApplicationArea>
    <Sender>
      <LogicalID>{{lid}}</LogicalID>
      <ComponentID>{{component}}</ComponentID>
      <ConfirmationCode>OnError</ConfirmationCode>
    </Sender>
    <CreationDateTime>{{created}}</CreationDateTime>
    <BODID>infor-nid:{{tenant}}:{{ae}}:{{loc}}:{{docid}}:{{variation}}?{{noun}}&amp;verb={{verb}}</BODID>
  </ApplicationArea>
  <DataArea>
    <{{verb}}>
      <TenantID>{{tenant}}</TenantID>
      <AccountingEntityID>{{ae}}</AccountingEntityID>
      <LocationID>{{loc}}</LocationID>
      <ActionCriteria>
        <ActionExpression actionCode="{{action}}"/>
      </ActionCriteria>
    </{{verb}}>
    <{{noun}}>
      <!-- Noun content goes here, in the order defined by the {{noun}} schema.   -->
      <!-- Identifiers follow the Infor pattern, for example:                      -->
      <!-- <ID accountingEntity="{{ae}}" lid="{{lid}}" variationID="{{variation}}">{{docid}}</ID> -->
    </{{noun}}>
  </DataArea>
</{{verb}}{{noun}}>

#### 2. Acknowledge reply to a Process (sent by the system of record)

**Body:** <?xml version="1.0" encoding="UTF-8"?>
<Acknowledge{{noun}} xmlns="http://schema.infor.com/InforOAGIS/2" releaseID="{{release}}" versionID="{{version}}">
  <ApplicationArea>
    <Sender>
      <LogicalID>lid://receiving.application</LogicalID>
      <ComponentID>erp</ComponentID>
    </Sender>
    <CreationDateTime>{{created}}</CreationDateTime>
  </ApplicationArea>
  <DataArea>
    <Acknowledge>
      <TenantID>{{tenant}}</TenantID>
      <OriginalApplicationArea>
        <!-- Copy the ApplicationArea of the original Process BOD here -->
        <Sender>
          <LogicalID>{{lid}}</LogicalID>
          <ComponentID>{{component}}</ComponentID>
        </Sender>
        <CreationDateTime>{{created}}</CreationDateTime>
        <BODID>infor-nid:{{tenant}}:{{ae}}:{{loc}}:{{docid}}:{{variation}}?{{noun}}&amp;verb=Process</BODID>
      </OriginalApplicationArea>
      <ResponseCriteria>
        <ResponseExpression actionCode="Accepted"/>
      </ResponseCriteria>
    </Acknowledge>
    <{{noun}}>
      <!-- Created or changed object, including the Document ID assigned by the system of record -->
    </{{noun}}>
  </DataArea>
</Acknowledge{{noun}}>

#### 3. ConfirmBOD skeleton (error on an inbound BOD, handled by ION)

**Body:** <?xml version="1.0" encoding="UTF-8"?>
<ConfirmBOD xmlns="http://schema.infor.com/InforOAGIS/2" releaseID="{{release}}">
  <ApplicationArea>
    <Sender>
      <LogicalID>lid://receiving.application</LogicalID>
      <ComponentID>erp</ComponentID>
    </Sender>
    <CreationDateTime>{{created}}</CreationDateTime>
  </ApplicationArea>
  <DataArea>
    <Confirm>
      <TenantID>{{tenant}}</TenantID>
      <OriginalApplicationArea>
        <!-- ApplicationArea of the BOD that failed -->
        <Sender>
          <LogicalID>{{lid}}</LogicalID>
        </Sender>
        <CreationDateTime>{{created}}</CreationDateTime>
        <BODID>infor-nid:{{tenant}}:{{ae}}:{{loc}}:{{docid}}:{{variation}}?{{noun}}&amp;verb={{verb}}</BODID>
      </OriginalApplicationArea>
    </Confirm>
    <BOD>
      <BODFailureMessage>
        <ErrorProcessMessage>
          <Description>Describe why the inbound BOD could not be processed</Description>
        </ErrorProcessMessage>
      </BODFailureMessage>
    </BOD>
  </DataArea>
</ConfirmBOD>

**Notes:** This is an envelope only. Validate the finished document against the noun's XSD (Infor OAGIS schemas, or the noun definition in ION Desk / the Data Catalog) and copy releaseID and versionID from that schema. The logical ID must match the connection point that sends the document. The BODID follows the infor-nid pattern seen in Infor samples; any value unique per message is accepted by most receivers, but follow your application's convention. Check element order in ConfirmBOD against ConfirmBOD.xsd for your schema version.

## Content

**Intro:** This generator produces the outer structure of an Infor OAGIS Business Object Document (BOD) for ION: the verb-noun root element, ApplicationArea, the verb block with TenantID, AccountingEntityID, LocationID and ActionCriteria, and an empty noun. It also gives the Acknowledge and ConfirmBOD skeletons you need when you build the receiving side.

**Sections:**

#### How a BOD is built

**Body:** Infor's ION development guide describes a BOD as an XML document with two parts. The ApplicationArea carries what the infrastructure needs to move the message: Sender (LogicalID, ComponentID, optional ConfirmationCode), CreationDateTime and BODID. The DataArea carries the verb element (Sync, Process, Get and so on) followed by one noun instance, or several in a Show. The root element name joins verb and noun, for example SyncItemMaster, in the namespace http://schema.infor.com/InforOAGIS/2. Infor puts TenantID, AccountingEntityID and LocationID inside the verb element, and the action code in ActionCriteria/ActionExpression/@actionCode.

**Bullets:**

- Sync: from the system of record to anyone interested; actions Add, Replace, Delete (not Change)
- Process: request to the system of record; actions Add or Change; reply is Acknowledge
- Get: request for data; reply is Show; no action codes
- ConfirmBOD: sent when processing an inbound BOD fails; handled inside ION

#### Choosing verb and action code

**Body:** If your application owns the data, publish Sync with Replace carrying the complete object; Infor recommends against Change because receivers then only see changed properties. Use Delete with Sync only for tenant-level master data. If you are asking another system to create something, send Process with Add and leave the Document ID empty, since the system of record assigns it and returns it in the Acknowledge. For Process with Change, include Document ID and Variation ID. Acknowledge action codes are Accepted, Modified or Rejected. Infor does not use Delete in Process BODs. Get carries a Document ID for one object or an expression for a selection.

#### Worked example

**Body:** A SyteLine site publishing an item to a planning tool picks verb Sync, noun ItemMaster, logical ID lid://infor.syteline.csi, tenant infor, accounting entity 1 and action Replace. The generator outputs SyncItemMaster with the sender block, a BODID of infor-nid:infor:1::ITEM-1001:1?ItemMaster&verb=Sync (the ampersand is escaped in XML), and an empty ItemMaster where the item fields go. Fill the noun from the ItemMaster schema, then drop the file into a test connection point and check it in ION OneView before switching the data flow on.

#### Common mistakes

**Body:** Putting the noun inside the verb element: noun and verb are siblings in DataArea. Leaving a raw ampersand in BODID, which makes the XML invalid. Using a logical ID that does not match the connection point, so ION rejects or misroutes the message. Sending Change when the receiver expects full Replace documents. Expecting a ConfirmBOD to reach the sending application: Infor states it is always handled inside ION, so error handling for Process requests must use an Acknowledge with Rejected and a reason code. Copying versionID from another noun instead of the schema you validate against.

**Cta:** If you want an assistant that explains failed BODs from ION OneView in plain English, running on your own servers, we can build it.

**Faq:**

#### What is ION format?

**Answer:** ION's native message format is the BOD: XML based on Infor OAGIS, with an ApplicationArea and DataArea. ION also moves JSON, delimited and other documents through file, API and network connection points, but Infor applications integrate mainly with BODs.

#### Where is the Infor ION development guide?

**Answer:** Infor publishes the ION Development Guide on docs.infor.com in the Infor OS library, with on-premises and cloud editions. Its BOD chapters cover verbs, action codes, Sync publishing, Process and Acknowledge, Get and Show, ConfirmBOD and the inbox and outbox tables.

#### Which verbs pair with which reply?

**Answer:** Process is answered by Acknowledge, Get by Show. Sync has no business reply; if the receiver cannot process an inbound BOD, it sends a ConfirmBOD, which ION handles. ConfirmationCode OnError in the sender block asks for that confirmation only on failure.

#### Can I use this for an Infor ION file template?

**Answer:** Yes as a starting point: a file connection point can pick up BOD XML files from a folder, so a shell like this is often how teams build test files. Validate each file against the noun schema first.

## Search terms

infor ion development guide, infor ion bod example, infor ion integration, infor ion documentation, what is ion format, infor oagis bod xml, sync bod example, infor ion file template

---
Talk to an engineer: https://netray.co/contact?intent=erp_ai | Machine catalog: https://netray.co/agent/catalog.json
