BizTalk BAM - вручную редактировать BTT XPath, чтобы он возвращал только первый экземпляр свойства Message Payload?

У нас есть предпочтение использовать TPE для отслеживания BAM, поскольку оно может быть развернуто независимо от наших оркестровок.

Однако в какой-то момент нашего процесса нам необходимо отслеживать свойство полезной нагрузки сообщения, которое имеет отношение 1:N с корневым XML-элементом сообщения.

Несмотря на соотношение 1:N, извлечения только первого значения этого свойства будет достаточно для наших потребностей в отслеживании.

Как обычно, если мы пытаемся отследить это, в журнале регистрируется следующее сообщение XLANG:

AmbiguousXPathException - The result set for the XPath expression ... 
contains more than a single node

Мы попытались изменить BTT XPath напрямую, чтобы выбрать только первый экземпляр этого свойства

я пробовал

'XPath="//*[local-name()='Property' and namespace-uri()='{URI}' ...]/[1]'

но затем получаю ошибку "Выражение должно вычисляться для набора узлов"

и проще

'//Property[1]' and '//Property[position() = 1]'

Не давайте никаких ошибок, но это тоже не вытаскивает мою собственность.

Наконец, кто-нибудь может объяснить разницу между XPath и SomXPath в файле BTT?

1 ответ

Решение

Это похоже на съемку в темноте без какого-либо XML-документа, но вы можете попробовать это:

(//*[local-name()='Property' and namespace-uri()='{URI}' ...])[1]

Это часто задаваемые вопросы, которые //x[1] не выбирает один узел, в то время как (//x)[1] делает.

Первое означает: каждый элемент с именем xэто первый ребенок его родителя.

Второе означает: первый элемент x в документе.

Другие вопросы по тегам