Skip to Content
Technical Articles

Setup of CPI iFlow with Custom Business Object – Part 3

This series of blog posts will explain how you can model your integration Flow (iFlow) to create and update data in your Custom Business Object (CBO). As a prerequisite you should read blog post https://blogs.sap.com/2017/05/12/usage-of-odata-service-of-custom-business-object/. The Custom Business Object YY1_HCI_ID_ID_ORIGIN from that blog post is used in the following integration flows.

The series is split in 3 parts. The first part explains how to model the iFlow only for header items. The second part explains how to extent the base iFlow for header items to include subnode items. This blog post is the third part and explains how to model the creation and update of subnode items. All explanations contain create and update use cases only.

The integration package, which you can download at https://customer-office-files.demo.hybris.com/medias/SCN/Custom_Business_Object_Integration_Flows.zip
contain integration flows for deletion use cases in addition.

Base iFlow for Subnode Items

The base integration flow for Subnode items is more complex than the base iFlow for Header items as there is no upsert function for subnode items.

Step 1: Delete Multi Message Part
Step 2: Map Children to Header Items
Step 3: Filter to Children with Parent_SAP_UUID
Step 4: Split Children
Step 5: Get Query Variables
Step 6: Get SAP_UUID
Step 7: Delete Multi Message Part
Step 8: Map SAP_UUID
Step 9: Gather Children
Step 10: Add XML Header
Step 11: Split in chunks
Step 12: Map request chunks to OData Batch Processing
Step 13: Request Reply for OData Batch Processing Call

Step 1: Delete Multi Message Part

In the local integration flow “Create and Update Entries” the last step before the call of the Subnode Entries process was a gather. Therefore, the payload looks like this:

<?xml version='1.0' encoding='UTF-8'?>
<multimap:Messages xmlns:multimap="http://sap.com/xi/XI/SplitAndMerge">
  <multimap:Message1>
    <HeaderItems>
	<YY1_HCI_ID_ID_ORIGIN>
	  <YY1_HCI_ID_ID_ORIGINType>
	      <Field2>Mustermann</Field2>
	      <SAP_UUID>fa163e0b-249b-1ee9-a5e4-2e3fe2d104e7</SAP_UUID>
	      <IDOrigin>EXTERNAL</IDOrigin>
	      <ContactID>100</ContactID>
	      <Field1>Max</Field1>
	  </YY1_HCI_ID_ID_ORIGINType>
	</YY1_HCI_ID_ID_ORIGIN>
	<YY1_HCI_ID_ID_ORIGIN>
	  <YY1_HCI_ID_ID_ORIGINType>
	      <Field2>Doe</Field2>
	      <SAP_UUID>fa163e0b-249b-1ee9-a5e4-2e3fe2d124e7</SAP_UUID>
	      <IDOrigin>EXTERNAL</IDOrigin>
	      <ContactID>200</ContactID>
	      <Field1>John</Field1>
	  </YY1_HCI_ID_ID_ORIGINType>
	</YY1_HCI_ID_ID_ORIGIN>
	<YY1_HCI_ID_ID_ORIGIN>
	  <YY1_HCI_ID_ID_ORIGINType>
	      <Field2>Doe</Field2>
	      <SAP_UUID>fa163e0b-249b-1ed9-a7c9-9d0c56849f21</SAP_UUID>
	      <IDOrigin>EXTERNAL</IDOrigin>
	      <ContactID>300</ContactID>
	      <Field1>Jane</Field1>
	  </YY1_HCI_ID_ID_ORIGINType>
	</YY1_HCI_ID_ID_ORIGIN>
	<YY1_HCI_ID_ID_ORIGIN>
	  <YY1_HCI_ID_ID_ORIGINType>
	      <Field2>Doe</Field2>
	      <SAP_UUID>fa163e0b-249b-1ed9-a7c9-9d0c5684bf21</SAP_UUID>
	      <IDOrigin>EXTERNAL</IDOrigin>
	      <ContactID>400</ContactID>
	      <Field1>Jane</Field1>
	  </YY1_HCI_ID_ID_ORIGINType>
	</YY1_HCI_ID_ID_ORIGIN>
     </HeaderItems>
     <Runs>
	<Run>
	  <ContactID>100</ContactID>
	  <IDOrigin>EXTERNAL</IDOrigin>
	  <Field1>Max</Field1>
	  <Field2>Mustermann</Field2>
	  <Children>
	     <Child>
		<FirstName>Elias</FirstName>
		<LastName>Mustermann</LastName>
		<NumberOfRuns>2</NumberOfRuns>
	     </Child>
	     <Child>
		<FirstName>Marie</FirstName>
		<LastName>Mustermann</LastName>
		<NumberOfRuns>4</NumberOfRuns>
	     </Child>
	  </Children>
	</Run>
       <Run>
	  <ContactID>200</ContactID>
	  <IDOrigin>EXTERNAL</IDOrigin>
	  <Field1>John</Field1>
	  <Field2>Doe</Field2>
	  <Children>
	    <Child>
		<FirstName>Patrick</FirstName>
		<LastName>Doe</LastName>
		<NumberOfRuns>1</NumberOfRuns>
	    </Child>
	  </Children>
	</Run>
	<Run>
	   <ContactID>300</ContactID>
	   <IDOrigin>EXTERNAL</IDOrigin>
	   <Field1>Jane</Field1>
	   <Field2>Doe</Field2>
	</Run>
	<Run>
	   <ContactID>400</ContactID>
	   <IDOrigin>EXTERNAL</IDOrigin>
	   <Field1>Jane</Field1>
	   <Field2>Doe</Field2>
	</Run> 
      </Runs>
    </multimap:Message1>
