2016-11-02 4 views
1

Как создать сопоставление, когда на входе у нас будет две схемы и на выходе будет одна схема и какое-то условие для отображения?Biztalk две схемы и функционал петли с условием

Ввод представляет собой встроенную схему и содержит схему счетов-фактур и клиентов. Оба они имеют номер CustomerNumber и DepartmentCode существуют только в схеме Invoices.

[СОСТОЯНИЕ]

Мэпп только этот DepartmentCode если CUSTOMERNUMBER такой же как на счете-фактуре и данных клиентов (линия).

If Invoice.CustomerNumber == Customer.CustomerNumber then map Invoice.DepartmentCode. 

Я пытался использовать loop, равное и значение отображения functoid, но без ожидаемых результатов, второй думаю, что я пытался использовать «Инлайн шаблон XSLT вызова», но я получил сообщение об ошибке на обработку.

[Код XSLT-functoid]

<xsl:template name="GetDepartmenCodeByCustomerNumber"> 
    <xsl:param name="CustomerNumber" /> 
    <xsl:if test="$CustomerNumber != ''"> 
     <xsl:element name="DepartmentCode"> 
      <xsl:value-of select="//s1:Customer[s1:CustomerNumber=$CustomerNumber]/s1:DepartmentCode/text()" /> 
     </xsl:element> 
    </xsl:if> 
</xsl:template> 

Пример:

Входной

<ROOT> 
<Invoices> 
    <Invoice> 
    <CustomerNumber>123</CustomerNumber> 
    <DepartmentCode>321</DepartmentCode> 
    </Invoice> 
</Invoices> 
<Customers> 
    <Customer> 
    <CustomerNumber>123</CustomerNumber> 
    </Customer> 
    <Customer> 
    <CustomerNumber>222</CustomerNumber> 
    </Customer> 
</Customers> 
</ROOT> 

Ожидать

<Document> 
<CustomerNumber>123</CustomerNumber> 
<DepartmentCode>321</DepartmentCode> 
</Document> 

Например, мне нужно равное CustomerNumber из сегмента Invoice и Customer.

ответ

1

Вам нужно сделать «двойной» цикл, потому что, я думаю, у вас есть несколько счетов-фактур и клиентов. XSLT является хорошим решением, но если вам нужно только эти два поля, которые вы можете использовать карту, как это:

enter image description here

Петля накладная на Table Looping добавлении двух своих детей и Cumulative Concatenate всей CNumb (добавление специального символа для последующего поиска, например @ CNumb @). Используйте Table Extractors, чтобы получить все значения и проверить, находится ли каждая CNumb от Invoices в конкатенации или нет, отправив результат сравнения элементу цикла в целевой схеме.

+0

Проверьте параметры (ввод/вывод) для этих функтоидов. [Concatenate] (http://imgur.com/1qVM3MD), [Кумулятивный] (http://imgur.com/3NoxIAc). Для этого [TLoop] (http://imgur.com/MUUQ1dP) эти параметры правильные? и во-вторых, мне не нужно создавать таблицы на нем? Я думаю, мне нужно добавить «0» во второй параметр для [Большого] (http://imgur.com/ypHxweb), я прав? [TExtractor] (http://imgur.com/8LD1JXL) зависит от функции loop loop, что мне нужно для решения проблемы с предупреждениями (для всего этого типа)? – Nerus

+1

В TLoop вам нужно использовать в качестве второго параметра количество столбцов, которые вы хотите, поэтому добавьте «3» в качестве второго параметра. Как только это будет сделано, вы можете настроить столбцы в таблице Looping Grid. В Greater yes, вам нужно добавить «0» для сравнения.В TExtractors вам нужно добавить в качестве вторых параметров номер столбца. У вас есть 3 столбца в таблице, поэтому используйте «1», «, 2» и «3» для них согласно столбцу, который вы получаете. –

+0

Отлично работает, THX !!! – Nerus