Справка по системе Платформа ELMA BPM
×
Меню

Динамические формы

Динамическая форма - это форма, содержимое которой меняется в зависимости от контекста процесса. Для управления содержимым формы используются сценарии.
Реализовано два способа задать сценарий, управляющий содержимым формы:
Внимание!
Сценарий при изменении значения задается для переменной, управляющей содержимым (т.е. переменной, от которой зависит содержимое формы).
Чтобы задать сценарий к форме задачи, требуется открыть свойства операции Задача на графической модели процесса и на вкладке Форма(Контекст) в поле Сценарий при загрузке формы выбрать сценарий, который будет выполняться при загрузке формы задачи в веб-приложении (рис. 1).
Рис. 1. Настройки задачи. Вкладка Форма(Контекст)
Чтобы задать сценарий, запускаемый при изменении значения переменной, требуется в настройках задачи на вкладке Форма (контекст) открыть свойства контекстной переменной (для этого необходимо дважды кликнуть мышью по названию переменной или выделив переменную в списке "Отображаемые свойства" нажать кнопку Редактировать) и в открывшемся окне свойств переменной перейти на вкладку Дополнительные. В поле Сценарий при изменении значения выбрать сценарий, который будет выполняться при изменении значения этой переменной (рис. 2).
Рис. 2. Свойства переменной. Выбор сценария при изменении значения переменной
Около переменных с заданным сценарием в списке отображается значок (рис. 3).
Рис. 3. Отображение переменной с заданным сценарием в списке "Отображаемые свойства"
Внимание!
В том случае, если свойство типа Блок вынесено на форму как вложенное свойство объекта, сценарий, указанный на данной вкладке, не будет выполнен.

Пример динамической формы

Возьмем в качестве примера следующую форму согласования заявки на закупку офисной техники:
Рис. 4. Пример динамической формы задачи. Исходная форма
Как видим, форма содержит множество полей для заполнения. Создадим на её основе динамическую форму. Для заявок, сумма которых не более 10 000 рублей, установим тип оплаты "Наличными", а возможной датой будем считать следующий рабочий день. Если сумма заявки превышает 10 000 рублей установим тип оплаты "Безналичный расчет", а на оплату выделять 4 рабочих дня. Поля оставим редактируемыми. Кроме того, скроем поле Причина изменения суммы.
Зададим сценарий при загрузке формы OnFinDirFormLoad:
public void OnFinDirFormLoad(Context context, EleWise.ELMA.Model.Views.FormViewBuilder form)
{
          int DaysToPay; // инициализация переменной для хранения дней до возможно даты оплаты
          context.TipOplaty = new DropDownItem(); // инициализация переменной для установки типа оплаты
          if (context.Summa.Value <= 10000) // проверяем значение контекстной переменной "Сумма"
          {
              context.TipOplaty.Value = "наличными"; // устанавливаем переменной "Тип оплаты" значение "наличными"
              DaysToPay = 1; // устанавливаем 1 день до оплаты
          } else // если сумма больше 10000
          {
              context.TipOplaty.Value = "безналичный расчет"; // устанавливаем переменной "Тип оплаты" значение "безналичный расчет"
              DaysToPay = 4; // устанавливаем 4 дня до оплаты
          }
          int WorkDaysCount = 0; // инициализация переменной для хранения количества отсчитанных рабочих дней
          int RealDays = 0; // инициализация переменной для хранения количества отсчитанных календарных дней
          // в следующем цикле отсчитываем рабочие дни относительно календарных, исключая из расчета субботу и воскресенье
          while (WorkDaysCount < DaysToPay) {
              if ((DateTime.Today.AddDays(RealDays).DayOfWeek != DayOfWeek.Saturday) && (DateTime.Today.AddDays(RealDays).DayOfWeek != DayOfWeek.Sunday))
              {
                    WorkDaysCount++;
              }
              RealDays++;
          }
          context.VozmozhnayaDataOplaty = DateTime.Today.AddDays(RealDays); // добавляем к текущей дате отсчитанное число календарных дней
          context
          form.For(c => c.PrichinaIzmeneniyaSummy).Visible = false; // скрываем поле "Причина измененияы суммы"
}
Рис. 5. Пример динамической формы задачи. Автозаполнение полей
Зададим сценарий при изменении значения поля Сумма:
public void OnSumChange(Context context, EleWise.ELMA.Model.Views.FormViewBuilder form)
{
          OnFinDirFormLoad(context, form); // запускаем сценарий OnFinDirFormLoad
          form.For(c => c.PrichinaOtkaza).Visible(false); // скрываем поле "Причина отказа"
          form.For(c => c.PrichinaIzmeneniyaSummy).Visible(true); // отображаем поле "Причина изменения суммы"
}
Изменим значение поля Сумма, форма при этом изменится в соответствии со сценарием:
Рис. 6. Пример динамической формы задачи. Результат изменения значения поля "Сумма"
На динамической форме также может быть размещена валидация значений контекстных переменных. Подробнее об этом см. на соответствующей странице справки.

См. также: