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

Основы

Для работы с системными переменными в 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. При этом используются значения соответствующих системных переменных.