Introduction
It is very common scenario to map values from a loop in the applications where EDI X12 schemas are used and one of them is N1 Loop. Loops are nothing but blocks of repeating data. And N1 loop is such block which has address related data (Party Identification).
It is not mandatory and in the schema which ships with BizTalk, allows it to repeat up-to 200 times (EDI schema are shipped in as a self-extracting executable and when extracted, schemas can be found at drive:\Program Files\Microsoft BizTalk Server 2010\XSD_Schema\EDI.)
But it can vary and totally depends upon the requirement.
And from the multiple data, specific data is to be mapped to a particular node.
In this article, BillTo and ShipTo nodes are used as an example to which data is to be mapped from repeating data (N1Loop).
Input file
BEG*00*DS*45000007**20131002~
CUR*BY*USD~
REF*KK*STANDARD~
REF*BAI*8000~
REF*AAT*80206234~
REF*BLT*INVOICE~
REF*VR*1~
PER*BD*Collin Wag*TE*610-386-1189*FX*610-728-2210*EM*collin_wag@someemail.com~
N9*ZZ**REFERENCE NOTES~
N1*BT*Demo International*91*1100~
N2*WAN MIN-SV~
N3*PO Box 158~
N4*Secaus*NJ*07096*US~
PER*PR**TE*1110001111***EM*mahesht@ivisionsoftware.com~
N1*ST*BMS MEDEREX*91*00000~
N2*WAN MIN-SV~
N3*700 RD~
N4*RED CITY*CA*940632477*US~
PER*SH**TE*1110001111***EM*maheshstiwari@gmail.com~
N1*VN*Demo BIOSCIENCES*91*6868~
REF*PO*0043331289~
PO1*00001*2*PK*175.95*DI*VC*28-9165-37*CB*95056-246***PL*000040~
PO1*00001*2*PK*175.95*DI*VC*28-9165-37*CB*95056-246***PL*000040~
PID*F**ZZ*C*HITRAP CAPTO DEAE 1ML PK5 HITRAP CAPTO D~
PO4*1*1*PK~
REF*AAS*8013170709~
REF*BV*00004~
REF*PRT*2~
REF*LT*N~
DTM*002*20130828~
CTT*1~
SE*33*0001~
Mapping N1 loop to BillTo
Below are the steps to map values from N1Loop to BillTo Node (non repeating):
Step 1: Drag a link from N1 Loop1 and connect it to BillTo Node.
Step 2: Drop a Equal functoid on map grid.
Step 3: Link N101 node (it holds the Party identifier value, BT) to Equal Functoid, this will be the first input.
Step 4: Double click the Equal Functoid and set the value of the second input parameter as BT.
Step 5: Link the output of Equal functoid to BillTo Node. Thus if value of N101 matches then the output of this functoid will be true and BillTo Node will be created.
Step 6: Now link the others as shown in figure 2.
Mapping N1 loop to ShipTo
Below are the steps to map values from N1Loop to ShipTo Node (non repeating):
Step 1: Drag a link from N1 Loop1 and connect it to ShipTo Node.
Step 2: Drop a Equal functoid on map grid.
Step 3: Link N101 node (it holds the Party identifier value, ST) to Equal Functoid, this will be the first input.
Step 4: Double click the Equal Functoid and set the value of the second input parameter as ST.
Step 5: Link the output of Equal functoid to ShipTo Node. Thus if value of N101 matches then the output of this functoid will be true and ShipTo Node will be created.
Step 6: Now link the others as shown in figure 4.
XSLT code section of N1Loop
<xsl:for-each select="s0:N1Loop1">
<xsl:for-each select="s0:N2">
<xsl:variable name="var:v2" select="userCSharp:LogicalEq(string(../s0:N1/N101/text()) , "ST=""")" />
<xsl:if test="$var:v2">
<ShipTo>
<xsl:if test="../s0:N1/N104">
<ID>
<xsl:value-of select="../s0:N1/N104/text()" />
</ID>
</xsl:if>
<xsl:if test="../s0:N1/N102">
<Name>
<xsl:value-of select="../s0:N1/N102/text()" />
</Name>
</xsl:if>
<AddressLine1>
<xsl:value-of select="N201/text()" />
</AddressLine1>
<AddressLine2>
<xsl:value-of select="../s0:N3/N301/text()" />
</AddressLine2>
<xsl:if test="../s0:N4/N401">
<City>
<xsl:value-of select="../s0:N4/N401/text()" />
</City>
</xsl:if>
<xsl:if test="../s0:N4/N402">
<State>
<xsl:value-of select="../s0:N4/N402/text()" />
</State>
</xsl:if>
<xsl:if test="../s0:N4/N403">
<PostalCode>
<xsl:value-of select="../s0:N4/N403/text()" />
</PostalCode>
</xsl:if>
<xsl:if test="../s0:N4/N404">
<Country>
<xsl:value-of select="../s0:N4/N404/text()" />
</Country>
</xsl:if>
<xsl:if test="../s0:PER_2/PER04">
<TelephoneNumber>
<xsl:value-of select="../s0:PER_2/PER04/text()" />
</TelephoneNumber>
</xsl:if>
<xsl:if test="../s0:PER_2/PER08">
<EmailAddress>
<xsl:value-of select="../s0:PER_2/PER08/text()" />
</EmailAddress>
</xsl:if>
<xsl:if test="..">
<xsl:value-of select="../text()" />
</xsl:if>
</ShipTo>
</xsl:if>
</xsl:for-each>
</xsl:for-each>
<xsl:for-each select="s0:N1Loop1">
<xsl:for-each select="s0:N2">
<xsl:variable name="var:v3" select="string(../s0:N1/N101/text())" />
<xsl:variable name="var:v4" select="userCSharp:LogicalEq($var:v3 , "BT=""")" />
<xsl:if test="$var:v4">
<BillTo>
<xsl:if test="../s0:N1/N103">
<ID>
<xsl:value-of select="../s0:N1/N103/text()" />
</ID>
</xsl:if>
<xsl:if test="../s0:N1/N102">
<Name>
<xsl:value-of select="../s0:N1/N102/text()" />
</Name>
</xsl:if>
<AddressLine1>
<xsl:value-of select="N201/text()" />
</AddressLine1>
<AddressLine2>
<xsl:value-of select="../s0:N3/N301/text()" />
</AddressLine2>
<xsl:if test="../s0:N4/N401">
<City>
<xsl:value-of select="../s0:N4/N401/text()" />
</City>
</xsl:if>
<xsl:if test="../s0:N4/N402">
<State>
<xsl:value-of select="../s0:N4/N402/text()" />
</State>
</xsl:if>
<xsl:if test="../s0:N4/N403">
<PostalCode>
<xsl:value-of select="../s0:N4/N403/text()" />
</PostalCode>
</xsl:if>
<xsl:if test="../s0:N4/N404">
<Country>
<xsl:value-of select="../s0:N4/N404/text()" />
</Country>
</xsl:if>
<xsl:if test="../s0:PER_2/PER04">
<TelephoneNumber>
<xsl:value-of select="../s0:PER_2/PER04/text()" />
</TelephoneNumber>
</xsl:if>
<xsl:if test="../s0:PER_2/PER08">
<EmailAddress>
<xsl:value-of select="../s0:PER_2/PER08/text()" />
</EmailAddress>
</xsl:if>
<xsl:if test="..">
<xsl:value-of select="../text()" />
</xsl:if>
</BillTo>
</xsl:if>
</xsl:for-each>
</xsl:for-each>
Output
<Header>
<OrderId>45000007</OrderId>
<OrderDate>2013-10-02</OrderDate>
<Currency>USD</Currency>
<ShipTo>
<ID>00000</ID>
<Name>BMS MEDEREX</Name>
<AddressLine1>WAN MIN-SV</AddressLine1>
<AddressLine2>700 RD</AddressLine2>
<City>RED CITY</City>
<State>CA</State>
<PostalCode>940632477</PostalCode>
<Country>US</Country>
<TelephoneNumber>1110001111</TelephoneNumber>
<EmailAddress>maheshstiwari@gmail.com</EmailAddress>
</ShipTo>
<BillTo>
<ID>91</ID>
<Name>Demo International</Name>
<AddressLine1>WAN MIN-SV</AddressLine1>
<AddressLine2>PO Box 158</AddressLine2>
<City>Secaus</City>
<State>NJ</State>
<PostalCode>07096</PostalCode>
<Country>US</Country>
<TelephoneNumber>1110001111</TelephoneNumber>
<EmailAddress>mahesht@ivisionsoftware.com</EmailAddress>
</BillTo>
<HeaderComment>This is Header Comment</HeaderComment>
</Header>
<Details>
<Item>
<ItemId>28-9165-37</ItemId>
<ItemDescription>C</ItemDescription>
<Quantity>2</Quantity>
<UnitPrice>175.95</UnitPrice>
<LineNumber>00001</LineNumber>
<UOM>PK</UOM>
<RequestedDeliveryDate>2013-10-02</RequestedDeliveryDate>
<LineComment>This is line comment</LineComment>
</Item>
</Details>
If you have questions or suggestions, feel free to do in comments section below !!!
Do share if you find this helpful .......
Knowledge Sharing is Caring !!!!!!
Related Post
- Interview questions on Orchestration
- Interview questions on Schema
- Interview questions on Map
- Interview questions on BRE
- Interview questions on Visual Studio in context to BizTalk
- Interview questions on BizTalk Pipeline
- Interview questions on BizTalk BAM
- Interview questions on BizTalk Application
- Interview questions on XSLT - BizTalk
- Interview questions on Helper Class/.Net Assemblies BizTalk
- Interview questions on BizTalk Adapter
- Interview questions on Functoid
- Interview questions on BizTalk Database
- Interview questions on BizTalk EDI
- Interview questions on Orchestration
- Interview questions on Schema
- Interview questions on Map
- Interview questions on BRE
- Interview questions on Visual Studio in context to BizTalk
- Interview questions on BizTalk Pipeline
- Interview questions on BizTalk BAM
- Interview questions on BizTalk Application
- Interview questions on XSLT - BizTalk
- Interview questions on Helper Class/.Net Assemblies BizTalk
- Interview questions on BizTalk Adapter
- Interview questions on Functoid
- Interview questions on BizTalk Database
- Interview questions on BizTalk EDI