Картографиране на свързан повтарящ се възел към повтарящ се възел в BizTalk Mapper

Опитвам се да направя карта на BizTalk 2013 и съм блокиран при този проблем с картографирането (с помощта на mapper):

Съобщение за въвеждане:

<DetailsResponse>
    <HeaderDetails>
        <DocumentNumber>322</DocumentNumber>
    </HeaderDetails>
    <ItemDetails>
        <item>
            <DocumentNumber>322</DocumentNumber>
            <ItemNumber>1</ItemNumber>
            <MaterialNumber>40</MaterialNumber>
            <Description>random description 1</Description>
        </item>
        <item>
            <DocumentNumber>322</DocumentNumber>
            <ItemNumber>2</ItemNumber>
            <MaterialNumber>41</MaterialNumber>
            <Description>random description 2</Description>
        </item>
    </ItemDetails>
    <ScheduleDetails>
        <item>
            <DocumentNumber>322</DocumentNumber>
            <ItemNumber>1</ItemNumber>
            <ConfirmedQuantity>2.000</ConfirmedQuantity>
        </item>
        <item>
            <DocumentNumber>322</DocumentNumber>
            <ItemNumber>2</ItemNumber>
            <ConfirmedQuantity>3.000</ConfirmedQuantity>
        </item>
    </ScheduleDetails>
</DetailsResponse>

Предвидено изходно съобщение:

<Response>
    <Data>
        <Items>
            <Item>
                <LineNumber>
                    <Internal>1</Internal>
                </LineNumber>
                <ConfirmedQuantity>
                    <Value>2</Value>
                </ConfirmedQuantity>
                <Article>
                    <Number>40</Number>
                    <Description>random description 1</Description>
                </Article>
            </Item>
            <Item>
                <LineNumber>
                    <Internal>2</Internal>
                </LineNumber>
                <ConfirmedQuantity>
                    <Value>3</Value>
                </ConfirmedQuantity>
                <Article>
                    <Number>41</Number>
                    <Description>random description 2</Description>
                </Article>
            </Item>
        </Items>
    </Data>
</Response>

Искам да картографирам ItemsDetails и ScheduleDetails към Item, като "обединя" техните данни въз основа на ItemNumber. Вече опитах много неща, но все още не успях.

Не можах да намеря никакъв пример за това. Този модел има ли конкретно име?

Ако някой има някаква идея, която може да сподели, ще бъде благодарен.


person Ricardo    schedule 28.01.2014    source източник
comment
Това може да се направи само с помощта на функцията Call Xslt Template. Ето някои обяснения: adventuresinsidethemessagebox.wordpress.com/2012/04/01/   -  person FCR    schedule 29.01.2014


Отговори (2)


Единственият начин, по който се сещам да накарам това да работи с Functoids, е да свържа ItemDetails и ScheduleDetails с един или повече Looping Functoids и да използвам Equal Functoid за филтриране на ScheduleDetails въз основа на текущия ItemDetail ItemNumber.

Ако това не работи, единствената ви друга опция е персонализиран Xslt. Шаблонът за повикване би бил доста ясен.

person Johns-305    schedule 28.01.2014

Ако преобразувайте вашата карта в vanilla XSLT, след което картографирането става лесно:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      version="1.0">

   <xsl:output method="xml" indent="yes"/>

   <xsl:key name="itemSchedules" 
            match="/DetailsResponse/ScheduleDetails/item" 
            use="concat(DocumentNumber,'-',ItemNumber)" />

   <xsl:template match="/DetailsResponse">
      <Response>
         <Data>
            <Items>
               <xsl:apply-templates select="ItemDetails/item" />
            </Items>
         </Data>
      </Response>
   </xsl:template>

   <xsl:template match="item">
      <Item>
         <LineNumber>
            <Internal>
               <xsl:value-of select="ItemNumber"/>
            </Internal>
         </LineNumber>
         <ConfirmedQuantity>
            <Value>
               <xsl:value-of select="format-number(key('itemSchedules', 
                concat(DocumentNumber,'-',ItemNumber))/ConfirmedQuantity,0)" />
            </Value>
         </ConfirmedQuantity>
         <Article>
            <Number>
               <xsl:value-of select="MaterialNumber"/>
            </Number>
            <Description>
               <xsl:value-of select="Description"/>
            </Description>
         </Article>
      </Item>
   </xsl:template>
</xsl:stylesheet>

xsl:key запазва индекс на препратки към 'част' от пъзела с подробности за графика и ние създаваме свързан ключ от DocumentNumber и ItemNumber.

person StuartLC    schedule 29.01.2014