BizTalk 2016中如何基于源架构字段值映射目标架构字段
在BizTalk中实现条件字段映射的方案
完全可以实现,BizTalk提供了两种常用的方案来满足这个仅当NewProviderInd值为Yes时才映射字段的需求:
方法一:使用Functoid可视化配置
这种方式适合不想手写XSLT的场景,通过拖拽functoid完成配置:
- 从工具箱拖入Logical String Equal functoid,将源架构的
NewProviderInd元素连接到该functoid的第一个输入,然后在functoid属性里设置第二个比较值为Yes - 为每个需要映射的字段拖入Value Mapping (Flattening) functoid,将上面的Logical String Equal输出连接到该functoid的第一个输入(条件输入)
- 将源字段连接到对应Value Mapping (Flattening)的第二个输入(值输入),再把functoid的输出连接到目标字段
- 效果:只有当
NewProviderInd等于Yes时,目标字段才会被生成并赋值;条件不满足时,目标字段不会出现在输出消息中
方法二:自定义XSLT映射
如果字段数量多(近40个),手写XSLT会更高效,也便于批量维护:
- 在BizTalk映射编辑器中右键点击映射空白处,选择Custom XSLT Path,指定自定义XSLT文件的路径
- 在XSLT中用
<xsl:if>标签包裹所有字段映射逻辑,示例代码如下:
<xsl:template match="/"> <TargetSchemaRoot> <!-- 仅当NewProviderInd为Yes时执行映射 --> <xsl:if test="SourceSchemaRoot/NewProviderInd = 'Yes'"> <TargetField1><xsl:value-of select="SourceSchemaRoot/SourceField1"/></TargetField1> <TargetField2><xsl:value-of select="SourceSchemaRoot/SourceField2"/></TargetField2> <!-- 依次添加剩余38个字段的映射 --> </xsl:if> </TargetSchemaRoot> </xsl:template>
- 这种方式可以一次性控制所有字段的映射逻辑,避免逐个配置functoid的繁琐操作
注意事项
- 区分Value Mapping和Value Mapping (Flattening):前者在条件不满足时会生成空的目标节点,后者则完全不生成节点,根据你的需求选择后者更合适
内容的提问来源于stack exchange,提问作者temp-user
相关产品推荐
相关产品推荐

