About BOD Elements and Attributes

This topic includes miscellaneous information that you can use when you create BOD (Business Object Document) replication documents.

The BOD Header

The BOD_Name/ApplicationArea/BODID element contains the NID in this format:

NIDID(DerBODID)?BODNOUN()&verb=BODVERB()

In most cases, you do not need to edit this element. However, if you want the NID's location value populated, change the NIDID macro to LNIDID.

See Value Expression, Replication Document Elements.

When you create the associated IDO or custom load method used to populate the BOD, you must include a property named DerBODID that contains the key value for the BOD. For example, for the PurchaseOrder BOD, you must define a DerBODID property that contains the purchase order number.

The BOD Body

When adding elements to the body of a BOD, on the Replication Document Elements form, specify this information:

Note: You cannot create, delete, or modify some elements and attributes of replication documents, such as BODs, without first creating a copy of the document. This is because some metadata for replication documents and their elements and attributes are now tagged as "read-only", based on the Access As identifier. While you can create and update elements and attributes for these replication documents, you cannot modify or delete any metadata that is marked as "read-only". To be able to modify such metadata, you must first have a copy that is associated with your Access As identifier.
  1. A BOD Tag Name or the actual element tag
  2. A Value Type of the element, whether the value is Literal, PropertyTag, or =DynamicSubcollection
    • If you select Literal, specify the literal expression or macro expression in the Value Expression field.
    • If you select PropertyTag, specify the property name that is mapped to a data element in an IDO collection in the Property Name field.
    • If you select DynamicSubcollection, specify the other collection IDO name in the Dynamic Subcollection IDO Name field. 

      See Adding a Collection of Elements from a SQL Table or IDO to a BOD.

  3. Any additional information required by the Value Type for the element

If any element includes an attribute that is a BOD tag or is similar to this example:

<elementAttribute=xxx>

Then, select the Attributes tab. Notice that the element's sequence number is displayed for reference.

On the Attributes tab, specify this information:

  1. An Attribute Name or the actual attribute included in the XML
    Note: The attribute name is case-sensitive.
  2. A Value Type, whether the value of the attribute is a literal value or a property that is mapped to a data element in an IDO collection
    • If the value is a literal, specify the Value Expression.
    • If the value is a property, specify the Property Name. The property name is a property on the IDO listed on the parent BOD form, or a property on a subcollection IDO linked to that IDO.

Tips for Constructing the Body

  • An XML document inbound to this application from an application that does not use the Infor BOD format must include the this XML element:
    
    <DocumentData TargetSite="targetSite" SourceSite="sourceSite" Verb="verb" Noun="noun"> 
    	
  • When building BODs for applications that use the Infor BOD format, be aware of this information:
    • For the main ID element in the Noun section of the BOD, or sometimes called DocumentID, perform these steps:
      1. In the BOD Tag Name field, specify the element tag name.
      2. In the Value Type field, select Literal.
      3. In the Property Name field, specify DerBODID.
    • For reference elements, the ID should be populated with the key value (DerBODID) used by the BOD being referenced.
    • If the BOD is used to publish deleted data, only two elements in the Noun section of the body must be mapped. These elements are the main ID and the status.
    • All values published in an ID element or reference ID element must have the leading spaces trimmed. If an ID element is populated with concatenated columns of data, each column of data must have the leading spaces trimmed.

      This example shows concatenation and trim logic:

      ltrim(VendVch.vend_num) + '~' + ltrim(cast(VendVch.voucher as nvarchar(7)))

      If vend_num = 200 and voucher = 5000 then this value published:

      200~5000
  • If a parent tag has no data and attributes, you do not need to define an element record for the tag in the metadata. If a child tag element is defined in the Replication Document Elements form, the system automatically generates the parent tag in the XML. For example, if you define metadata for this element:
    
    ProcessCustomerPartyMaster/DataArea/CustomerPartyMaster/Location/Name

    but you have not defined metadata for the parent:

    
    ProcessCustomerPartyMaster/DataArea/CustomerPartyMaster/Location

    the system includes any missing parent tags in the XML:

    
    <DataArea>
      <CustomerPartyMaster>
         <Location>
           <Name>MyCo</Name>
         </Location>
      </CustomerPartyMaster>
    </DataArea>  	
  • When an element is populated with multiple columns of data concatenated together, the approved concatenation character is ~ or tilde. For example, if you concatenate cust_num and cust_seq together to be published together as one value in an element, specify cust_num~cust_seq.

    If cust_num = C000001 and cust_seq = 5, then the value published is C000001~5.

  • Use the Documentation tabs and fields on the various forms to enter implementation information for the BOD and its elements and attributes. This information can be used to create data mapping or implementation reports.
  • You can create a custom load method whose source is a view that contains all the information you need in the BOD. The CLM returns the result set of the view. This may produce speed improvements over using an IDO.
    Note: If this application is used only to facilitate integration between two other applications, then the CLM in this application runs a corresponding CLM, through a remote method call, in the actual application.  
  • Method overrides on inbound BODs cannot handle null values in numeric properties as a parameter. This is a restriction of the Microsoft Common Runtime Language (CRL).

    For example, the inbound BOD calls an override for an update similar to:

    UPD(LoadCodeSp(OperNum,P3,InputPlanQty,MESSAGE))

    If the InputPlanQty property is mapped to an XML element that is not always provided, there would be a problem. This could be resolved by modifying the InputPlanQty property to be a string instead of a number, and handling any necessary conversions inside the LoadCodeSp method/procedure. Numeric values cannot hold a null value in CRL, but string values can.

  • To construct the replication document using an XML document as a template:
    1. In the From Template and Versions fields or the From File field, select the BOD XML file.
    2. Click Load BOD. The BOD tree is displayed.

      When you double-click on a tag or a part of the BOD tree, the part’s path is copied into the BOD Tag Name field.

      Note: The template or loaded BOD is not row-based and is not saved with the Replication Document Elements form's data. The BOD tree is removed when you close the form.
  • You can add the GETPOSITION() function to the value of the BOD Tag Name field to retrieve the position of the element during inbound BOD processing. The position value can be used as an identifier on which node is being processed.

Generating Replication Document Scripts

To generate a replication document script, use the Repl Doc Script Generator form and then, optionally, check the script into a source code control system. This process includes your custom replication document information in system upgrades.