Отобразить значение системной переменной

Основы

Для работы с системными переменными в Creatio 8 Atlas используется сервис sdk.SysValuesService.

В Creatio 8 Atlas изменилось обращение к системным переменным. Теперь имя системной переменной записывается в нижнем регистре без использования разделителей _ и префикса CURRENT (например, maintainer, primaryLanguage и т. д.).

Чтобы отобразить значение системной переменной на странице:

  1. На шаге 1 алгоритма кастомизации страницы Freedom UI при необходимости добавьте на страницу надпись, в которой планируется отобразить значение системной переменной.
  2. На шаге 2 алгоритма кастомизации страницы Freedom UI настройте отображение значения системной переменной на странице.

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

      Пример добавления зависимости в AMD-модуль UsrAppClientSchemaName приведен ниже.

      Зависимости AMD-модуля
    2. В секцию viewModelConfig добавьте атрибут, который хранит информацию. Добавление атрибута аналогично описанному в алгоритме настройки условия отображения поля.
    3. В секции viewConfigDiff привяжите свойство caption к соответствующему атрибуту модели. Привязка свойства аналогична описанной в алгоритме настройки условия отображения поля. Вместо свойства visible используйте свойство caption, которое отвечает за текст отображаемый в элементе.
    4. В секцию handlers добавьте пользовательскую реализацию обработчика системного запроса crt.HandlerViewModelInitRequest. Обработчик выполняется при инициализации View модели. В зависимости от значения атрибута (true или false), обработчик выполняет разную бизнес-логику.

      1. Создайте экземпляр сервиса системных значений из @creatio-devkit/common.
      2. Загрузите системные значения.
      3. При необходимости выполните расчет значения и запишите результат расчета в соответствующий атрибут.

      Пример обработчика запроса crt.HandleViewModelInitRequest с результатом расчета someVariable, который записан в атрибут SomeAttributeName, представлен ниже.

      Секция handlers

Подробный пример настройки отображения значения системной переменной приведен в статье Отобразить на странице значения системных переменных.

Отобразить на странице значения системных переменных
Средний

Пример. На странице записи пользовательского раздела [ System variables ] отобразить:

  • Имя текущего пользователя.
  • Значение разницы во времени (в часах) между временем в часовом поясе текущего контакта и универсальным временем (UTC).

В качестве значений используются значения соответствующих системных переменных.

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

  1. Используя шаблон [ Данные и бизнес-процессы ] ([ Records & business processes ]), создайте пользовательское приложение System variables. Для этого воспользуйтесь инструкцией, которая приведена в статье Создать пользовательское приложение.
  2. В рабочей области страницы приложения System variables откройте страницу [ Страница записи System variables ] ([ System variables form page ]).
  3. Удалите поле [ Название ] ([ Name ]), которое по умолчанию добавлено на страницу [ Страница записи System variables ] ([ System variables form page ]).
  4. Добавьте надпись текущего контакта.

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

      • [ Заголовок ] ([ Title ]) — "Текущий пользователь" ("Current user").
      • [ Стиль ] ([ Style ]) — выберите "Описание" ("Caption").
      • [ Цвет текста ] ([ Text color ]) — выберите серый цвет.
  5. Аналогично добавьте надписи:

    • Значения имени текущего контакта из системной переменной.
    • Разницы во времени с UTC.
    • Значения разницы во времени с UTC из системной переменной.

    Свойства надписей, которые необходимо добавить, приведены в таблице ниже.

    Значения свойств надписей
    Элемент
    Свойство
    Значение свойства
    Надпись, которая содержит значение имени текущего контакта из системной переменной
    [ Заголовок ] ([ Title ])
    "Текущий пользователь (значение)" ("Current user (value)")
    [ Стиль ] ([ Style ])
    Выберите "Обычный текст" ("Body text")
    Надпись разницы во времени с UTC
    [ Заголовок ] ([ Title ])
    "Разница во времени с UTC" ("Contact time offset")
    [ Стиль ] ([ Style ])
    Выберите "Описание" ("Caption")
    [ Цвет текста ] ([ Text color ])
    Выберите серый цвет
    Надпись, которая содержит значение разницы во времени с UTC из системной переменной
    [ Заголовок ] ([ Title ])
    "Разница во времени с UTC (значение)" ("Contact time offset (value)")
    [ Стиль ] ([ Style ])
    Выберите "Обычный текст" ("Body text")
  6. На панели действий Freedom UI дизайнера нажмите на кнопку . После сохранения настроек страницы открывается исходный код страницы Freedom UI.

