Сценарии при изменении на форме

Примечание
Перед началом работы со сценариями рекомендуется ознакомиться со стандартами написания программного кода на языке C#.

Очень часто при настройке конфигурации возникает необходимость повлиять на отображение тех или иных полей в зависимости от значения других полей. В системе ELMA вы можете сконфигурировать сценарии на форме (или динамические формы) для достижения нужного результата.

Динамические формы доступны при выполнении задач по процессам, при создании и редактировании документов и справочников. О том, как настраивать динамические формы см. в соответствующем разделе справки.

Основные варианты использования

При помощи сценариев на форме вы можете сделать следующие преобразования:

  • cкрыть/отобразить поле на форме;
  • установить полю признак Только для чтения;
  • установить обязательность заполнения поля.

При создании метода для сценария на форме, можно заметить, что вместе с контекстом приходит еще один аргумент типа EleWise.ELMA.Model.Views.FormViewBuilder<Context> (где Context – это тип контекста), который как раз содержит специальный класс-построитель для настройки формы. Ниже приведен пример использования возможностей данного класса

C# Code
public void OnContactSelect(Context context, EleWise.ELMA.Model.Views.FormViewBuilder<Context> form)
{
    form.For(c => c.Kontakt).ReadOnly(true); //Устанавливаем для переменной Контакт на форме признак "только для чтения"
    form.For(c => c.ImyaPitomca).ReadOnly(false).Required(true); //Устанавливаем для переменной Имя питомца признаки видимости и обязательности заполнения
    form.For(c => c.VozrastPitomca).Visible(false); //Скрываем переменную Возраст питомца с формы
}

Тут нужно пояснить, что при обращении вида form.For(c => c.Kontakt) в функцию For передается лямбда-выражение, которое определяет для какой переменной производить дальнейшую настройку. Все вызовы для одной и той же переменной идут цепочкой методов, но это не обязательное условие, вы можете вызывать методы сколько угодно раз, действие будет иметь последний вызванный метод.

C# Code
public void OnFormLoaded(Context context, EleWise.ELMA.Model.Views.FormViewBuilder<Context> form)
{
    var isContactSelected = context.Kontakt !null;
    
    if(isContactSelected)
    {
        form.For(c => c.Kontakt).ReadOnly(true);
    }
    else
    {
        form.For(c => c.Kontakt).ReadOnly(false).Required(true);
    }
}
При использовании переменных на форме вы должны помнить, что повлиять можно только на отображение тех переменных, которые ранее были настроены для вывода на форме, т.е. нельзя вывести абсолютно любую переменную из контекста. Вы можете скрывать некоторые переменные используя сценарий при загрузке формы.

В любом случае инструмент для использования сценариев на форме достаточно гибкий и позволяет реализовать массу возможностей для оптимизации бизнеса.

Дополнительный материал