Динамическая форма задачи в бизнес-процессах
На данный момент событие при изменении значения поддерживают следующие типы: все простые (кроме 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, реализована возможность указывать сценарии для свойства Блок. Добавлены такие возможности:
- Обращаться к блокам при изменении переменных вне блока (видимость, значения).
- Задавать сценарии при изменении самих блоков.
- Задавать сценарии при изменении переменных в блоке.
В этом случае в метод сценария передается дополнительный параметр с именем item – это элемент блока, в котором произошли изменения. Например:
public void CalcSum(Context context, Unit item, EleWise.ELMA.Model.Views.FormViewBuilder<Unit> form) { item.Sum = item.Price.Value * item.Count; }
Ограничения:
В сценариях при изменении переменных в блоке нельзя менять значения/видимость переменных вне этого блока. Чтобы это сделать, нужно задавать сценарий для самого блока.