2016-02-12 96 views
2

這個問題讓我困惑了一會兒。我有一個帶段和標籤標識符的平面文件。其中一個細分是可選的。這很好,但我需要邏輯來確定這個段是否存在。如果它不存在,我需要做別的事情。如果細分市場存在,所有項目都按計劃運作如果沒有,看來BizTalk甚至不識別或執行與該段相關的任何functoid。邏輯存在不起作用 - BizTalk映射器

這裏是平面文件段: flat file segment map snap ,這裏是我的邏輯存在連接到一個邏輯非:

同樣,如果段完全消失(這意味着沒有平坦的文件中創建XML節點/翻譯),邏輯存在甚至不執行。我試過腳本,functoids。我開始相信這是一個映射器中的bug。任何幫助讚賞。

+1

是否已確認ScheduleDate確實沒有當它不應該存在嗎?而不是僅僅是空的或類似的。 –

回答

1

嘗試使用Value Mapping functoid而不是Value Mapping (Flattening) functoid。

還要確保值映射函數的參數的順序是正確的。邏輯運算符必須是第一個參數。有時候這些參數出現故障,functoid停止按預期工作。

1

由於您的輸入文件是一個平面文件,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> 
+1

其實邏輯字符串Functoid將爲空元素返回false – Dijkgraaf

+0

@Dijkgraaf謝謝 - 更新的答案反映。 –