使用BizTalk映射从两个输入架构生成叉积

使用BizTalk映射从两个输入架构生成叉积,biztalk,biztalk-2010,biztalk-mapper,Biztalk,Biztalk 2010,Biztalk Mapper,我正在BizTalk中使用多对一映射,以使用输入模式节点上的跨积逻辑生成的数据生成输出模式 下图描述了我所做的工作: 示例输入XML如下所示: <!-Schema1 Instance--> <Root> <Data> <ItemCode>10</ItemCode> <ItemCost>1024</ItemCost> </Data> <Da

我正在BizTalk中使用多对一映射,以使用输入模式节点上的跨积逻辑生成的数据生成输出模式

下图描述了我所做的工作:

示例输入XML如下所示:

<!-Schema1 Instance-->
<Root>
    <Data>
        <ItemCode>10</ItemCode>
        <ItemCost>1024</ItemCost>
    </Data>
    <Data>
        <ItemCode>20</ItemCode>
        <ItemCost>2048</ItemCost>
    </Data>
</Root>

<!-Schema2 Instance-->
<Root>
    <Data>
        <Code>10</Code>
        <ShipAddr>addr11101</ShipAddr>
    </Data>
    <Data>
        <Code>30</Code>
        <ShipAddr>addr33301</ShipAddr>
    </Data>
    <Data>
        <Code>20</Code>
        <ShipAddr>addr22201</ShipAddr>
    </Data>
    <Data>
        <Code>10</Code>
        <ShipAddr>addr11102</ShipAddr>
    </Data>
</Root>
所需的输出基于基于Schema1.ItemCode和Schema2.Code相等性执行的叉积。样本如下:

<!--Output Schema Instance required; Order of records is irrelevant-->
<Root>
    <Data>
        <Code>10</Code>
        <ItemCost>1024</ItemCost>
        <ShipAddr>addr11101</ShipAddr>
    </Data>
    <Data>
        <Code>20</Code>
        <ItemCost>2048</ItemCost>
        <ShipAddr>addr22201</ShipAddr>
    </Data>
    <Data>
        <Code>10</Code>
        <ItemCost>1024</ItemCost>
        <ShipAddr>addr11102</ShipAddr>
    </Data>
</Root>
实际产量:

  • 不带循环functoid的输出
  • XML输出

    <ns0:Root xmlns:ns0="http://TestTO_DELETE.SchemaOut">
        <Data>
            <Code>10</Code><ItemCost>1024</ItemCost><ShipAddr>addr11101</ShipAddr>
        </Data>
        <Data><Code>20</Code></Data>
    </ns0:Root>
    
    <ns0:Root xmlns:ns0="http://TestTO_DELETE.SchemaOut">
        <Data>
            <Code>10</Code>
        </Data>
        <Data>
            <Code>20</Code>
        </Data>
        <Data />
        <Data />
        <Data />
        <Data />
    </ns0:Root>
    
  • 具有循环functoid连接1和2的输出
  • XML输出

    <ns0:Root xmlns:ns0="http://TestTO_DELETE.SchemaOut">
        <Data>
            <Code>10</Code><ItemCost>1024</ItemCost><ShipAddr>addr11101</ShipAddr>
        </Data>
        <Data><Code>20</Code></Data>
    </ns0:Root>
    
    <ns0:Root xmlns:ns0="http://TestTO_DELETE.SchemaOut">
        <Data>
            <Code>10</Code>
        </Data>
        <Data>
            <Code>20</Code>
        </Data>
        <Data />
        <Data />
        <Data />
        <Data />
    </ns0:Root>
    
  • 单循环functoid连接1的输出
  • XML输出

    <ns0:Root xmlns:ns0="http://TestTO_DELETE.SchemaOut">
        <Data>
            <Code>10</Code><ItemCost>1024</ItemCost><ShipAddr>addr11101</ShipAddr>
        </Data>
        <Data>
            <Code>20</Code>
        </Data>
    </ns0:Root>
    

    请建议如何在这种情况下继续?

    我尝试了各种functoid组合以获得所需的输出模式,但没有任何效果。因此,我最终开始使用脚本functoid,这达到了我的目的。我正在发布我的发现,因为它可能对其他人有所帮助

    我是这样继续的:

  • 从映射中删除所有连接和functoid
  • 添加脚本functoid
  • 将InputMesagePart_0连接到脚本functoid的输入
  • 将脚本functoid连接到输出架构的第一个元素节点
  • 在脚本Functoid配置中,添加转换逻辑。例如,在我的案例中,逻辑是:

  • 如果您想将mapper屏幕截图粘贴到pastebin之类的地方,我将编辑您的问题以包含图像。图像上载于