</multimap:Messages>

 

A groovy script is used to delete the tags <multimap:Message1> and <multimap:Messages>. As root tag the tag <All> is added:

import com.sap.gateway.ip.core.customdev.util.Message;
import java.util.HashMap;
def Message processData(Message message) {
   //Body 
     def body = message.getBody(java.lang.String) as String; 
     body = body.replaceAll("<multimap:Messages xmlns:multimap=", "");
     body = body.replaceAll("\"http://sap.com/xi/XI/SplitAndMerge\">", ""); 
     body = body.replaceAll("<multimap:Message1>","<All>"); 
     body = body.replaceAll("</multimap:Message1>", "</All>");
     body = body.replaceAll("</multimap:Messages>", "");
     body = body.replaceAll("<?xml version='1.0' encoding='UTF-8'?>", "");
     message.setBody(body); 
     return message;
}

 

Step 2: Map Children to Header Items

To create or update subnode items the SAP_UUID of the header item is needed. An XSLT transformation is used to match the SAP_UUID of the upserted header with the children from the input message based on the semantic key (ContactID and ID Origin):

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="no" omit-xml-declaration="yes"/>

   <xsl:template match="/">
	<All>
     	  <xsl:apply-templates select="All/HeaderItems/YY1_HCI_ID_ID_ORIGIN/YY1_HCI_ID_ID_ORIGINType"/>
	</All>
   </xsl:template>
   <xsl:template match="YY1_HCI_ID_ID_ORIGINType">
      <YY1_HCI_ID_ID_ORIGIN>
  	<xsl:copy>
   	  <xsl:apply-templates/>            
	    <xsl:for-each select="/All/Runs/Run[ContactID/text() = current()/ContactID/text()]">
	       <xsl:copy-of select="./Children"/>
	    </xsl:for-each>
	</xsl:copy>
      </YY1_HCI_ID_ID_ORIGIN>
    </xsl:template>
    <xsl:template match="node() | @*">
	<xsl:copy>
	  <xsl:apply-templates select="node() | @*"/>
	</xsl:copy> 
    </xsl:template>
</xsl:stylesheet>

The payload looks like this afterwards:

