The transformation within the BPEL Component RequesterABCSImpl (xsl) which creates the EBM:
<xsl:variable name="ServiceName" select="'{http://xmlns.oracle.com/ABCSImpl/[SenderApplication]/Core/[ABCSName]/V1}[ABCSName]'"/>
<corecom:EBMTracking>
<corecom:SequenceNumber>
<xsl:value-of select="position()"/>
</corecom:SequenceNumber>
<corecom:ExecutionUnitID/>
<corecom:ExecutionUnitName>
<xsl:value-of select="$ServiceName"/>
</corecom:ExecutionUnitName>
<corecom:ImplementationCode>
<xsl:text disable-output-escaping="no">BPEL</xsl:text>
</corecom:ImplementationCode>
<corecom:ActivityDateTime>
<xsl:value-of select="xp20:current-dateTime()"/>
</corecom:ActivityDateTime>
</corecom:EBMTracking>
After the transformation the ExecutionUnitID gets populated in the BPEL code with the following assign:
<assign name="Assign_InstanceID">
<copy>
<from expression="ora:getInstanceId()"/>
<to variable="SyncObjectEBSReqMsg" part="SyncObjectEBM" query="/objectebs:SyncObjectEBM/corecom:EBMHeader/corecom:EBMTracking/corecom:ExecutionUnitID"/>
</copy>
</assign>
The following transformation has to be created inside the ESB Component, the population of the ExecutionUnitID is described in the Best Practices Guide [ref: Oracle® SOA Suite Best Practices Guide 10g Release 3 (10.1.3.3.0) E10971-01 December 2007].
Tip: first let JDeveloper create the transformation and map one field to get all the namespaces populated, afterwards copy/paste the following code:
<xsl:template match="/">
<ebo:SyncObjectListEBM>
<corecom:EBMHeader>
<xsl:copy-of select="ebo:SyncObjectListEBM/corecom:EBMHeader/corecom:EBMID"/>
<xsl:copy-of select="ebo:SyncObjectListEBM/corecom:EBMHeader/corecom:EBMName"/>
<xsl:copy-of select="ebo:SyncObjectListEBM/corecom:EBMHeader/corecom:EBOName"/>
<xsl:copy-of select="ebo:SyncObjectListEBM/corecom:EBMHeader/corecom:CreationDateTime"/>
<xsl:copy-of select="ebo:SyncObjectListEBM/corecom:EBMHeader/corecom:VerbCode"/>
<xsl:copy-of select="ebo:SyncObjectListEBM/corecom:EBMHeader/corecom:MessageProcessingInstruction"/>
<xsl:copy-of select="ebo:SyncObjectListEBM/corecom:EBMHeader/corecom:Sender"/>
<xsl:copy-of select="ebo:SyncObjectListEBM/corecom:EBMHeader/corecom:Target"/>
<xsl:copy-of select="ebo:SyncObjectListEBM/corecom:EBMHeader/corecom:BusinessScope"/>
<xsl:for-each select="ebo:SyncObjectListEBM/corecom:EBMHeader/corecom:EBMTracking">
<xsl:copy-of select="."/>
</xsl:for-each>
<corecom:EBMTracking>
<corecom:SequenceNumber>
<xsl:value-of select="position() + 1"/>
</corecom:SequenceNumber>
<corecom:ExecutionUnitID>
<xsl:value-of select="ehdr:getInstanceID()"/>
</corecom:ExecutionUnitID>
<corecom:ExecutionUnitName>
<xsl:text disable-output-escaping="no">{http://xmlns.oracle.com/EnterpriseServices/Core/Object/V1}ObjectEBS</xsl:text>
</corecom:ExecutionUnitName>
<corecom:ImplementationCode>
<xsl:text disable-output-escaping="no">ESB</xsl:text>
</corecom:ImplementationCode>
<corecom:ActivityDateTime>
<xsl:value-of select="xp20:current-dateTime()"/>
</corecom:ActivityDateTime>
</corecom:EBMTracking>
</corecom:EBMHeader>
<xsl:for-each select="ebo:SyncObjectListEBM/ebo:DataArea">
<xsl:copy-of select="."/>
</xsl:for-each>
</ebo:SyncObjectListEBM>
</xsl:template>
Last thing: add the following property to your esb component:
name: enableAccessBusinessEvent
value: true
No comments:
Post a Comment