Изменить место вызова обработчика запроса на странице

Средний
PDF

Пример. На странице записи пользовательского раздела Requests отобразить номер последней созданной записи раздела. В качестве значения номера используется значение пользовательской системной настройки. Значение номера увеличивается на 1 после сохранения страницы заявки.

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

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

    1. Перейдите в дизайнер системы по кнопке . В блоке Настройка системы (System setup) перейдите по ссылке Системные настройки (System settings).
    2. На панели инструментов раздела нажмите на Добавить настройку (Add setting).
    3. Заполните свойства системной настройки:

      • Название (Name) — "Номер заявки" ("Request number").
      • Код (Code) — "UsrRequestLastNumber".
      • Тип (Type) — выберите "Целое число" ("Integer").
      • Значение по умолчанию (Default value) — "1".
  3. В рабочей области страницы приложения Requests откройте страницу Страница записи Requests (Requests form page).

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

  4. В рабочую область Freedom UI дизайнера добавьте компонент типа 2 колонки (2 columns).
  5. Добавьте надпись номера заявки.

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

      • Заголовок (Title) — "Номер заявки" ("Request number").
      • Стиль (Style) — выберите "Описание" ("Caption").
      • Цвет текста (Text color) — выберите серый цвет.
  6. Добавьте надпись, которая содержит значение системной настройки номера заявки.

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

      • Заголовок (Title) — "Номер заявки (значение)" ("Request number (value)").
      • Стиль (Style) — выберите "Обычный текст" ("Body text").
  7. На панели действий Freedom UI дизайнера нажмите на кнопку . После сохранения настроек страницы открывается исходный код страницы Freedom UI.

2. Изменить место вызова обработчика запроса 

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

  1. Подключите сервис системных переменных sdk.SysSettingsService. Для этого добавьте в AMD-модуль зависимость @creatio/sdk.

    Зависимости AMD-модуля
    /* Объявление AMD-модуля. */
    define("UsrAppRequests_FormPage", /**SCHEMA_DEPS*/["@creatio/sdk"] /**SCHEMA_DEPS*/, function/**SCHEMA_ARGS*/(sdk)/**SCHEMA_ARGS*/ {
        return {
            ...
        };
    });
    
  2. В секции viewModelConfig добавьте атрибут UsrRequestLastNumber, который хранит информацию о значении системной настройки UsrRequestLastNumber.

    Секция viewModelConfig
    viewModelConfig: /**SCHEMA_VIEW_MODEL_CONFIG*/{
        "attributes": {
            ...,
            /* Атрибут, который хранит значение системной настройки UsrRequestLastNumber. */
            "UsrRequestLastNumber": {}
        }
    }/**SCHEMA_VIEW_MODEL_CONFIG*/,
    
  3. В секции viewConfigDiff привяжите свойство caption элемента RequestNumberValue к атрибуту $UsrRequestLastNumber модели. Свойство caption отвечает за текст, который содержит элемент.

    Секция viewConfigDiff
    viewConfigDiff: /**SCHEMA_VIEW_CONFIG_DIFF*/[
        ...,
        {
            "operation": "insert",
            "name": "RequestNumberValue",
            "values": {
                ...,
                /* Свойство, которое отвечает за текст, который содержит элемент. Привязано к значению атрибута UsrRequestLastNumber. */
                "caption": "$UsrRequestLastNumber",
                ...
            },
            ...
        }
    ]/**SCHEMA_VIEW_CONFIG_DIFF*/,
    
  4. В секции handlers добавьте пользовательскую реализацию обработчика системного запроса crt.SaveRecordRequest. Обработчик выполняется при нажатии на кнопку Сохранить (Save) на панели инструментов страницы заявки.

    • Реализуйте ожидание выполнения следующего обработчика. В нашем примере это обработчик, который выполняет сохранение записи.
    • После сохранения записи создайте экземпляр сервиса системных значений из @creatio/sdk.
    • Получите значение системной настройки UsrRequestLastNumber.
    • Отправьте запрос на обновление значения системной настройки UsrRequestLastNumber (увеличьте ее на 1).
    • Обновите значение атрибута UsrRequestLastNumber.
    • Верните результат сохранения.
    Секция handlers
    handlers: /**SCHEMA_HANDLERS*/[
        {
            request: "crt.SaveRecordRequest",
            /* Реализация обработчика пользовательского запроса. */
            handler: async (request, next) => {
                /* Ждет выполнения следующего обработчика (в данном случае, обработчика, который выполняет сохранение записи). */
                const saveResult = await next.handle(request);
                /* После сохранения записи создает экземпляр сервиса системных значений из @creatio/sdk. */
                const sysSettingsService = new sdk.SysSettingsService();
                /* Получает значение системной настройки UsrRequestLastNumber. */
                const requestLastNumber = await sysSettingsService.getByCode('UsrRequestLastNumber');
                /* Отправляет запрос на обновление значения системной настройки UsrRequestLastNumber. */
                await sysSettingsService.update({
                    code: 'UsrRequestLastNumber',
                    /* Новое значение на 1 больше предыдущего. */
                    value: ++requestLastNumber.value
                });
                /* Обновляет значение атрибута UsrRequestLastNumber. */
                request.$context.UsrRequestLastNumber = requestLastNumber.value;
                /* Возвращает результат сохранения. */
                return saveResult;
            }
        }
    ] /**SCHEMA_HANDLERS*/,
    
    Полный исходный код схемы страницы
  5. На панели инструментов дизайнера клиентского модуля нажмите Сохранить (Save).

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

Чтобы посмотреть результат выполнения примера:

  1. Перейдите на страницу приложения Requests и нажмите Запустить приложение (Run app).
  2. На панели инструментов приложения Requests нажмите Добавить (New).

В результате выполнения примера при нажатии на кнопку Сохранить (Save) панели инструментов страницы заявки отображается номер последней созданной записи в разделе Requests, который увеличен на 1. В качестве значения используется значение системной настройки Номер заявки (Request number, код UsrRequestLastNumber).