<All>
  <YY1_HCI_ID_ID_ORIGIN>
    <YY1_HCI_ID_ID_ORIGINType>
	<Field2>Mustermann</Field2>
	<SAP_UUID>fa163e0b-249b-1ee9-a5e4-2e3fe2d104e7</SAP_UUID>
	<IDOrigin>EXTERNAL</IDOrigin>
	<ContactID>100</ContactID>
	<Field1>Max</Field1>
	<Children>
	  <Child>
	    <FirstName>Elias</FirstName>
	    <LastName>Mustermann</LastName>
	    <NumberOfRuns>2</NumberOfRuns>
	  </Child>
	  <Child>
	    <FirstName>Marie</FirstName>
	    <LastName>Mustermann</LastName>
	    <NumberOfRuns>4</NumberOfRuns>
	  </Child>
	</Children>
     </YY1_HCI_ID_ID_ORIGINType>
  </YY1_HCI_ID_ID_ORIGIN>
  <YY1_HCI_ID_ID_ORIGIN>
     <YY1_HCI_ID_ID_ORIGINType>
	<Field2>Doe</Field2>
	<SAP_UUID>fa163e0b-249b-1ee9-a5e4-2e3fe2d124e7</SAP_UUID>
	<IDOrigin>EXTERNAL</IDOrigin>
	<ContactID>200</ContactID>
	<Field1>John</Field1>
	<Children>
	  <Child>
	     <FirstName>Patrick</FirstName>
	     <LastName>Doe</LastName>
	     <NumberOfRuns>1</NumberOfRuns>
          </Child>
	</Children>
     </YY1_HCI_ID_ID_ORIGINType>
   </YY1_HCI_ID_ID_ORIGIN>
   <YY1_HCI_ID_ID_ORIGIN>
     <YY1_HCI_ID_ID_ORIGINType>
	<Field2>Doe</Field2>
	<SAP_UUID>fa163e0b-249b-1ed9-a7c9-9d0c56849f21</SAP_UUID>
	<IDOrigin>EXTERNAL</IDOrigin>
	<ContactID>300</ContactID>
	<Field1>Jane</Field1>
     </YY1_HCI_ID_ID_ORIGINType>
   </YY1_HCI_ID_ID_ORIGIN>
   <YY1_HCI_ID_ID_ORIGIN>
     <YY1_HCI_ID_ID_ORIGINType>
	<Field2>Doe</Field2>
	<SAP_UUID>fa163e0b-249b-1ed9-a7c9-9d0c5684bf21</SAP_UUID>
	<IDOrigin>EXTERNAL</IDOrigin>
	<ContactID>400</ContactID>
	<Field1>Jane</Field1>
     </YY1_HCI_ID_ID_ORIGINType>
   </YY1_HCI_ID_ID_ORIGIN>
</All>

 

Step 3: Filter to Children with Parent_SAP_UUID

Step 3 is used to reduce the payload and concentrate on the subnode items. The SAP_UUID of the header item is copied to the tag <PARENT_SAP_UUID> of the subnode items and only the subnode items are kept in the payload. This is achieved with an XSLT transformation:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" omit-xml-declaration="yes"/>
    <xsl:template match="/">
	<Children>
	  <xsl:for-each select="All/YY1_HCI_ID_ID_ORIGIN/YY1_HCI_ID_ID_ORIGINType">
	     <xsl:variable name="SAP_UUID" select="SAP_UUID" />
	     <xsl:for-each select="./Children/Child">
		<Child>
		  <PARENT_SAP_UUID><xsl:value-of select="$SAP_UUID" /></PARENT_SAP_UUID>                        
		  <FirstName><xsl:value-of select="FirstName" /></FirstName>   
		  <LastName><xsl:value-of select="LastName" /></LastName>   
		  <NumberOfRuns><xsl:value-of select="NumberOfRuns" /></NumberOfRuns>    
		</Child>
	      </xsl:for-each>
         </xsl:for-each>
       </Children>
     </xsl:template>
</xsl:stylesheet>

Now, the payload looks as followed:

<Children>
  <Child>
     <PARENT_SAP_UUID>fa163e0b-249b-1ee9-a5e4-2e3fe2d104e7</PARENT_SAP_UUID>
     <FirstName>Elias</FirstName>
     <LastName>Mustermann</LastName>
     <NumberOfRuns>2</NumberOfRuns>
  </Child>
  <Child>
     <PARENT_SAP_UUID>fa163e0b-249b-1ee9-a5e4-2e3fe2d104e7</PARENT_SAP_UUID>
     <FirstName>Marie</FirstName>
     <LastName>Mustermann</LastName>
     <NumberOfRuns>4</NumberOfRuns>
  </Child>
  <Child>
     <PARENT_SAP_UUID>fa163e0b-249b-1ee9-a5e4-2e3fe2d124e7</PARENT_SAP_UUID>
     <FirstName>Patrick</FirstName>
     <LastName>Doe</LastName>
     <NumberOfRuns>1</NumberOfRuns>
  </Child>
