Поделиться через


Добавление арифметических и логических операторов в правила с помощью Microsoft Rules Composer

Область применения: Azure Logic Apps (стандартная версия)

В этом руководстве описывается добавление арифметических и логических операторов в правила в наборе правил с помощью Microsoft Rules Composer.

Необходимые компоненты

  • Скачайте и установите Microsoft Rules Composer.

  • XML-файл, содержащий набор правил, над которым вы хотите работать.

Добавление арифметического оператора в правило

Оператор арифметики можно добавить в условие или действие в правиле. В следующей таблице описаны доступные арифметические операторы:

Арифметический оператор Описание
Прибавить Оператор добавления, добавляющий arg1 в arg2.
Вычитание Оператор вычитания , вычитающий arg1 из arg2.
Умножение Оператор умножения, умножающий arg1 на arg2.
Делить Оператор деления, разделяющий arg1 на arg2.
Остаток Оставшийся оператор, выполняющий arg1 modulo arg2.
  1. В редакторе правил Майкрософт загрузите XML-файл, содержащий хранилище правил, над которым вы хотите работать.

  2. В окне обозревателя правил найдите и выберите нужное правило.

  3. В окне обозревателя фактов выберите вкладку "Словарь".

  4. В разделе "Функции>>" версии 1.0 перетащите арифметический оператор, который требуется аргументировать в условии в редакторе условий или действии в редакторе действий.

  5. В аргументах условия или действия укажите значения для левых и правых операндов.

    • Если операнды имеют разные типы, подсистема правил выполняет автоматическое числовое повышение, где модуль преобразует меньший тип операнда в более крупный тип операнда.

      Например, предположим, что вы используете оператор Add в операнде с типом int и операндом с длинным типом. Перед выполнением операции добавления подсистема преобразует тип int в длинный тип.

    • Если двигатель может повысить операнды до общего типа, двигатель поддерживает двойное повышение.

      Например, предположим, что вы используете оператор Add для операнда с типом int и операндом, который имеет тип uint. Перед выполнением операции добавления подсистема преобразует оба типа операндов в длинный тип.

Добавление логического оператора в правило

Логический оператор можно добавить в предикат в условии. В следующей таблице описаны доступные логические операторы:

Логический оператор Описание
И Объединение двух или нескольких предикатов для формирования логического выражения AND . Возвращает значение true , если оба предикаты оцениваются как true. В противном случае возвращает значение false.
ИЛИ Объединение двух или нескольких предикатов для формирования логического или выражения. Возвращает значение true , если один предикат оценивается как true. В противном случае возвращает значение false.
Логическое НЕ Нейтируйте логическое выражение или предикат. Возвращает значение true , если предикат оценивается как false. В противном случае возвращает значение false.
  1. В редакторе правил Майкрософт загрузите XML-файл, содержащий хранилище правил, над которым вы хотите работать.

  2. В окне обозревателя правил найдите и выберите нужное правило.

  3. В области IF, которая является редактором условий, в контекстном меню "Условия" выберите одну из следующих команд:

    Логический оператор Описание
    Добавление логического И Объединение двух или нескольких предикатов для формирования логического выражения AND .
    Добавление логического ИЛИ Объединение двух или нескольких предикатов для формирования логического или выражения.
    Добавление логического NOT Нейтируйте логическое выражение или предикат.
  4. В редакторе условий откройте контекстное меню оператора и добавьте необходимые предикаты или вложенные логические операторы.

    Если операнды имеют разные типы, обработчик правил преобразует тип для одного операнда в соответствии с типом другого операнда или преобразует типы обоих операндов в общий тип перед оценкой выражения.

Обработка значений NULL

В следующем разделе описано ожидаемое поведение значений NULL, связанных с разными типами, и предоставляет параметры проверки null или существования определенного поля или члена.

Классы .NET

  • Для типов, производных от типа объекта , можно задать для полей значение NULL.

  • Вы можете передать значение NULL в качестве аргумента для параметров, которые не являются типами значений, но вы можете получить ошибку среды выполнения на основе реализации члена.

  • Нельзя использовать значение NULL для сравнения, если возвращаемый тип не является типом объекта .

XML-элементы

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

  • Microsoft Rules Composer не позволяет задать для поля значение NULL или задать для типа поля объект.

  • С помощью объектной модели можно задать тип object. В этом случае возвращаемое значение имеет тип, к которому вычисляется XPath, например Float, Boolean или String, на основе выражения XPath.

Проверка наличия значений NULL или существования

При написании правил вы, естественно, хотите проверить, существует ли поле перед сравнением его значения. Однако если поле равно null или не существует, сравнение значения приводит к ошибке.

Например, предположим, что у вас есть следующее правило:

IF Product/Quantity Exists AND Product/Quantity > 1

Если продукт или количество не существует, правило выдает ошибку. Чтобы обойти эту проблему, можно передать родительский узел в вспомогательный метод, возвращающий значение Product/Quantity , если этот элемент существует, или вернуть что-то другое, если этот элемент не существует.

В следующем примере показано обновленное и новое вспомогательное правило метода:

Правило 1

IF Exists(Product/Quantity) THEN Assert(CreateObject(typeof(Helper), Product/Quantity))

Правило 2

IF Helper.Value == X THEN...

В качестве другого возможного решения можно создать правило, например следующий пример:

IF Product/Quantity Exists THEN CheckQuantityAndDoSomething(Product/Quantity)

В предыдущем примере <CheckQuantityAndDoSomething> функция проверяет значение параметра и выполняет выполнение, если условие выполнено.

Чтобы определить, имеет ли существующий аргумент null, используйте композитор:

argument is equal to <null>

Примечание.

Кроме того, можно изменить свойство XPath Field для XML-факта, чтобы перехватывать ошибки, но этот подход не рекомендуется.