Настроить условие заполнения поля на странице

Средний
PDF

Пример. Настроить условие заполнения поля Описание (Description) на странице записи пользовательского раздела Requests. Если совпадают значения полей Название (Name) и Описание (Description), то поле Описание (Description) заполняется новым значением поля Название (Name). В другом случае значение поля Описание (Description) не меняется.

1. Настроить интерфейс страницы 

  1. Используя шаблон Данные и бизнес-процессы (Records & business processes), создайте пользовательское приложение Requests. Для этого воспользуйтесь инструкцией, которая приведена в статье Создать пользовательское приложение.
  2. В рабочей области страницы приложения Requests откройте страницу Страница записи Requests (Requests form page).

    Поле Название (Name) по умолчанию добавлено на страницу Страница записи Requests (Requests form page).

  3. Добавьте поле, которое содержит описание заявки.

    1. В рабочую область Freedom UI дизайнера добавьте новое поле типа Текст (Text).
    2. На панели действий Freedom UI дизайнера нажмите на кнопку и на панели настройки заполните свойства поля:

      • Заголовок (Title) — "Описание" ("Description").
      • Код (на английском) (Code) — "UsrDescription".
  4. На панели действий Freedom UI дизайнера нажмите на кнопку . После сохранения настроек страницы открывается исходный код страницы Freedom UI.

2. Настроить условие заполнения поля 

Бизнес-логика настраивается в дизайнере клиентского модуля. В этом примере настроим условие заполнения поля.

  1. В секции handlers добавьте пользовательскую реализацию обработчика системного запроса crt.HandleViewModelAttributeChangeRequest. Обработчик выполняется при изменении значения любого атрибута (в т. ч. при загрузке значений атрибутов из источника данных). Обработчик проверяет значение атрибута UsrName. Если старое значение атрибута совпадает со значением атрибута UsrDescription, то для атрибута UsrDescription устанавливаем такое же значение, как и новое значение атрибута UsrName.

    Секция handlers
    handlers: /**SCHEMA_HANDLERS*/[
        {
            request: "crt.HandleViewModelAttributeChangeRequest",
            /* Пользовательская реализация обработчика системного запроса. */
            handler: async (request, next) => {
                /* Если изменяется поле UsrName, то выполняются следующие шаги.*/
                if (request.attributeName === 'UsrName') {
                    /* Проверяет равно ли старое значение поля UsrName значению поля UsrDescription. */
                    const isFieldsShouldBeSynchronized = request.oldValue ===   await request.$context.UsrDescription;
                    if (isFieldsShouldBeSynchronized) {
                        /* Присваивает новое значение поля UsrName полю UsrDescription. */
                        request.$context.UsrDescription = await request.$context.UsrName;
                    }
                }
                /* Вызываем следующий обработчик, если он присутствует, и возвращаем его результат. */
                return next?.handle(request);
            }
        }
    ]/**SCHEMA_HANDLERS*/,
    
    Полный исходный код схемы страницы
  2. На панели инструментов дизайнера клиентского модуля нажмите Сохранить (Save).

Результат выполнения примера 

Чтобы посмотреть результат выполнения примера для одинаковых значений полей Название (Name) и Описание (Description:

  1. Перейдите на страницу приложения Requests и нажмите Запустить приложение (Run app).
  2. На панели инструментов приложения Requests нажмите Добавить (New).
  3. В поле Название (Name) введите значение "Request's name".
  4. В поле Описание (Description) введите значение "Request's name".
  5. Измените значение поля Название (Name) на "Test".

В результате выполнения примера в поле Описание (Description) установлено значение "Test", как и в поле Название (Name).

Чтобы посмотреть результат выполнения примера для разных значений полей Название (Name) и Описание (Description:

  1. Измените значение поля Описание (Description) на "Request's description".
  2. В поле Название (Name) введите значение "Test".

В результате выполнения примера значение поля Описание (Description) остается без изменений.