</Children>

 

Step 4: Split Children

To update a subnode entry the SAP_UUID of this entry is needed. As SAP Cloud Platform Integration OData Adapter does not offer batch processing support for GET operations the payload has to be split in single messages to retrieve the SAP_UUID if the entry already exists. A General Splitter is used to split at XPATH /Children/Child with grouping 1. The messages can be processed in parallel as they will be gathered back in step 9.

 

Step 5: Get Query Variables

A content modifier is used to extract the semantic key and parent SAP_UUID from each message for the GET call:

 

Step 6: Get SAP_UUID

A content enricher is used to call the CBO OData service. Use the model operation wizard of the OData channel by choosing select on the processing tab. Choose Query(GET) as operation and select your subnode as entity. Select SAP_UUID as field. Finish the wizard and go back to the processing tab. Add the filter path to the query options. The query options should be:

$select=SAP_UUID&$filter= SubnodeKeyField1 eq ‘${property.FirstName}’ and SubnodeKeyField2 eq ‘${property.LastName}’ and SAP_PARENT_UUID eq guid’${property.PARENT_SAP_UUID}’

In the content enricher itself as aggregation algorithm the option Combine is chosen. The payload after the enricher for one entry, that exists, is:

<?xml version='1.0' encoding='UTF-8'?>
<multimap:Messages xmlns:multimap="http://sap.com/xi/XI/SplitAndMerge">
  <multimap:Message1>
     <Children>
	<Child>
	  <PARENT_SAP_UUID>fa163e0b-249b-1ee9-a5e4-2e3fe2d104e7</PARENT_SAP_UUID>
	  <FirstName>Elias</FirstName>
	  <LastName>Mustermann</LastName>
	  <NumberOfRuns>2</NumberOfRuns>
	</Child>
      </Children>
   </multimap:Message1>
   <multimap:Message2>
      <YY1_SUBNODE_HCI_ID_ID_ORIGIN>
	<YY1_SUBNODE_HCI_ID_ID_ORIGINType>
	  <SAP_UUID>fa163e0b-249b-1ee9-a6ae-54b348b2266e</SAP_UUID>
	</YY1_SUBNODE_HCI_ID_ID_ORIGINType>
      </YY1_SUBNODE_HCI_ID_ID_ORIGIN>
  </multimap:Message2>
</multimap:Messages>

The payload after the enricher for one entry, that does not exist, is:

<?xml version='1.0' encoding='UTF-8'?>
<multimap:Messages xmlns:multimap="http://sap.com/xi/XI/SplitAndMerge">
  <multimap:Message1>
    <Children>
	<Child>
	   <PARENT_SAP_UUID>fa163e0b-249b-1ee9-a5e4-2e3fe2d104e7</PARENT_SAP_UUID>
	   <FirstName>Marie</FirstName>
	   <LastName>Mustermann</LastName>
	   <NumberOfRuns>4</NumberOfRuns>
	</Child>
    </Children>
  </multimap:Message1>
  <multimap:Message2>
    <YY1_SUBNODE_HCI_ID_ID_ORIGIN/>
  </multimap:Message2>
</multimap:Messages>

 

Step 7: Delete Multi Message Part

As the payload contains again multi message parts due to combining, those parts are deleted using a groovy script. As root tag <BothMessages> are added:

import com.sap.gateway.ip.core.customdev.util.Message;
import java.util.HashMap;
def Message processData(Message message) {
   //Body 
     def body = message.getBody(java.lang.String) as String; 
     body = body.replaceAll("<multimap:Messages xmlns:multimap=", "<BothMessages>"); 
     body = body.replaceAll("\"http://sap.com/xi/XI/SplitAndMerge\">", ""); 
     body = body.replaceAll("<multimap:Message1>",""); 
     body = body.replaceAll("</multimap:Message1>", "");
     body = body.replaceAll("<multimap:Message2>",""); 
     body = body.replaceAll("</multimap:Message2>", "");       
     body = body.replaceAll("</multimap:Messages>", "</BothMessages>");
     body = body.replaceAll("<?xml version='1.0' encoding='UTF-8'?>", "");
     message.setBody(body); 
     return message;
}

 

