Condition

Для создания кастомных условий необходимо подключение штатных библиотек Conditions.dll и Common.dll.

Условия проверки одного значения

Описание условия

Самый простой вариант условия - условие для проверки скалярного значения:

<Condition Name="CustomCheckCondition" Type="CustomCheckCondition" Assembly="Template">
  <Items>
    <Item>Значение</Item>
  </Items>
</Condition>

В атрибуте Type указывается имя класса, описывающего кастомный Condition, а в качестве значения атрибута Assembly указывается имя сборки, в которой реализован этот класс.

Исходный код

Класс кастомного условия наследует класс CheckCondition:

using System.Xml;

namespace WorkflowForms.Conditions
{
    public class CustomCheckCondition : CheckCondition
    {
        public CustomCheckCondition(IWorkflowForm form, XmlNode node)
            : base(form, node)
        {
        }

        // Метод Check будет вызываться столько раз, какова длина массива в <Item>.
        // И будет проверяться только первый элемент каждой строки.
        protected override bool Check(object value)
        {
            // Для корректного получения значения из праметра value используется статический класс ValueConverter.
            // Класс описан в Common.dll и предоставляет широкий набор методов поддерживающих различные типы данных.
            var str = ValueConverter.GetStringValue(value);

            // Здесь необходимо реализовать логику проверки переданного значения

            return true;
        }
    }
}

Такие условия могут обрабатывать линейные массивы:

Также условия могут использовать вложенный тэг <Satisfy>.

Если в тэге <Item> передается массив, то метод Check будет вызываться для каждого элемента отдельно.

Условия проверки нескольких значений

Описание условия

Вариант условия для сравнения нескольких значений:

Исходный код

В этом случае наследуется класс ComparisonCondition:

Параметр values будет содержать массив значений, описанных в тэгах <Item>.

Если в тэгах <Item> передаются массивы, то метод CheckValue будет вызываться по количеству элементов в коротком массиве.

Дополнительные элементы

Описание условия

Кастомные условия могут иметь тэги для задания дополнительных данных, необходимых для проверки значений:

Исходный код

Для получения значения тэга <Something> используется механизм привязки данных. Такой подход позволяет получать актуальные данные в момент проверки условия, а не фиксировать значение при загрузки формы.

Исходный код класса:

Для получения привязки к источнику данных в тэге <Something> используем статический метод GetRequiredElementDataBinding().

Last updated