В атрибуте Type указывается имя класса, описывающего кастомный Condition, а в качестве значения атрибута Assembly указывается имя сборки, в которой реализован этот класс.
Исходный код
Класс кастомного условия наследует класс CheckCondition:
usingSystem.Xml;namespaceWorkflowForms.Conditions{publicclassCustomCheckCondition:CheckCondition {publicCustomCheckCondition(IWorkflowForm form,XmlNode node): base(form, node) { } // Метод Check будет вызываться столько раз, какова длина массива в <Item>. // И будет проверяться только первый элемент каждой строки.protectedoverrideboolCheck(object value) { // Для корректного получения значения из праметра value используется статический класс ValueConverter. // Класс описан в Common.dll и предоставляет широкий набор методов поддерживающих различные типы данных.var str =ValueConverter.GetStringValue(value); // Здесь необходимо реализовать логику проверки переданного значенияreturntrue; } }}
Такие условия могут обрабатывать линейные массивы:
В этом случае наследуется класс ComparisonCondition:
usingSystem.Xml;namespaceWorkflowForms.Conditions{publicclassCustomComparisonCondition:ComparisonCondition {publicCustomComparisonCondition(IWorkflowForm form,XmlNode node): base(form, node) { }publicoverridevoidInternalInit(XmlNode node,IWorkflowForm form) { base.InternalInit(node, form); } // Метод CheckValue будет вызываться столько раз, какова длина массива в <Item>. // И будет проверяться только первый элемент каждой строки.protectedoverrideboolCheckValue(object[] values) {if (values.Length>1) { // Здесь необходимо реализовать логику проверки переданного значения }returnfalse; } }}
Параметр values будет содержать массив значений, описанных в тэгах <Item>.
Если в тэгах <Item> передаются массивы, то метод CheckValue будет вызываться по количеству элементов в коротком массиве.
Дополнительные элементы
Описание условия
Кастомные условия могут иметь тэги для задания дополнительных данных, необходимых для проверки значений:
Для получения значения тэга <Something> используется механизм привязки данных. Такой подход позволяет получать актуальные данные в момент проверки условия, а не фиксировать значение при загрузки формы.
Исходный код класса:
usingSystem.Xml;usingWorkflowForms.DataBindings;namespaceWorkflowForms.Conditions{publicclassCustomCheckCondition:CheckCondition {privateconststring SOMETHING_ELEMENT ="Something";privateIDataBinding somethingDataBinding;publicCustomCheckCondition(IWorkflowForm form,XmlNode node): base(form, node) {/* * Для получения значения тэга <Something> используем * механизм привязки данных */ somethingDataBinding =XmlParser.GetRequiredElementDataBinding(this, form, node,newDataBindingProvider(), SOMETHING_ELEMENT, Name,GetType()); } // Метод Check будет вызываться столько раз, какова длина массива в <Item>. // И будет проверяться только первый элемент каждой строки.protectedoverrideboolCheck(object value) { // Для корректного получения значения из праметра value используется статический класс ValueConverter. // Класс описан в Common.dll и предоставляет широкий набор методов поддерживающих различные типы данных.var str1 =ValueConverter.GetStringValue(value); // Динамически получаем актуальное значение в момент проверки условияvar str2 =somethingDataBinding.GetStringValue(); // Здесь необходимо реализовать логику проверки переданного значенияreturntrue; } }}
Для получения привязки к источнику данных в тэге <Something> используем статический метод GetRequiredElementDataBinding().