這個問題讓我困惑了一會兒。我有一個帶段和標籤標識符的平面文件。其中一個細分是可選的。這很好,但我需要邏輯來確定這個段是否存在。如果它不存在,我需要做別的事情。如果細分市場存在,所有項目都按計劃運作如果沒有,看來BizTalk甚至不識別或執行與該段相關的任何functoid。邏輯存在不起作用 - BizTalk映射器
同樣,如果段完全消失(這意味着沒有平坦的文件中創建XML節點/翻譯),邏輯存在甚至不執行。我試過腳本,functoids。我開始相信這是一個映射器中的bug。任何幫助讚賞。
這個問題讓我困惑了一會兒。我有一個帶段和標籤標識符的平面文件。其中一個細分是可選的。這很好,但我需要邏輯來確定這個段是否存在。如果它不存在,我需要做別的事情。如果細分市場存在,所有項目都按計劃運作如果沒有,看來BizTalk甚至不識別或執行與該段相關的任何functoid。邏輯存在不起作用 - BizTalk映射器
同樣,如果段完全消失(這意味着沒有平坦的文件中創建XML節點/翻譯),邏輯存在甚至不執行。我試過腳本,functoids。我開始相信這是一個映射器中的bug。任何幫助讚賞。
嘗試使用Value Mapping
functoid而不是Value Mapping (Flattening)
functoid。
還要確保值映射函數的參數的順序是正確的。邏輯運算符必須是第一個參數。有時候這些參數出現故障,functoid停止按預期工作。
由於您的輸入文件是一個平面文件,FFDASM正在創建一個空節點。在Logical Existence
上運行的測試在空節點上評估爲真。 Logical String
應該在這裏工作(我以前認爲它會返回一個空字符串,但它不應該)。
然而,在這種情況下,我可能會用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>
其實邏輯字符串Functoid將爲空元素返回false – Dijkgraaf
@Dijkgraaf謝謝 - 更新的答案反映。 –
是否已確認ScheduleDate確實沒有當它不應該存在嗎?而不是僅僅是空的或類似的。 –