Пользовательский компонент конвейера BizTalk - считывание значения узла JSON и продвижение свойств

В моем порту приема BizTalk я получаю JSON от веб-службы. Я хочу прочитать конкретное значение узла JSON (значение, разделенное запятыми) в настраиваемом компоненте конвейера и продвигать свойство для сообщения, если значение узла имеет ожидаемое значение. Например :

Узел Json в сообщении

"Dept": "support, Development,Test"

Итак, я хочу прочитать узел JSON Dept, и если он имеет значение Development, мне нужно продвинуть свойство для сообщения, например, devDept is true, иначе false. У меня есть идея, как это можно сделать с помощью оркестровки. Но я хочу сделать это в пользовательском компоненте конвейера. Может ли кто-нибудь поделиться идеей или помочь в этом?


person Navaneet    schedule 17.12.2019    source источник
comment
Привет, Наваниет. Помог ли вам какой-либо из приведенных ниже ответов? Удалось ли решить проблему?   -  person Dijkgraaf    schedule 20.01.2020


Ответы (3)


Для этого есть несколько подходов:

  1. Вы можете использовать библиотеку JSON Newtonsoft для чтения JSON и последующего продвижения ресурса . Вы можете добавить это в свой проект с помощью пакетов Nuget. Затем вам нужно будет развернуть сборку в папке пакетов в GAC.
  2. Кроме того, вы также можете использовать BizTalk JSON Компонент конвейера decoder для преобразования JSON в XML и последующего использования конвейера XmlReceive для продвижения свойств без использования оркестровки.

Оба подхода подходят, зависит от другой обработки, которую вы выполняете с JSON. Разумный подход к развертыванию 2 лучше, поскольку вам не нужно развертывать библиотеку Newtonsoft Json в GAC

person Vikas Bhardwaj    schedule 17.12.2019
comment
Проблема не в декодировании JSON, а в продвижении свойства на основе значения, разделенного запятыми. - person Dijkgraaf; 18.12.2019
comment
Извините, я пропустил эту часть. В этом случае подход 1 будет работать нормально. - person Vikas Bhardwaj; 18.12.2019

Как сказал Викас, сначала вы захотите использовать декодер JSON.

Чтобы действительно продвигать свойство в зависимости от того, что находится в списке значений, разделенных запятыми, я бы использовал BRE Pipeline Framework, это позволяет вам выполнять бизнес-правила в политиках в конвейере, вместо того, чтобы выполнять их в оркестровке. У вас будет просто правило, которое будет смотреть на этот элемент и, если он содержит разработку, создать продвигаемое свойство.

person Dijkgraaf    schedule 17.12.2019

См. Примеры SDK, как реализовать настраиваемый компонент конвейера для продвижения значения выражения XPath под заданным именем:

"c:\Program Files (x86)\Microsoft BizTalk Server 2013 R2\SDK\Samples\Pipelines\ArbitraryXPathPropertyHandler" 

Используя этот компонент, вы можете оценивать и продвигать к указанному имени свойства любые выражения, например

//*[local-name()='Dept' and contains(text(), 'Development')]
person amarax    schedule 18.12.2019