Динамическая форма задачи в бизнес-процессах

С помощью сценариев, выполняемых при загрузке формы, и сценариев, выполняемых при изменении значения какой-либо переменной, можно управлять видимостью и обязательностью заполнения контекстных переменных в задаче, а также изменять их значения.
На данный момент событие при изменении значения поддерживают следующие типы: все простые (кроме HTML-разметки), объекты, документы, перечисления. Блоки и свойства в них не поддерживаются. Изменять значения в сценариях можно у любых свойств (в том числе тех, которые не лежат на форме).
Управлять параметрами отображения (видимость, только для чтения, обязательность заполнения), можно только для тех свойств, которые есть в списке Отображаемые переменные контекста задачи. Если требуется, чтобы при открытии формы задачи свойство изначально НЕ отображалось, необходимо установить Сценарий при загрузке формы и в нем для этого свойства присвоить Visible=false.

Рассмотрим пример создания динамической формы задачи. 

В процессе имеется переменная Тип клиента типа Выпадающий список с двумя значениями: Физическое лицо и Юридическое лицо. Также в процессе присутствует набор переменных, предназначенных для каждого из типов клиентов, которые следует отображать только в том случае, если выбран один из них.
В настройках задачи на вкладке Контекст следует выбрать в поле Сценарий при загрузке формы соответствующий сценарий, этот же сценарий выберем в окне настроек отображения переменной Тип клиента в поле Сценарий при изменении значения.
Текст сценария следующий:
public void UpdateVisibility(Context context, EleWise.ELMA.Model.Views.FormViewBuilder<Context> form)
        {
        	var isPhys = context.TipKlienta != null && context.TipKlienta.Value == "Физическое лицо"; //проверка выбранного значения в переменной Тип клиента
        	var isYur = context.TipKlienta != null && context.TipKlienta.Value == "Юридическое лицо";
        	form.For(c => c.FIO).Visible(isPhys).Required(isPhys); //установление признака видимости и обязательности для заполнения поля ФИО
        	form.For(c => c.NazvanieOrganizacii).Visible(isYur).Required(isYur);
        	form.For(c => c.Strahovoy_polis).Visible(isPhys); //установление признака видимости необязательного для заполнения поля
        	form.For(c => c.NomerStrahovogoPolisa).Visible(isPhys).Required(isPhys);
        }
В результате если в переменную Тип клиента будет выбрано значение Физическое лицо, на форме появятся три поля (ФИО, Cтраховой полис и Номер страхового полиса), если будет выбрано Юридическое лицо, то на форме появится одно поле – Название организации.

Начиная с версии 3.1, реализована возможность указывать сценарии для свойства Блок. Добавлены такие возможности:
  1. Обращаться к блокам при изменении переменных вне блока (видимость, значения).
  2. Задавать сценарии при изменении самих блоков.
  3. Задавать сценарии при изменении переменных в блоке.

В этом случае в метод сценария передается дополнительный параметр с именем item – это элемент блока, в котором произошли изменения. Например:

public void CalcSum(Context context, Unit item, EleWise.ELMA.Model.Views.FormViewBuilder<Unit> form)
{
item.Sum = item.Price.Value * item.Count;
} 



Ограничения:
В сценариях при изменении переменных в блоке нельзя менять значения/видимость переменных вне этого блока. Чтобы это сделать, нужно задавать сценарий для самого блока.