Step 8: Map SAP_UUID

In this step the SAP_UUID is mapped into the original message. An XSLT transformation is used for this. If the entry does not exist, the tag <SAP_UUID> is created empty.

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" omit-xml-declaration="yes"/>
   <xsl:template match="/">
     <xsl:for-each select="BothMessages/Children/Child">
       <Children>
	     <Child>
	       <SAP_UUID><xsl:value-of select="//YY1_SUBNODE_HCI_ID_ID_ORIGIN/YY1_SUBNODE_HCI_ID_ID_ORIGINType/SAP_UUID" /></SAP_UUID>
	       <PARENT_SAP_UUID><xsl:value-of select="PARENT_SAP_UUID" /></PARENT_SAP_UUID>                        
	       <FirstName><xsl:value-of select="FirstName" /></FirstName>   
	       <LastName><xsl:value-of select="LastName" /></LastName>   
	       <NumberOfRuns><xsl:value-of select="NumberOfRuns" />
	       </NumberOfRuns> 
	     </Child>
 	   </Children>
     </xsl:for-each>
   </xsl:template>
</xsl:stylesheet>

 

Step 9: Gather Children

In this step all single messages are gather together for further batch processing. As aggregation strategy the following is chosen:

Incoming format: XML (Same Format)
Aggregation Algorithm: Combine at XPath
Combine from source (XPath): //Child
Combine at target (XPath): /Children

The payload afterwards looks like this:

<Children>
	<Child>
		<SAP_UUID/>
		<PARENT_SAP_UUID>fa163e0b-249b-1ee9-a5e4-2e3fe2d104e7</PARENT_SAP_UUID>
		<FirstName>Marie</FirstName>
		<LastName>Mustermann</LastName>
		<NumberOfRuns>4</NumberOfRuns>
	</Child>
	<Child>
		<SAP_UUID>fa163e0b-249b-1ed9-a7c9-9d20bba57f21</SAP_UUID>
		<PARENT_SAP_UUID>fa163e0b-249b-1ee9-a5e4-2e3fe2d124e7</PARENT_SAP_UUID>
		<FirstName>Patrick</FirstName>
		<LastName>Doe</LastName>
		<NumberOfRuns>1</NumberOfRuns>
	</Child>
	<Child>
		<SAP_UUID>fa163e0b-249b-1ee9-a6ae-54b348b2266e</SAP_UUID>
		<PARENT_SAP_UUID>fa163e0b-249b-1ee9-a5e4-2e3fe2d104e7</PARENT_SAP_UUID>
		<FirstName>Elias</FirstName>
		<LastName>Mustermann</LastName>
		<NumberOfRuns>2</NumberOfRuns>
	</Child>
</Children>

 

Step 10: Add XML Header

For further processing the payload needs an XML header. A content modifier is used to achieve this:

Step 11: Split in chunks

To not overload the CBO backend system, the data is handled in chunks of 1000. A general splitter is used for that purpose, as this splitter type keeps the encapsulating element <Children>. The incoming payload is split at XPath //Child:

Step 12: Map request chunks to OData Batch Processing

To setup the message mapping to the OData service call, you must add step 13 first. Step 13 will create the required target XSD. When you have the XSD, you can create a message mapping from your incoming split message to the OData service call. For the source message you need an XSD file that matches the outcome of the local integration process “Get SAP_UUID of Subnode Items”. Add source and target XSD to your message and create the following mapping:

The source tag <Children> is mapped to the target tag <batchParts>. The target tag <batchChangeSet> gets an empty constant assigned to create the tag. The tag <Child> is mapped to the tag <batchChangeSetPart>. The target tag <method> is mapped to either a constant ‘POST’, if no SAP_UUID is present, or to a constant ‘MERGE’, if an SAP_UUID is present:

The target tag <uri> is also filled based on a present SAP_UUID or not. In case the SAP_UUID is not present, the entry must be created through a navigation property from the header node to the subnode. The first constant is YY1_HCI_ID_ID_ORIGIN(guid’. The second constant is ‘)/to_Subnode. The uri will be YY1_HCI_ID_ID_ORIGIN(guid’PARENT_SAP_UUID’)/to_Subnode ‘)/to_Subnode.

