在 BizTalk Server 2004 Mapper 中使用自定义 XSLT 转换






4.37/5 (9投票s)
2006年3月1日
2分钟阅读

55157

582
本文介绍了在 BizTalk Server 2004 Mapper 中使用自定义 XSLT 转换。
引言
在使用 BizTalk Mapper 工具开发复杂映射时,会遇到多种需要自定义映射才能完成转换的情况。本文将解释如何使用 BizTalk Mapper 工具执行自定义 XSLT 转换。
背景
考虑一个采购订单 (PO) 请求,它将包含一个主订单请求和一组补充订单请求。 这类似于父子关系,其中父 PO 将包含用于父 PO 中包含的各种项目的多个子 PO。
BizTalk 平面文件架构解决方案 - 输入架构
在此示例中,我们将需要生成一个基线项目 (PARENT
) 数据标记和几个属于基线数据项目的子线数据项 (CHILD
)。 输入将包含几个“POAckDetail
”元素,每个元素都有几个属性。
- 属性“
ItemChildFlag
”指定节点是“PARENT
”还是“CHILD
”。 - 属性“
ParentLineNumber
”指定“CHILD
”节点所属的父节点。 - 属性“
ParentLineNumber
”必须与父节点的“SellerLineNum
”匹配。
请注意第二个 POAckDetail
元素,其“ItemChildFlag
”属性值包含“CHILD
”。 此元素的父节点将是 SellerLineNum
="0003" 的 POAckDetail
元素。
BizTalk Mapper
我们需要添加一个脚本 functoid 以进行自定义 XSLT 转换。 自定义 XSLT 将包含一个“template
”标记,必须在其中编写 XSLT 映射。 自定义 scriptoid 的输入将成为 XSLT 模板中的 <xsl:param name="SellerLineNum" />
。
Functoid 映射和自定义 XSLT 转换脚本
<xsl:template name="MyXsltConcatTemplate">
<xsl:param name="SellerLineNum" />
<xsl:for-each select="//POAckDetail/ItemCurrentInfo[@ItemChildFlag='CHILD'
and @ParentLineNumber=$SellerLineNum]">
<ns0:SLN_Subline_Item_Detail_S117
xmlns:ns0="http://www.covast.com/schemas/EDI/Accelerator2004">
<ns0:_380_Quantity_E4><xsl:value-of
select="../SellerLineNum" /></ns0:_380_Quantity_E4>
<ns0:_212_Unit_Price_E20><xsl:value-of
select="@UnitPrice" /></ns0:_212_Unit_Price_E20>
<ns0:_639_Basis_of_Unit_Price_Code_E21><xsl:value-of
select="@BasisOfUnitPriceTypeCode" />
</ns0:_639_Basis_of_Unit_Price_Code_E21>
</ns0:SLN_Subline_Item_Detail_S117>
</xsl:for-each>
</xsl:template>
第 1 行:XSL 模板声明语句
第 2 行:XSL 参数,这将映射到提供给脚本 functoid 的输入。
第 3 行:XSL for-each
语句,它迭代 'CHILD
' POAck
元素。
第 4-8 行:创建输出所需的 XML 结构。
第 9-10 行:关闭标签。
验证和测试创建的映射
完成编写映射后,我们需要测试映射。
步骤 1:在解决方案资源管理器中,选择映射“CBO-To-ASC_X12-Map.btm”,然后右键单击并选择“属性”。 如下面的图像所示指定属性...
步骤 2:在解决方案资源管理器中,选择映射“CBO-To-ASC_X12-Map.btm”,然后右键单击并选择“测试架构”。 观察输出窗口,您会注意到一条以“组件调用成功”开头的消息。 现在,单击以消息“Test Map success for map file...”开头的链接。
XML 输出文件将如下所示...
快速要点
- 通过使用自定义 XSLT 模板,BizTalk Mapper 脚本 functoid 在映射期间提供了最大的灵活性。