1

我正在尝试在 BizTalk 2013 上制作地图,但我被这个映射问题阻止了(使用映射器):

输入消息:

<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和。我已经尝试了很多东西,但还没有做到。ScheduleDetailsItemItemNumber

我找不到任何关于这个的例子。这个模式有什么特别的名字吗?

如果有人有任何想法可以分享,将不胜感激。

4

2 回答 2

0

如果您将地图转换vanillaXSLT,则映射变得简单:

<?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保留了对拼图的时间表详细信息“部分”的引用索引,我们创建了 and 的链接DocumentNumberItemNumber

于 2014-01-29T10:37:36.457 回答
0

我能想到的使用 Functoid 的唯一方法是将 ItemDetails 和 ScheduleDetails 与一个或多个 Looping Functoid 链接,并使用 Equal Functoid 根据当前的 ItemDetail ItemNumber 过滤 ScheduleDetails。

这行不通,您唯一的其他选择是自定义 Xslt。调用模板将非常简单。

于 2014-01-28T16:57:00.597 回答