2. Настроить получение значений системных переменных 

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

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

    Зависимости AMD-модуля
    Код скопирован
    /* Объявление AMD-модуля. */
    define("UsrAppSystemvariable_FormPage", /**SCHEMA_DEPS*/["@creatio-devkit/common"] /**SCHEMA_DEPS*/, function/**SCHEMA_ARGS*/(sdk)/**SCHEMA_ARGS*/ {
        return {
            ...
        };
    });
  2. В секцию viewModelConfig добавьте атрибуты:

    • CurrentUser — атрибут, который хранит имя текущего контакта.
    • ContactTimezone — атрибут, который хранит разницу во времени (в часах) между временем в часовом поясе текущего контакта и UTC.
    Секция viewModelConfig
    Код скопирован
    viewModelConfig: /**SCHEMA_VIEW_MODEL_CONFIG*/{
        "attributes": {
            ...,
            /* Атрибут, который хранит имя текущего контакта. */
            "CurrentUser": {},
            /* Атрибут, который хранит разницу во времени (в часах) между временем в часовом поясе текущего контакта и универсальным временем (UTC). */
            "ContactTimezone": {}
        }
    }/**SCHEMA_VIEW_MODEL_CONFIG*/,
  3. В секции viewConfigDiff измените значение свойства caption:

    • $CurrentUser — для элемента CurrentUserValue.
    • $ContactTimezone — для элемента ContactTimeOffsetValue.

    Свойство caption отвечает за текст, который содержит элемент.

    Секция viewConfigDiff
    Код скопирован
    viewConfigDiff: /**SCHEMA_VIEW_CONFIG_DIFF*/[
        ...,
        {
            "operation": "insert",
            "name": "CurrentUserValue",
            "values": {
                ...,
                /* Привязка атрибута CurrentUser к свойству caption. */
                "caption": "$CurrentUser",
                ...
            },
            ...
        },
        ...,
        {
            "operation": "insert",
            "name": "ContactTimeOffsetValue",
            "values": {
                ...,
                /* Привязка атрибута ContactTimezone к свойству caption. */
                "caption": "$ContactTimezone",
                ...
            },
            ...
        }
    ]/**SCHEMA_VIEW_CONFIG_DIFF*/,
  4. В секции handlers добавьте пользовательскую реализацию обработчика системного запроса crt.HandlerViewModelInitRequest. Обработчик выполняется при инициализации View модели.

    1. Создайте экземпляр сервиса системных значений из @creatio-devkit/common.
    2. Загрузите системные значения.
    3. Установите имя контакта текущего пользователя в атрибут CurrentUser.
    4. Переведите значение разницы в часовых поясах с минут в часы и запишите ее в атрибут ContactTimezone.
    Секция handlers
    Код скопирован
    handlers: /**SCHEMA_HANDLERS*/[
        {
            request: "crt.HandleViewModelInitRequest",
            /* Пользовательская реализация обработчика системного запроса. */
            handler: async (request, next) => {
                /* Создает экземпляр сервиса системных значений из @creatio-devkit/common. */
                const sysValuesService = new sdk.SysValuesService();
                /* Загружает системные значения. */
                const sysValues = await sysValuesService.loadSysValues();
                /* Устанавливает имя контакта текущего пользователя в атрибут CurrentUser. */
                request.$context.CurrentUser = sysValues.userContact.displayValue;
                /* Переводит разницу в часовых поясах с минут в часы и записываем ее в атрибут ContactTimezone. */
                const offset = sysValues.userTimezoneOffset;
                const offsetDisplayValue = (offset > 0 ? '+' : '') + (offset / 60) + 'h';
                request.$context.ContactTimezone = offsetDisplayValue;
                /* Вызывает следующий обработчик, если он присутствует, и возвращаем его результат. */
                return next?.handle(request);
            }
        }
    ] /**SCHEMA_HANDLERS*/,
    Полный исходный код схемы страницы
  5. На панели инструментов дизайнера клиентского модуля нажмите [ Сохранить ] ([ Save ]).

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

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

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

В результате выполнения примера на странице записи пользовательского раздела [ System variables ] отображаются имя текущего пользователя и значение разницы во времени (в часах) между временем в часовом поясе текущего контакта и UTC. При этом используются значения соответствующих системных переменных.