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

С помощью сценариев, выполняемых при загрузке формы, и сценариев, выполняемых при изменении значения какой-либо переменной, можно управлять видимостью и обязательностью заполнения контекстных переменных в задаче, а так же изменять их значения.
На данный момент событие при изменении значения поддерживают следующие типы: все простые (кроме 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);
        }
В результате если в переменную "Тип клиента" будет выбрано значение "Физическое лицо", на форме появятся три поля (ФИО, страховой полис и номер страхового полиса), если будет выбрано "Юридическое лицо", то на форме появится одно поле - Название организации.

Начиная с версии 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;
} 


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

Cтатьи в категории