簡體   English   中英

Biztalk 將三個父節點映射到單個非重復節點

[英]Biztalk Map three parent nodes to single none repeating node

我有一個輸入模式(input_schema),如下所示:

    ...
<ContactNo>
    <Contact_1>
        <Contact-Type>MOBILE|HOME|WORK</Contact-Type>
        <Contact-SubType>UK|OVERSEAS</Contact-SubType>
        <Contact-CountyCode>44</Contact-CountyCode>
        <Contact-No>01443788800</Contact-No>
        <Contact-Ex>85000</Contact-Ex>
    </Contact_1>
    <Contact_2>
        <Contact-Type>MOBILE|HOME|WORK</Contact-Type>
        <Contact-SubType>UK|OVERSEAS</Contact-SubType>
        <Contact-CountyCode>44</Contact-CountyCode>
        <Contact-No>01443788800</Contact-No>
        <Contact-Ex>85000</Contact-Ex>
    </Contact_2>
    <Contact_3>
        <Contact-Type>MOBILE|HOME|WORK</Contact-Type>
        <Contact-SubType>UK|OVERSEAS</Contact-SubType>
        <Contact-CountyCode>44</Contact-CountyCode>
        <Contact-No>01443788800</Contact-No>
        <Contact-Ex>85000</Contact-Ex>
    </Contact_3>
    ...
</ContactNo>
...

ContactNo 的每個子節點只能出現一次(一個 Contact_1、一個 Contact_2 和一個 Contact_3)。 我需要為 Contact-Type、SubType 應用一些業務邏輯來構造 Contact-No,但我的問題是如何最好地將此結構映射到相關的輸出模式節點(這些節點最多出現 20 個)但只能基於下面的 input_schema 架構結構最多有三個:

...
<HomeTelephone>
<WorkTelephone>
<MobileTelephone>
...

樣本輸入/輸出

...
<ContactNo>
    <Contact_1>
        <Contact-Type>HOME</Contact-Type>
        <Contact-SubType>UK</Contact-SubType>
        <Contact-CountyCode />
        <Contact-No>01443788800</Contact-No>
        <Contact-Ex/>
    </Contact_1>
    <Contact_2>
        <Contact-Type>WORK</Contact-Type>
        <Contact-SubType />
        <Contact-CountyCode />
        <Contact-No>01743788800</Contact-No>
        <Contact-Ex>86000</Contact-Ex>
    </Contact_2>
    <Contact_3>
        <Contact-Type>WORK</Contact-Type>
        <Contact-SubType>UK</Contact-SubType>
        <Contact-CountyCode />
        <Contact-No>01443788800</Contact-No>
        <Contact-Ex>85000</Contact-Ex>
    </Contact_3>
    ...
</ContactNo>
...

...
<HomeTelephone>01443788800</HomeTelephone>
<WorkTelephone>0174378880086000</WorkTelephone>
<WorkTelephone>0144378880085000</WorkTelephone>
<MobileTelephone />
...

目前我正在檢查 Contact-Type (=Home) 然后通過值映射器將輸出映射到腳本 functoid 以在映射輸出之前進行數據確認。 這似乎導致重復節點。

您是否考慮過在映射中使用 XSLT? 不僅比 BizTalk 映射器更容易使用,而且更加靈活和廣泛使用(您可以在很多產品中本地使用 XSLT)。

適當的 XSLT 會產生如下結果:

<xsl:for-each select="ContactNo/*">
  <xsl:if test="position() &lt; 4">
    <xsl:choose>
      <xsl:when test="Contact-Type/text() = 'WORK'">
        <WorkTelephone>
          <xsl:value-of select="Contact-No/text()" />
        </WorkTelephone>
      </xsl:when>
      <xsl:when test="Contact-Type/text() = 'HOME'">
        <HomeTelephone>
          <xsl:value-of select="Contact-No/text()" />
        </HomeTelephone>
      </xsl:when>
      <xsl:when test="Contact-Type/text() = 'MOBILE'">
        <MobileTelephone>
          <xsl:value-of select="Contact-No/text()" />
        </MobileTelephone>
      </xsl:when>
    </xsl:choose>
  </xsl:if>
</xsl:for-each>

這應該遍歷前 3 個聯系人並相應地列出它們。

讓我知道這是否適合您的需求。

免責聲明:由於時間限制,尚未對此進行測試,請注意語法和輸入錯誤。 我也知道你在要求映射器,我只是確信映射器完全不如原生 xslt 方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM