BizTalk Business Rule для проверки списка значений, содержащихся в.csv, xml и т. Д.

Я новичок в BRE и довольно новичок в BizTalk в целом, так что это может быть довольно просто и просто уклоняется от меня...

Я хотел бы сделать следующее: создать бизнес-правило в BRE, которое принимает в качестве входных данных входящее сообщение и проверяет, соответствует ли значение, содержащееся в сообщении, любому из значений в указанном наборе значений. Пример сообщения выглядит следующим образом. <isFound> поле будет обновлено соответствующим образом.

<n1:DocumentTemplate xmlns:n1="mynamespace">
    <rootOid>2.16.840.1.113883.3.51.60.2.5</rootOid>
    <isFound>false</isFound>
</n1:DocumentTemplate>

В основном я хотел бы соответствовать <rootOid> узел против списка значений. Я уже создал бизнес, который будет соответствовать <rootOid> против жестко закодированного значения в Условиях бизнес-правила... просто в качестве доказательства концепции для изучения основ использования BRE и вызова правила в оркестровке.

Я не могу найти способ сопоставления со списком значений, кроме как сделать огромный список жестко закодированных операций в "Условиях" бизнес-правила. Список принятых значений достаточно велик, поэтому выполнение нескольких операций OR не сработает.

В идеале, я хотел бы иметь поддерживаемый файл XML, полный приемлемых <rootOid> значения для проверки из бизнес-правила.

Я также понимаю, что есть способ вызвать базу данных и прочитать значения из таблицы / столбца для сопоставления, но я бы предпочел не включать SQL в уравнение, чтобы это могло быть немного более автономным.

1 ответ

Решение

Достаточно одного "равного" выражения. Ваш факт RHS должен быть еще одним словарным пунктом. В случае типа XML правильный путь будет извлекать все значения одно за другим и вызывать множественные оценки и, соответственно, запускать действие при совпадении. Ключ к запоминанию: BRE - это механизм сопоставления с образцом.

Словарь - просто удобный псевдоним для определения факта. Допустим, вы создали файл XML со следующей структурой:

<options>
  <value>A</value>
  <value>B</value>
  <value>C</value>
</options>

Определите словарь для этого факта как Имя: Возможные значения Селектор XPath: /options/value Поле XPath: .

Тогда определение правила как IF currentValue == возможное значение вызовет три оценки состояния, поскольку RHS выдаст три факта в рабочую память. Следовательно, только те, которые были истинными, будут применять правило (действие). Сравните это с определением по умолчанию, которое BRE создает, когда вы выбираете узел из схемы XML, который будет утверждать только один (первый) факт:

Селектор XPath: / options / Поле XPath: значение

(пространства имен опущены для краткости)

Во время выполнения передайте этот документ XML в качестве аргумента BRE (будь то в оркестровке или в компоненте.Net в зависимости от контекста вызова BRE). Во время разработки для тестирования вы должны реализовать компонент Fact Creator (реализует IFactCreator), чтобы предоставить экземпляр обязательных аргументов.

Долгосрочные факты (например, вопрос в вопросе) лучше обрабатываются с помощью пользовательских средств поиска фактов. Средство извлечения фактов - это.Net-компонент, который реализует IFactRetriever. Смотрите документацию для деталей. Реализация извлечения фактов изнутри загружает XML (с диска) и записывает его в рабочую память как TypedXmlDocument.

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