Ask a questionAsk a question
 

Answerselective mapping, can it be done?

  • Friday, February 15, 2008 7:46 PMMape1082 Users MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     

     

    Hi All,

     

    I am currently facing a mapping challenge: I have the source schema that looks like this:

     

    Header

    Name

    PONum

    ShippingDate

    Items_Loop

    Item

    Code

    Color

    Weight

     

    The destination schema looks like:

     

    Header

    Name

    MainLoop

    PONum

    ShippingDate

    Code

    Color

    Weight

     

    The problem is that in the MainLoop, the information that is mapped differs in the first two iterations:

     

    Iteration 1: Map PONum Only

    Iteration 2: Map ShippingDate Only

    Iteration 3: Map item 1

    Iteration 4: Map item 2

    and so on...

     

    How can this be accomplished with a biztalk map, what functoid should be used.

     

    Thank a lot!

     

Answers

  • Tuesday, February 19, 2008 4:01 PMBiffLagonkowitz Users MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     Answer
    Please ignore my previous post.  I found a much better solution and you can read about it in my follow up blog post http://benrunchey.wordpress.com/2008/02/19/finding-out-the-mapper-can-do-what-i-want-it-to-do/

     

    I much prefer this solution to my previous one!

  • Thursday, February 28, 2008 7:36 PMLeonid GanelineMVP, ModeratorUsers MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     Answer
     
    Code Snippet
    <xsl:for-each select="ns0:MEA_Measurements_S43">
    <xsl:variable name="var:Measurment_qualifier" select="ns0:_6311_Measurement_application_qualifier_E1/text()" />
    <xsl:variable name="var:Measurement_dimension" select="ns0:_6313_Measurement_dimension__coded_E2_COMP/ns0:_6313_Measurement_dimension__coded_E2/text()" />
    <xsl:variable name="var:Measurement_value" select="ns0:_6411_Measure_unit_qualifier_E6_COMP/ns0:_6314_Measurement_value_E7/text()" />
    <xsl:variable name="var:unit_qualifier" select="ns0:_6411_Measure_unit_qualifier_E6_COMP/ns0:_6411_Measure_unit_qualifier_E6/text()" />
     <xsl:if test="$var:Measurment_qualifier='AAE'">
      <xsl:if test="$var:Measurement_dimension='G'">
        <Value>
        <xsl:value-of select="$var:Measurement_value" />
        </Value>
      </xsl:if>
     </xsl:if>
    </xsl:for-each>
     
        <Unit>
    <xsl:for-each select="ns0:MEA_Measurements_S43">
    <xsl:variable name="var:Measurment_qualifier" select="ns0:_6311_Measurement_application_qualifier_E1/text()" />
    <xsl:variable name="var:Measurement_dimension" select="ns0:_6313_Measurement_dimension__coded_E2_COMP/ns0:_6313_Measurement_dimension__coded_E2/text()" />
    <xsl:variable name="var:Measurement_value" select="ns0:_6411_Measure_unit_qualifier_E6_COMP/ns0:_6314_Measurement_value_E7/text()" />
    <xsl:variable name="var:unit_qualifier" select="ns0:_6411_Measure_unit_qualifier_E6_COMP/ns0:_6411_Measure_unit_qualifier_E6/text()" />
     <xsl:if test="$var:Measurment_qualifier='AAE'">
      <xsl:if test="$var:Measurement_dimension='G'">
        <xsl:value-of select="$var:unit_qualifier" />
      </xsl:if>
     </xsl:if>
    </xsl:for-each>
        </Unit>
      </Weight>
     
      <Volume>
    <xsl:for-each select="ns0:MEA_Measurements_S43">
    <xsl:variable name="var:Measurment_qualifier" select="ns0:_6311_Measurement_application_qualifier_E1/text()" />
    <xsl:variable name="var:Measurement_dimension" select="ns0:_6313_Measurement_dimension__coded_E2_COMP/ns0:_6313_Measurement_dimension__coded_E2/text()" />
    <xsl:variable name="var:Measurement_value" select="ns0:_6411_Measure_unit_qualifier_E6_COMP/ns0:_6314_Measurement_value_E7/text()" />
    <xsl:variable name="var:unit_qualifier" select="ns0:_6411_Measure_unit_qualifier_E6_COMP/ns0:_6411_Measure_unit_qualifier_E6/text()" />
     <xsl:if test="$var:Measurment_qualifier='AAE'">
      <xsl:if test="$var:Measurement_dimension='AAW'">
        <Value>
        <xsl:value-of select="$var:Measurement_value" />
        </Value>
      </xsl:if>
     </xsl:if>
    </xsl:for-each>
     
        <Unit>
    <xsl:for-each select="ns0:MEA_Measurements_S43">
    <xsl:variable name="var:Measurment_qualifier" select="ns0:_6311_Measurement_application_qualifier_E1/text()" />
    <xsl:variable name="var:Measurement_dimension" select="ns0:_6313_Measurement_dimension__coded_E2_COMP/ns0:_6313_Measurement_dimension__coded_E2/text()" />
    <xsl:variable name="var:Measurement_value" select="ns0:_6411_Measure_unit_qualifier_E6_COMP/ns0:_6314_Measurement_value_E7/text()" />
    <xsl:variable name="var:unit_qualifier" select="ns0:_6411_Measure_unit_qualifier_E6_COMP/ns0:_6411_Measure_unit_qualifier_E6/text()" />
     <xsl:if test="$var:Measurment_qualifier='AAE'">
      <xsl:if test="$var:Measurement_dimension='AAW'">
        <xsl:value-of select="$var:unit_qualifier" />
      </xsl:if>
     </xsl:if>
    </xsl:for-each>
        </Unit>

     

     

    For example, It is a code for mapping the EDIFACT_CUSCAR_D_95B schema.

