Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Область применения: Azure Logic Apps (стандартная версия)
В этом руководстве описаны расширенные операции, которые можно выполнять с помощью наборов правил Майкрософт с помощью Microsoft Rules Composer.
Вы узнаете, как:
- Копирование и создание версий набора правил.
- Передайте типы фактов в набор правил.
- Настройте извлекатель фактов.
- Вызов дочернего набора правил из родительского набора правил.
- Анализ нескольких объектов, использующих один и тот же тип в правиле.
Основные задачи набора правил и создания правил см. в разделе "Создание правил" с помощью Microsoft Rules Composer.
Предварительные требования
Скачайте и установите Microsoft Rules Composer.
XML-файл, содержащий набор правил, над которым вы хотите работать.
Копирование версии набора правил
Вы можете создать копию существующей версии набора правил, но с другим номером версии.
Откройте Microsoft Rules Composer. В окне Проводник набора правил откройте контекстное меню версии набора правил и выберите "Копировать".
Откройте контекстное меню набора правил и выберите Вставить версию RuleSet.
Microsoft Rules Composer создает новую версию набора правил с теми же элементами, что и скопированная версия, но с другим номером.
Примечание.
Если вы обновляете сборку .NET, используемую для предоставления фактов в вашем наборе правил, убедитесь, что ссылки версий набора правил на эту сборку также обновлены. Для получения дополнительной информации см. Обновление ссылок на сборки .NET.
Создание пустой версии набора правил
После добавления правил в версию набора правил можно создать новую пустую версию набора правил с другим номером и сохранить эту версию для последующей работы.
Откройте Microsoft Rules Composer. В контекстном меню набора правил выберите "Добавить новую версию".
Microsoft Rules Composer создает новую пустую версию набора правил с другим номером.
Откройте контекстное меню новой версии набора правил и нажмите кнопку "Сохранить".
Теперь вы можете скопировать правила из других версий набора правил и вставить их в новую версию.
Передача типов фактов в набор правил
Хотя вы не можете напрямую указать тип возвращаемого значения для набора правил, вы можете передать один из следующих типов фактов в набор правил, изменить значение факта true на или false, а затем проверить значение свойства или столбца после выполнения набора правил:
- Объект .NET, имеющий свойство с типом
Boolean - XML-документ с элементом с
Booleanтипом
Настройка извлекателя фактов для набора правил
При использовании средства извлечения фактов с набором правил, факты, которые не часто изменяются, можно сохранять заранее, чтобы это происходило до первого цикла выполнения вашего host-приложения. Таким образом, вы можете получить эти факты из хранилища, представить их один раз в обработчик правил для кэширования и повторно использовать их в течение нескольких циклов выполнения. Более подробную информацию см. в разделе Создание и использование механизмов создания и извлечения фактов.
Существует два способа связывания извлекателя фактов с набором правил:
Вручную выберите извлекатель фактов для версии набора правил в Microsoft Rules Composer.
Программно используя объект
RuleSetExecutionConfiguration.
Примечание.
С версией набора правил можно связать только одну реализацию извлекателя фактов.
Вручную выберите извлекатель фактов для набора правил
Откройте Microsoft Rules Composer. В обозревателе RuleSet выберите версию набора правил, которую необходимо связать с извлекателя фактов.
В окне "Свойства" выберите строку свойства FactRetriever, а затем нажмите кнопку с многоточием (...), чтобы найти и выбрать существующий объект извлекателя фактов.
Примечание.
Кнопка с многоточием (...) не отображается, пока не выберите строку FactRetriever в окне свойств.
Вызов дочернего набора правил из родительского набора правил
Для этой задачи используйте один из следующих методов:
Ruleset.ExecuteВызовите метод непосредственно из родительского набора правил.Из родительского набора правил вызовите метод вспомогательного компонента .NET, который упаковывает
Ruleset.Executeметод.С помощью второго метода можно добавить код предварительной обработки и последующей обработки в
Ruleset.Executeметод. Например, в этом методе-оболочке можно создать любые необходимые факты из дочернего набора правил. В следующих разделах приведен пример для каждого метода.
Вызов метода Ruleset.Execute непосредственно из родительского набора правил
В этом разделе приведены высокоуровневые шаги по вызову дочернего набора правил непосредственно из родительского набора правил Ruleset.Execute с помощью метода. В следующей процедуре показано, как добавить Ruleset.Execute метод в качестве действия в родительский набор правил, который передает XML-документ в качестве факта дочернему набору правил.
Примечание.
В этом примере XML-документ передаётся как факт в родительские правила. Этот документ передается как факт дочернему набору правил. Однако вы можете вместо этого вызвать метод .NET, который создает факты для дочерней системы правил.
Откройте microsoft Rules Composer. В окне обозревателя фактов выберите вкладку .NET классы.
Откройте контекстное меню для сборок .NET и выберите Обзор.
В списке .NET сборок выберите Microsoft.RuleEngine, а затем выберите OK.
Разверните Ruleset и перетащите Execute(Object facts) или Execute(Object facts, IRuleSetTrackingInterceptor trackingInterceptor) в панель THEN.
Выберите узел XML-схем, откройте контекстное меню для схем и нажмите кнопку "Обзор".
Выберите схему XML-документа, который вы хотите передать как факт, и нажмите кнопку "Открыть".
Чтобы передать XML-документ, передаваемый родительскому набору правил в качестве факта дочернему набору правил, перетащите <schema-name>.xsd в первый аргумент в методе Ruleset.Execute.
Если вы используете метод Execute , который не принимает IRuleSetTrackingInterceptor в качестве второго аргумента, пропустите следующие действия.
Перейдите на вкладку классов .NET и перетащите DebugTrackingInterceptor в Microsoft.RuleEngine во второй аргумент метода Ruleset.Execute.
Примечание.
При выполнении этого действия клиент должен передать экземпляр класса DebugTrackingInterceptor в качестве факта родительскому набору правил, который затем передает экземпляр в качестве факта дочернему набору правил. Вместо этого можно перетащить конструктор класса DebugTrackingInterceptor, чтобы экземпляр был автоматически создан.
Изменение клиентского приложения, вызывающего родительский набор правил
Клиент, вызывающий родительский набор правил, создает экземпляр класса Ruleset с именем дочернего набора правил в качестве параметра и передает этот экземпляр в качестве факта родительскому набору правил вместе с другими фактами. Следующий пример кода иллюстрирует это действие:
DebugTrackingInterceptor dti = new DebugTrackingInterceptor("RulesetTracking.txt");
Ruleset Ruleset = new Ruleset("ParentRuleset");
object[] facts = new object[3];
facts[0] = txd;
facts[1] = new Ruleset("ChildRuleset");
facts[2] = new DebugTrackingInterceptor("RulesetTracking2.txt");
Ruleset.Execute(facts, dti);
Ruleset.Dispose();
Если клиент является оркестрацией BizTalk, может потребоваться поместить код в фигуру выражения для создания фактов, а затем передать факты в качестве параметров в фигуру правил вызова.
Вызов метода оболочки .NET из родительского набора правил
В этом разделе представлены высокоуровневые шаги для вызова метода .NET, который упаковывает вызов метода Ruleset.Execute из родительского набора правил.
Создайте класс .NET утилиты
Создайте проект библиотеки классов .NET. Добавьте в проект класс.
Добавьте статический метод, который вызывает метод
Ruleset.Execute, чтобы вызвать набор правил, имя которого передается в качестве параметра, например, как показано в примере кода ниже:public static void Execute(string RulesetName, TypedXmlDocument txd) { DebugTrackingInterceptor dti = new DebugTrackingInterceptor("RulesetTracking.txt"); Ruleset Ruleset = new Ruleset("ParentRuleset"); object[] facts = new object[3]; facts[0] = txd; facts[1] = new Ruleset("ChildRuleset"); facts[2] = new DebugTrackingInterceptor("RulesetTracking2.txt"); Ruleset.Execute(facts, dti); Ruleset.Dispose(); }Клиент вызывает родительский набор правил, а родительский набор правил вызывает вспомогательный метод, который вызывает дочерний набор правил, например, как показано в следующем примере кода для клиента:
facts[0] = txd; facts[1] = new RulesetExecutor(txd); // Call the first or parent ruleset. Ruleset Ruleset = new Ruleset(RulesetName); DebugTrackingInterceptor dti = new DebugTrackingInterceptor("RulesetTracking.txt"); Ruleset.Execute(facts, dti); Ruleset.Dispose();Примечание.
Если метод является методом экземпляра, клиент должен создать экземпляр вспомогательного класса .NET и передать этот экземпляр в качестве факта родительскому набору правил.
Анализ нескольких объектов с одинаковым типом в правиле
Во многих сценариях вы создаете бизнес-правило для типа и ожидаете, что подсистема будет отдельно анализировать и действовать на каждом экземпляре типа, который утверждается в подсистеме. Однако в некоторых сценариях обработчик должен одновременно анализировать несколько экземпляров с одинаковым типом. Например, в следующем примере правила используется несколько экземпляров класса FamilyMember :
IF FamilyMember.Role == Father
AND FamilyMember.Role == Son
AND FamilyMember.Surname == FamilyMember.Surname
THEN FamilyMember.AddChild(FamilyMember)
Правило определяет несколько экземпляров FamilyMember, где один является отцом, а другой — сыном. Если экземпляры связаны по фамилии, правило добавляет экземпляр Сын в коллекцию детей в экземпляре Отец. Если подсистема отдельно анализирует каждый экземпляр FamilyMember, правило никогда не запускается, так как в этом сценарии FamilyMember имеет только одну роль, либо отец или сын.
Таким образом, в этом сценарии необходимо указать, что движок анализирует несколько экземпляров вместе в правиле, и вам нужен способ отличить идентификатор каждого экземпляра в правиле. Для предоставления этой функции можно использовать поле идентификатора экземпляра. Это поле доступно в окне "Свойства" при выборе факта в обозревателе фактов.
Внимание
Если вы решили использовать идентификатор экземпляра, не забудьте изменить его значение до того, как перетащите факт или член в правило.
При использовании поля идентификатора экземпляра правило перестраивается. Для этих аргументов правила, использующих экземпляр Son класса FamilyMember, измените значение идентификатора экземпляра с значения по умолчанию от 0 до 1. При изменении значения идентификатора экземпляра с 0 и перетаскивании факта или члена в редактор правил, значение идентификатора экземпляра отображается в правиле после класса, например:
IF FamilyMember.Role == Father
AND FamilyMember(1).Role== Son
AND FamilyMember.Surname == FamilyMember(1).Surname
THEN FamilyMember.AddChild(FamilyMember(1))
Теперь предположим, что экземпляр "Отец" и экземпляр "Сын" вносятся в механизм. Модуль вычисляет правило по различным сочетаниям этих экземпляров. Предположим, что экземпляры Отец и Сын имеют ту же фамилию, экземпляр Сын добавляется к экземпляру Отца, как и ожидалось.
Примечание.
Поле идентификатора экземпляра используется только в контексте конкретной оценки правила. Это поле не привязано к экземпляру объекта при выполнении набора правил и не связано с порядком, используемым для утверждения объектов. Каждый экземпляр объекта оценивается во всех аргументах правила, относящихся к этому типу.