逻辑存在不起作用 - BizTalk Mapper

时间:2016-02-12 15:22:15

标签: biztalk biztalk-mapper

这个问题让我感到困惑了一段时间。我有一个带有段和标签标识符的平面文件。其中一个段是可选的。这没关系,但我需要逻辑来确定这个细分是否存在。如果它不存在我需要做别的事情。如果细分受众群存在,则所有工作都按计如果没有,则看起来BizTalk甚至不识别或执行与该段相关的任何functoid。

这是平面文件段: flat file segment map snap 这是我的逻辑存在连接到逻辑NOT:

同样,如果段完全消失(意味着没有创建/翻译平面文件xml节点),则逻辑存在甚至不执行。我试过脚本,functoids。我开始相信这是映射器中的一个错误。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:1)

尝试使用Value Mapping functoid而不是Value Mapping (Flattening) functoid。

还要确保Value Mapping functoid的参数的顺序正确。逻辑运算符必须是第一个参数。有时参数会出现故障,并且functoid会按预期停止工作。

答案 1 :(得分:1)

由于您的输入文件是平面文件,因此FFDASM正在创建一个空节点。 Logical Existence运行的测试在空节点上的计算结果为true。 Logical String应该在这里工作(我以前认为它会为空字符串返回true但不应该这样。)

但是,在这种情况下,我可能会用C#脚本functoid替换所有这些(包括值映射器):

public string AllowIfNotEmpty(string test, string output)
{
    if (!string.IsNullOrWhiteSpace(test))
        return output;
    return "";
}

首先输入当前链接到Logical String的节点,输入Value Mapping(flattening)秒的第二个输入,然后直接输出到目标节点。

如果你在多个地方使用它,你可以将它放入帮助程序集中。

如果您想将其保留为XSLT,则可以执行自定义调用模板:

<xsl:template name="OutputIfNotEmpty">
    <xsl:param name="test" />
    <xsl:param name="output" />
    <xsl:if test="normalize-space($test) != ''">
        <xsl:element name="OutputElementName">
            <xsl:value-of select="$output" />
        </xsl:element>
    </xsl:if>        
</xsl:template>