All Replies

  • Friday, February 15, 2008 11:26 PMBiffLagonkowitz Users MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     

    So are you looking to have a Destination document that looks like this...

     

    Header

    Name

    MainLoop

    PONum

    MainLoop

    ShippingDate

    MainLoop

    Code

    Color

    Weight

    MainLoop

    Code

    Color

    Weight

     

     

     

  • Saturday, February 16, 2008 12:38 AMMoustafar Users MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     

    Hi

    This is a very complicated scenario but You can use a check functiod on the iteration number. I think I will write a blog anoput this if you can send me the schemas and a sample I would appreciate it thanks

     

  • Sunday, February 17, 2008 12:19 AMLeonid GanelineMVP, ModeratorUsers MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     
    It is very typical case in EDI schemas.
    I use the Xslt script functoids for it. Nothing special. If you give us the source and destination schemas (of course only part of them) we could help you.
  • Monday, February 18, 2008 3:50 PMMape1082 Users MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     

     

    Thank all of you for your quick responses. Yes it is an EDI case indeed. The following are oversimplified versions of the schemas I am using:

     

    Source Schema:

     

    <?xml version="1.0" encoding="utf-16"?>
    <xsTongue Tiedchema xmlns:b="http://schemas.microsoft.com/BizTalk/2003" xmlns="http://FlatFileTest.SrcSchema" targetNamespace="http://FlatFileTest.SrcSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema">
      <xs:element name="Header">
        <xs:complexType>
          <xsTongue Tiedequence>
            <xs:element name="PONum" type="xsTongue Tiedtring" />
            <xs:element name="Name" type="xsTongue Tiedtring" />
            <xs:element name="PODate" type="xsTongue Tiedtring" />
            <xs:element name="ShippingNum" type="xsTongue Tiedtring" />
            <xs:element name="ShippingDate" type="xsTongue Tiedtring" />
          </xsTongue Tiedequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="Items">
        <xs:complexType>
          <xsTongue Tiedequence>
            <xs:element minOccurs="1" maxOccurs="9999" name="Item">
              <xs:complexType>
                <xsTongue Tiedequence>
                  <xs:element name="Code" type="xsTongue Tiedtring" />
                  <xs:element name="Size" type="xsTongue Tiedtring" />
                  <xs:element name="Color" type="xsTongue Tiedtring" />
                  <xs:element name="Qty" type="xsTongue Tiedtring" />
                </xsTongue Tiedequence>
              </xs:complexType>
            </xs:element>
          </xsTongue Tiedequence>
        </xs:complexType>
      </xs:element>
    </xsTongue Tiedchema>

     

     

    The destination schema is itself the ANSI X12 856 schema that is found in the Biztalk installation directory, but here I put just a representaiton of it:

     

    <?xml version="1.0" encoding="utf-16"?>
    <xsTongue Tiedchema xmlns:b="http://schemas.microsoft.com/BizTalk/2003" xmlns="http://FlatFileTest.DestSchema" targetNamespace="http://FlatFileTest.DestSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema">
      <xs:element name="X12_00401_856">
        <xs:complexType>
          <xsTongue Tiedequence>
            <xs:element name="ST">
              <xs:complexType>
                <xsTongue Tiedequence>
                  <xs:element name="ST01" type="xsTongue Tiedtring" />
                </xsTongue Tiedequence>
              </xs:complexType>
            </xs:element>
            <xs:element name="BSN">
              <xs:complexType>
                <xsTongue Tiedequence>
                  <xs:element name="BSN01" type="xsTongue Tiedtring" />
                </xsTongue Tiedequence>
              </xs:complexType>
            </xs:element>
            <xs:element name="DTM">
              <xs:complexType>
                <xsTongue Tiedequence>
                  <xs:element name="DTM01" type="xsTongue Tiedtring" />
                </xsTongue Tiedequence>
              </xs:complexType>
            </xs:element>
            <xs:element minOccurs="1" maxOccurs="200000" name="HLLoop1">
              <xs:complexType>
                <xsTongue Tiedequence>
                  <xs:element name="HL">
                    <xs:complexType>
                      <xsTongue Tiedequence>
                        <xs:element name="HL1" type="xsTongue Tiedtring" />
                      </xsTongue Tiedequence>
                    </xs:complexType>
                  </xs:element>
                  <xs:element name="LIN">
                    <xs:complexType>
                      <xsTongue Tiedequence>
                        <xs:element name="LIN1" type="xsTongue Tiedtring" />
                      </xsTongue Tiedequence>
                    </xs:complexType>
                  </xs:element>
                  <xs:element name="PRF">
                    <xs:complexType>
                      <xsTongue Tiedequence>
                        <xs:element name="PRF1" type="xsTongue Tiedtring" />
                      </xsTongue Tiedequence>
                    </xs:complexType>
                  </xs:element>
                  <xs:element name="DTM_2">
                    <xs:complexType>
                      <xsTongue Tiedequence>
                        <xs:element name="DTM01" type="xsTongue Tiedtring" />
                      </xsTongue Tiedequence>
                    </xs:complexType>
                  </xs:element>
                </xsTongue Tiedequence>
              </xs:complexType>
            </xs:element>
            <xs:element name="SE">
              <xs:complexType />
            </xs:element>
          </xsTongue Tiedequence>
        </xs:complexType>
      </xs:element>
    </xsTongue Tiedchema>

     

    What I need to do is something like BiffLagonkowitz pointed, a map like the following:

     

    SrcSchema.Header.Name -> DestSchema.BSN.BSN01

    SrcSchema.Header.ShippingDate-> DestSchema.DTM.DTM01

    SrcSchema.Header.PODate-> DestSchema.HLLoop1[1].DTM_2.DTM01

    SrcSchema.Header.PONum-> DestSchema.HLLoop1[2].PRF.PRF01

     

    SrcSchema.Items[1].Code-> DestSchema.HLLoop1[3].LIN.LIN01

    SrcSchema.Items[1].Size-> DestSchema.HLLoop1[3].LIN.LIN02

    SrcSchema.Header.ShippingNum-> DestSchema.HLLoop1[3].LIN.LIN03

    SrcSchema.Items[1].Color-> DestSchema.HLLoop1[3].LIN.LIN04

     

    SrcSchema.Items[2].Code-> DestSchema.HLLoop1[4].LIN.LIN01

    SrcSchema.Items[2].Size-> DestSchema.HLLoop1[4].LIN.LIN02

    SrcSchema.Header.ShippingNum-> DestSchema.HLLoop1[4].LIN.LIN03

    SrcSchema.Items[2].Color-> DestSchema.HLLoop1[4].LIN.LIN04

     

    .... and so on...

     

    I appreciate your input on this matter!

    Thanks a lot!

     

     

     

  • Tuesday, February 19, 2008 3:26 AMBiffLagonkowitz Users MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     
    I have a solution.  It is just a matter of if you like it or not.  Please check out my blog post at http://benrunchey.wordpress.com/2008/02/19/some-xslt-for-when-you-just-cant-get-the-mapper-to-do-what-you-want-it-to-do/

     

    -Biff

  • Tuesday, February 19, 2008 4:01 PMBiffLagonkowitz Users MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     Answer
    Please ignore my previous post.  I found a much better solution and you can read about it in my follow up blog post http://benrunchey.wordpress.com/2008/02/19/finding-out-the-mapper-can-do-what-i-want-it-to-do/

     

    I much prefer this solution to my previous one!

  • Wednesday, February 20, 2008 3:56 PMLeonid GanelineMVP, ModeratorUsers MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     
    From my experience those tricks with BizTalk Mapper are not working stable on the different schemas. They are just the tricks and nobody knows how mapper create the real Xslt from them.
    I prefer using the raw Xslt code in the Script functoids. At last you know how it works and how you can influence it.
    But it is just my opinion Smile
     
  • Thursday, February 28, 2008 6:08 PMMape1082 Users MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     

    Thanks to you and everybody that posted, your input is really valuable.

     

    Leonid, could you provide some sample for my reference?

     

    Thanks a lot!

     

    Miguel

  • Thursday, February 28, 2008 7:36 PMLeonid GanelineMVP, ModeratorUsers MedalsUsers MedalsUsers MedalsUsers MedalsUsers Medals
     Answer
     
    Code Snippet
    <xsl:for-each select="ns0:MEA_Measurements_S43">
    <xsl:variable name="var:Measurment_qualifier" select="ns0:_6311_Measurement_application_qualifier_E1/text()" />
    <xsl:variable name="var:Measurement_dimension" select="ns0:_6313_Measurement_dimension__coded_E2_COMP/ns0:_6313_Measurement_dimension__coded_E2/text()" />
    <xsl:variable name="var:Measurement_value" select="ns0:_6411_Measure_unit_qualifier_E6_COMP/ns0:_6314_Measurement_value_E7/text()" />
    <xsl:variable name="var:unit_qualifier" select="ns0:_6411_Measure_unit_qualifier_E6_COMP/ns0:_6411_Measure_unit_qualifier_E6/text()" />
     <xsl:if test="$var:Measurment_qualifier='AAE'">
      <xsl:if test="$var:Measurement_dimension='G'">
        <Value>
        <xsl:value-of select="$var:Measurement_value" />
        </Value>
      </xsl:if>
     </xsl:if>
    </xsl:for-each>
     
        <Unit>
    <xsl:for-each select="ns0:MEA_Measurements_S43">
    <xsl:variable name="var:Measurment_qualifier" select="ns0:_6311_Measurement_application_qualifier_E1/text()" />
    <xsl:variable name="var:Measurement_dimension" select="ns0:_6313_Measurement_dimension__coded_E2_COMP/ns0:_6313_Measurement_dimension__coded_E2/text()" />
    <xsl:variable name="var:Measurement_value" select="ns0:_6411_Measure_unit_qualifier_E6_COMP/ns0:_6314_Measurement_value_E7/text()" />
    <xsl:variable name="var:unit_qualifier" select="ns0:_6411_Measure_unit_qualifier_E6_COMP/ns0:_6411_Measure_unit_qualifier_E6/text()" />
     <xsl:if test="$var:Measurment_qualifier='AAE'">
      <xsl:if test="$var:Measurement_dimension='G'">
        <xsl:value-of select="$var:unit_qualifier" />
      </xsl:if>
     </xsl:if>
    </xsl:for-each>
        </Unit>
      </Weight>
     
      <Volume>
    <xsl:for-each select="ns0:MEA_Measurements_S43">
    <xsl:variable name="var:Measurment_qualifier" select="ns0:_6311_Measurement_application_qualifier_E1/text()" />
    <xsl:variable name="var:Measurement_dimension" select="ns0:_6313_Measurement_dimension__coded_E2_COMP/ns0:_6313_Measurement_dimension__coded_E2/text()" />
    <xsl:variable name="var:Measurement_value" select="ns0:_6411_Measure_unit_qualifier_E6_COMP/ns0:_6314_Measurement_value_E7/text()" />
    <xsl:variable name="var:unit_qualifier" select="ns0:_6411_Measure_unit_qualifier_E6_COMP/ns0:_6411_Measure_unit_qualifier_E6/text()" />
     <xsl:if test="$var:Measurment_qualifier='AAE'">
      <xsl:if test="$var:Measurement_dimension='AAW'">
        <Value>
        <xsl:value-of select="$var:Measurement_value" />
        </Value>
      </xsl:if>
     </xsl:if>
    </xsl:for-each>
     
        <Unit>
    <xsl:for-each select="ns0:MEA_Measurements_S43">
    <xsl:variable name="var:Measurment_qualifier" select="ns0:_6311_Measurement_application_qualifier_E1/text()" />
    <xsl:variable name="var:Measurement_dimension" select="ns0:_6313_Measurement_dimension__coded_E2_COMP/ns0:_6313_Measurement_dimension__coded_E2/text()" />
    <xsl:variable name="var:Measurement_value" select="ns0:_6411_Measure_unit_qualifier_E6_COMP/ns0:_6314_Measurement_value_E7/text()" />
    <xsl:variable name="var:unit_qualifier" select="ns0:_6411_Measure_unit_qualifier_E6_COMP/ns0:_6411_Measure_unit_qualifier_E6/text()" />
     <xsl:if test="$var:Measurment_qualifier='AAE'">
      <xsl:if test="$var:Measurement_dimension='AAW'">
        <xsl:value-of select="$var:unit_qualifier" />
      </xsl:if>
     </xsl:if>
    </xsl:for-each>
        </Unit>

     

     

    For example, It is a code for mapping the EDIFACT_CUSCAR_D_95B schema.