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.