#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
.