Функция подсчета записей возвращает совокупный подсчет для неуплощенного целевого сообщения

#biztalk #biztalk-2009

#biztalk #biztalk-2009

Вопрос:

Я попытался использовать функцию подсчета записей для сопоставления количества вложенных записей записи, которая сама встречается от 0 до неограниченного, с сообщением, при этом каждая запись содержит поле, содержащее количество вложенных записей:

 root                             root
    |                           |
     foo                     foo 
        |                   |
         bar  -RecordCount- barcount
            |
             xyz
  

Однако моя текущая карта объединяет количество всех bar записей и возвращает его в каждом foobarcount .

Пример исходного сообщения

 <root>
    <foo>
        <Id>1</Id>
        <bar>
            <xyz />
        </bar>
        <bar>
            <xyz />
        </bar>
    </foo>
    <foo>
        <Id>2</Id>
        <bar>
            <xyz />
        </bar>
        <bar>
            <xyz />
        </bar>
    </foo>
</root>
  

… и результат

 <root>
    <foo>
        <Id>1</Id>
        <barcount>4</barcount>
    </foo>
    <foo>
        <Id>2</Id>
        <barcount>4</barcount>
    </foo>
</root>
  

… в то время как я ожидал

 <root>
    <foo>
        <Id>1</Id>
        <barcount>2</barcount>
    </foo>
    <foo>
        <Id>2</Id>
        <barcount>2</barcount>
    </foo>
</root>
  

Ответ №1:

Я решил эту проблему, заменив функцию подсчета записей на функцию сценария шаблона Call XSLT.

Шаблон XSLT выглядит следующим образом:

 <xsl:template name="CountMyBar">
    <xsl:param name="fooId" />
    <xsl:element name="barcount">
        <xsl:value-of select="count(//foo[Id=$fooId]/bar)" />
    </xsl:element>
</xsl:template>
  

а входным значением для функции скриптинга является Id поле from foo .