In case the SAP_UUID is present the update of the entry is done directly on this item. The first constant is YY1_SUBNODE_HCI_ID_ID_ORIGIN(guid’. The second constant is ‘). The uri will be YY1_SUBNODE_HCI_ID_ID_ORIGIN(guid’SAP_UUID’).

The target tag <headers> is not needed. Therefore, you can disable this part. The target tags <YY1_SUBNODE_HCI_ID_ID_ORIGIN> and <YY1_SUBNODE_HCI_ID_ID_ORIGINType> are mapped to empty constants. The target fields beneath <YY1_SUBNODE_HCI_ID_ID_ORIGINType> are mapped one to one with the source message fields:

The payload now looks as follows:

<?xml version="1.0" encoding="UTF-8"?>
<batchParts>
	<batchChangeSet>
		<batchChangeSetPart>
			<method>POST</method>
			<uri>YY1_HCI_ID_ID_ORIGIN(guid’fa163e0b-249b-1ee9-a5e4-2e3fe2d104e7’)/to_Subnode</uri>
			<YY1_SUBNODE_HCI_ID_ID_ORIGIN>
				<YY1_SUBNODE_HCI_ID_ID_ORIGINType>
					<SubnodeKeyField1>Marie</SubnodeKeyField1>
					<SubnodeKeyField2>Mustermann</SubnodeKeyField2>
					<SubnodeField1>4</SubnodeField1>
				</YY1_SUBNODE_HCI_ID_ID_ORIGINType>
			</YY1_SUBNODE_HCI_ID_ID_ORIGIN>
		</batchChangeSetPart>
		<batchChangeSetPart>
			<method>MERGE</method>
			<uri>YY1_SUBNODE_HCI_ID_ID_ORIGIN(guid’fa163e0b-249b-1ed9-a7c9-9d20bba57f21’)</uri>
			<YY1_SUBNODE_HCI_ID_ID_ORIGIN>
				<YY1_SUBNODE_HCI_ID_ID_ORIGINType>
					<SubnodeKeyField1>Patrick</SubnodeKeyField1>
					<SubnodeKeyField2>Doe</SubnodeKeyField2>
					<SubnodeField1>1</SubnodeField1>
				</YY1_SUBNODE_HCI_ID_ID_ORIGINType>
			</YY1_SUBNODE_HCI_ID_ID_ORIGIN>
		</batchChangeSetPart>
		<batchChangeSetPart>
			<method>MERGE</method>
			<uri>YY1_SUBNODE_HCI_ID_ID_ORIGIN(guid’fa163e0b-249b-1ee9-a6ae-54b348b2266e’)</uri>
			<YY1_SUBNODE_HCI_ID_ID_ORIGIN>
				<YY1_SUBNODE_HCI_ID_ID_ORIGINType>
					<SubnodeKeyField1>Elias</SubnodeKeyField1>
					<SubnodeKeyField2>Mustermann</SubnodeKeyField2>
					<SubnodeField1>2</SubnodeField1>
				</YY1_SUBNODE_HCI_ID_ID_ORIGINType>
			</YY1_SUBNODE_HCI_ID_ID_ORIGIN>
		</batchChangeSetPart>
	</batchChangeSet>
</batchParts>

Step 13: Request Reply for OData Batch Processing Call

To call a receiver in a local integration process, you need a request reply step. Setting up the connection to the receiver will create an XSD which you need in step 12. You need to setup the connection as follows:
Select OData V2 as channel type and choose the select button on the processing tab. Select remote as connection source and connect to your SAP Marketing Cloud system. Choose Create(POST) as Operation and your Subnode as Entity. Deselect SAP_UUID and ignore the warning. Select all data fields. Also select Batch Processing.

Finish the Model Operation. You are informed that a new XSD File has been created. As the creation and update are done in one batch request and creation of subnode items is done through a navigation property of the header item, you need to change the processing settings of your OData channel connection. Go to the processing tab of your OData Channel and change the resource path to your header node. Also clear the field list:

On the processing tab you should also select JSON as Content Type and set 5 minutes as timeout as this is the normal allowed runtime in SAP Marketing Cloud system.

Be the first to leave a comment
You must be Logged on to comment or reply to a post.