Hi all,
I am creating a scenario where I use the for each processing loop.
Everything works fine but when I want to use the #Sender system in various steps (call B1 atom eg), I get an error saying the #Sender system is empty.
Do I need to do something to get it populated inside the for each loop?
Kind regards,
Joeri
Hi Joeri,
I have done a test and I have the same problem you are having the system is empty when I use the #Sender System in a B1 call inside a for each. If I use a fix system id then it works fine.
<?xml version="1.0" encoding="utf-8" ?> <Msg xmlns="urn:com.sap.b1i.vplatform:entity"> <Body> <Payload Role="C" id="atom3" system="empty"> <B1CallResult status="failure" b1login="Technical User" method="Synchronous Retrieval" objectid="4" payload="" keyname="ItemCode" keyvalue="A00001" /> </Payload> </Body> </Msg>
Please open a message for support asking for it and share the information with us.
Hope it helps
Trinidad.
Edited by: Maria Trinidad MARTINEZ GEA on Jan 6, 2012 11:00 AM
My previous answer was not related to your question...
Dear Joeri,
I thought further about this issue - and I would like to update you that the best-practice for this issue in case you hit it is this:
1) Add a transformation after the "Unbranch".
2) In the transformation atom press on button "Generate" - then choose "Correct after Branch".
How to deal with potential XPath issues after "Unbranch" was maybe not documented clear enough so far.
Please make sure not to miss latest documentation - B1if 1.11.0 will provide a major update - and more is going to come
Please have a check.
Thx,
Frank
Edited by: Frank Moebius on Feb 7, 2012 4:13 PM
Simple sample also attached here...
Edited by: Frank Moebius on Feb 13, 2012 4:00 PM
Hi Joeri,
were you ever able to solve this problem?
I'm having the same issue on 8.82PL8 (B1IF 1.13.6):
<Msg xmlns="urn:com.sap.b1i.vplatform:entity">
<Body>
<Payload Role="C" id="atom4" system="empty">
<B1CallResult status="failure" b1login="Technical User" method="Synchronous Retrieval" objectid="4" payload="atom0" keyname="ItemCode" keyvalue="0260103560"/>
</Payload>
</Body>
</Msg>
Hi Joeri,
It has been a while since you posted this question and i was wondering if you have found a general solution for this issue or not!? If so, please let me know..
Since i could not find an answer myself either, i made a workaround for myself...
Lets say your inbound is "Database" and your Query is: SELECT TOP 3 DocEntry FROM ORDR
Then add a "XSL Transformation"atom with the following code:
<xsl:template name="transform">
<xsl:attribute name="pltype">xml</xsl:attribute>
<RootNode xmlns="">
<xsl:for-each select="$msg/jdbc:SqlResult/jdbc:ResultSet/jdbc:Row">
<DataNode>
<Msg xmlns="urn:com.sap.b1i.vplatform:entity">
<xsl:copy-of select="/vpf:Msg/@*"></xsl:copy-of>
<xsl:copy-of select="/vpf:Msg/vpf:Header"></xsl:copy-of>
</Msg>
<DocEntry>
<xsl:value-of select="$msg/jdbc:SqlResult/jdbc:ResultSet/jdbc:Row/jdbc:DocEntry"></xsl:value-of>
</DocEntry>
</DataNode>
</xsl:for-each>
</RootNode>
</xsl:template>
So basicallly you added the /vpf:Msg/vpf:Header to your Inbound data.
Then add a "For-each Processing (branch, split - join, xform)" atom and add the following to your "for-each" atom ("XPath Expression") field:
/vpf:Msg/vpf:Body/vpf:Payload[./@Role='X']/RootNode/DataNode
Within the "for-each" add another "XSL Transformation"atom with the following code (so replace the existing "<xsl:template match="/">" entry):
<xsl:template match="/">
<Msg xmlns="urn:com.sap.b1i.vplatform:entity">
<xsl:copy-of select="/DataNode/vpf:Msg/@*"></xsl:copy-of>
<xsl:copy-of select="/DataNode/vpf:Msg/vpf:Header"></xsl:copy-of>
<Body>
<Payload Role="X" id="{$atom}">
<xsl:call-template name="transform"></xsl:call-template>
</Payload>
</Body>
</Msg>
</xsl:template>
<xsl:template name="transform">
<DataNode xmlns="">
<DocEntry>
<xsl:value-of select="DataNode/DocEntry"></xsl:value-of>
</DocEntry>
</DataNode>
</xsl:template>
Then add a "Call B1 Object" WITH pre "XSL Transformation".
In your "XSL Transformation" add the following:
<xsl:template name="transform">
<Key xmlns="">
<xsl:value-of select="vpf:Msg/vpf:Body/vpf:Payload[./@id='atom7']/DataNode/DocEntry"></xsl:value-of>
</Key>
</xsl:template>
Then for your "B1 Object" set the "SysId*" to "Sender System" and for your "Key Value*" add the following (use the correct atom id ofcourse):
/vpf:Msg/vpf:Body/vpf:Payload[./@id='atom2']/Key
And for the rest make it a "Synchronous Retrieval" of Object "17".
With kind regards,
Ruben
Add a comment