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

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

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

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

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

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

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

I 'мы попробовали

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

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

и более просто

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

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

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

1 Ответ

3 голосов
/ 25 июня 2010

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

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

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

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

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

...