2

这个问题让我困惑了一段时间。我有一个带有段和标签标识符的平面文件。其中一个段是可选的。这很好,但我需要逻辑来确定这个段是否存在。如果它不存在,我需要做其他事情。如果该段存在,则所有工作都按计划进行。如果没有,BizTalk 似乎甚至无法识别或执行与该段相关的任何 functoid。

这是平面文件段: 这是连接到逻辑非的我的逻辑存在:平面文件段 地图快照

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

4

2 回答 2

1

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

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

于 2016-02-12T16:13:19.503 回答
1

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

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

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>
于 2016-02-13T02:19:29.510 回答