这个问题让我感到困惑了一段时间。我有一个带有段和标签标识符的平面文件。其中一个段是可选的。这没关系,但我需要逻辑来确定这个细分是否存在。如果它不存在我需要做别的事情。如果细分受众群存在,则所有工作都按计如果没有,则看起来BizTalk甚至不识别或执行与该段相关的任何functoid。
同样,如果段完全消失(意味着没有创建/翻译平面文件xml节点),则逻辑存在甚至不执行。我试过脚本,functoids。我开始相信这是映射器中的一个错误。任何帮助表示赞赏。
答案 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>