Когда и где применять правило поля
Правила полей позволяют определять поведение типа рабочего элемента независимо от состояния рабочего элемента. Например, поле, которое является обязательным для новой и активной ошибки, остается обязательным до ее закрытия.
В качестве области правил для полей также может выступать определенное состояние, переход и даже причина. Полный набор правил, которые применяются к какому-то определенному полю, является совокупностью следующих четырех подмножеств:
правила для типа рабочего элемента;
правила для состояния;
правила для перехода;
правила для причины.
Правила для типа рабочего элемента
Правила для определенного типа рабочего элемента применяются независимо от расположения рабочего элемента в модели состояний. Например, правило <REQUIRED /> выполняет следующую проверку:
"MyField Value" != NULL
Правила для состояния
Правила для состояния распространяются на экземпляр рабочего элемента в определенном состоянии. Правила для состояния применяются, когда выполняется следующее условие:
State field value == "MyState" && "MyField Value" != NULL
Правила для перехода
Правила для перехода распространяются на рабочий элемент, который выполняет определенный переход. Правила для перехода применяются, когда выполняются следующие условия:
State field value == "ToState" &&
"Previous State Before Edit/New" == "FromState"
&& "MyField Value" != NULL
Правила для причины
Правила для причины распространяются на конкретную причину определенного перехода. Правила для причины обрабатываются, когда выполняются следующие условия:
Reason field == "MyReason" &&
State field value == "ToState" &&
"Previous State Before Edit/New" == "FromState" && "MyField Value" != NULL
Ограничение области правил для полей
Правилам для полей можно задать область, используя элементы FIELDS и FIELD (рабочий процесс) внутри элементов STATE, TRANSITION и REASON.
Примечание
При перечислении полей в бизнес-правиле, следует указать только ссылочное имя поля.
Пример
В приведенном ниже примере определяется следующее правило: "Когда ошибка находится в активном состоянии, запретить изменение поля важности клиента".
<STATE name="Active">
<FIELDS>
<FIELD refname="MyCorp.Severity" >
<READONLY />
</FIELD>
</FIELDS>
</STATE>