Developer ToolsFree generatorPDF, Excel, Word exportInfor ION

Infor ION BOD XML Shell Generator

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.

Fill in

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

Generated code
Download:

1. BOD envelope

<?xml version="1.0" encoding="UTF-8"?>
<SyncItemMaster xmlns="http://schema.infor.com/InforOAGIS/2" releaseID="9.2" versionID="2.x.x">
  <ApplicationArea>
    <Sender>
      <LogicalID>lid://infor.syteline.csi</LogicalID>
      <ComponentID>erp</ComponentID>
      <ConfirmationCode>OnError</ConfirmationCode>
    </Sender>
    <CreationDateTime>2026-10-22T09:30:00Z</CreationDateTime>
    <BODID>infor-nid:infor:1:[Location ID (may be blank)]:ITEM-1001:1?ItemMaster&amp;verb=Sync</BODID>
  </ApplicationArea>
  <DataArea>
    <Sync>
      <TenantID>infor</TenantID>
      <AccountingEntityID>1</AccountingEntityID>
      <LocationID>[Location ID (may be blank)]</LocationID>
      <ActionCriteria>
        <ActionExpression actionCode="Replace"/>
      </ActionCriteria>
    </Sync>
    <ItemMaster>
      <!-- Noun content goes here, in the order defined by the ItemMaster schema.   -->
      <!-- Identifiers follow the Infor pattern, for example:                      -->
      <!-- <ID accountingEntity="1" lid="lid://infor.syteline.csi" variationID="1">ITEM-1001</ID> -->
    </ItemMaster>
  </DataArea>
</SyncItemMaster>

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

<?xml version="1.0" encoding="UTF-8"?>
<AcknowledgeItemMaster xmlns="http://schema.infor.com/InforOAGIS/2" releaseID="9.2" versionID="2.x.x">
  <ApplicationArea>
    <Sender>
      <LogicalID>lid://receiving.application</LogicalID>
      <ComponentID>erp</ComponentID>
    </Sender>
    <CreationDateTime>2026-10-22T09:30:00Z</CreationDateTime>
  </ApplicationArea>
  <DataArea>
    <Acknowledge>
      <TenantID>infor</TenantID>
      <OriginalApplicationArea>
        <!-- Copy the ApplicationArea of the original Process BOD here -->
        <Sender>
          <LogicalID>lid://infor.syteline.csi</LogicalID>
          <ComponentID>erp</ComponentID>
        </Sender>
        <CreationDateTime>2026-10-22T09:30:00Z</CreationDateTime>
        <BODID>infor-nid:infor:1:[Location ID (may be blank)]:ITEM-1001:1?ItemMaster&amp;verb=Process</BODID>
      </OriginalApplicationArea>
      <ResponseCriteria>
        <ResponseExpression actionCode="Accepted"/>
      </ResponseCriteria>
    </Acknowledge>
    <ItemMaster>
      <!-- Created or changed object, including the Document ID assigned by the system of record -->
    </ItemMaster>
  </DataArea>
</AcknowledgeItemMaster>

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

<?xml version="1.0" encoding="UTF-8"?>
<ConfirmBOD xmlns="http://schema.infor.com/InforOAGIS/2" releaseID="9.2">
  <ApplicationArea>
    <Sender>
      <LogicalID>lid://receiving.application</LogicalID>
      <ComponentID>erp</ComponentID>
    </Sender>
    <CreationDateTime>2026-10-22T09:30:00Z</CreationDateTime>
  </ApplicationArea>
  <DataArea>
    <Confirm>
      <TenantID>infor</TenantID>
      <OriginalApplicationArea>
        <!-- ApplicationArea of the BOD that failed -->
        <Sender>
          <LogicalID>lid://infor.syteline.csi</LogicalID>
        </Sender>
        <CreationDateTime>2026-10-22T09:30:00Z</CreationDateTime>
        <BODID>infor-nid:infor:1:[Location ID (may be blank)]:ITEM-1001:1?ItemMaster&amp;verb=Sync</BODID>
      </OriginalApplicationArea>
    </Confirm>
    <BOD>
      <BODFailureMessage>
        <ErrorProcessMessage>
          <Description>Describe why the inbound BOD could not be processed</Description>
        </ErrorProcessMessage>
      </BODFailureMessage>
    </BOD>
  </DataArea>
</ConfirmBOD>

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.

Get your BOD validated

Send us a sample BOD and the noun schema version and we will check structure, identifiers and routing before you activate the data flow.

Optional. The tool and every export work without this. No spam.

Was this tool useful?

How a BOD is built

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.

  • 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

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

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

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.

Frequently Asked Questions

What is ION format?

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?

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?

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?

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.

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

ArchRay builder
Design the on-prem AI stack: model, GPUs, RAG pipeline, guardrails
See memory, speed and cost as you swap parts, then export the diagram. Free, in your browser.
Open the builder

Keep exploring

Free tools

ERP fixes and how-tos

Runs with your ERP

Guides

AI on your ERP