Платформа поддерживает шаблонизацию с использованием Go template. Подробности и примеры использования описаны в соответствующих разделах документации.

Помимо стандартных функций доступны:

  • Встроенные функции платформы.
  • Функции библиотеки sprig.

Функции библиотеки sprig не поддерживаются в источниках данных.

Встроенные функции

extractPart

extractPart разделяет входную строку s по указанному разделителю delimiter и возвращает часть по указанному индексу index. Если индекс выходит за пределы массива, возвращается ошибка.

Параметры:

  • s — входная строка, которую нужно разделить.
  • delimiter — разделитель, используемый для разделения входной строки.
  • index — индекс части, которую нужно вернуть после разделения.

Возвращает:

  • Строку, представляющую часть с указанным индексом после разделения входной строки.
  • Если индекс выходит за пределы, возвращается ошибка.

Пример в шаблоне:

{{ extractPart "ddp/demo-service" "/" 1 }} // Вывод: "demo-service"

extractLastPart

extractLastPart разделяет входную строку s по указанному разделителю delimiter и возвращает последнюю часть. Если строка пустая или разделитель не найден, возвращается оригинальная строка.

Параметры:

  • s — входная строка, которую нужно разделить.
  • delimiter — разделитель, используемый для разделения входной строки.

Возвращает:

  • Строку, представляющую последнюю часть после разделения входной строки.

Пример в шаблоне:

{{ extractLastPart "ddp/demo-service" "/" }} // Вывод: "demo-service"

toJSON

toJSON сериализует заданное значение в строку JSON. Принимает любой тип данных. При невозможности сериализации, возвращается ошибка.

Параметры:

  • v — значение, которое нужно сериализовать в JSON.

Возвращает:

  • JSON-строку, представляющую входное значение.
  • Ошибку, возникшую в ходе сериализации.

Пример в шаблоне:

{{ toJSON . }} // Вывод: JSON-представление объекта в контексте

replaceChar

replaceChar заменяет все вхождения указанного символа в строке на другой указанный символ.

Параметры:

  • s — исходная строка, в которой нужно выполнить замену.
  • oldChar — символ, который нужно заменить.
  • newChar — символ, на который нужно заменить.

Возвращает:

  • Изменённую строку, где все вхождения oldChar заменены на newChar.

Пример в шаблоне:

{{ replaceChar "hello/world" "/" "-" }} // Вывод: "hello-world"

filteredItems

filteredItems фильтрует массив элементов (maps) по запрашиваемому значению ключа. Возвращает массив элементов, у которых значение по заданному ключу соответствует целевому значению.

Параметры:

  • data — массив данных, в котором выполняется фильтрация.
  • key — ключ, по которому будет выполнена проверка значения.
  • value — целевое значение для сравнения.

Возвращает:

  • Массив элементов, у которых значение по заданному ключу соответствует целевому значению.
  • Ошибку, если возникает проблема во время фильтрации.

Пример в шаблоне:

{{ filteredItems .items "name" "Alice" }} // Вывод: [{"name": "Alice", "age": 30}]

anyOf

anyOf проверяет, соответствует ли хотя бы один элемент массива условию сравнения.

Параметры:

  • operator — оператор сравнения (eq, ne, lt, le, gt, ge).
  • value — целевое значение для сравнения.
  • key — ключ, по которому будет извлечено значение для сравнения.
  • data — массив данных (maps).

Возвращает:

  • true, если хотя бы одно значение из массива данных соответствует условию.

Пример в шаблоне:

{{ anyOf "eq" "value" "key" .data }} // Вывод: true, если хотя бы одна запись удовлетворяет условию

allOf

allOf проверяет, соответствуют ли все элементы массива условию сравнения.

Параметры:

  • operator — оператор сравнения (eq, ne, lt, le, gt, ge).
  • value — целевое значение для сравнения.
  • key — ключ, по которому будет извлечено значение для сравнения.
  • data — массив данных (maps).

Возвращает:

  • true, только если все значения соответствуют условию.

Пример в шаблоне:

{{ allOf "gt" 10 "age" .users }} // Вывод: true, если все пользователи старше 10 лет

getFieldValue

getFieldValue получает значение поля по ключу из структуры, представленной в виде map.

Параметры:

  • items — структура данных в виде карты.
  • key — ключ, по которому нужно получить значение.

Возвращает:

  • Значение, полученное по ключу.
  • Ошибку, если структура отсутствует или ключ не найден.

Пример в шаблоне:

{{ getFieldValue .item "name" }} // Вывод: Значение поля "name" из структуры .item

findValueInDictArray

findValueInDictArray ищет в массиве словарей элемент, где значение по заданному ключу соответствует указанному значению, и возвращает значение другого ключа.

Параметры:

  • data — массив словарей (map[string]interface{}), в которых выполняется поиск.
  • filterKey — ключ, по которому выполняется фильтрация.
  • filterValue — значение, с которым должно совпадать значение по filterKey.
  • targetKey — ключ, значение которого требуется получить из найденного элемента.

Возвращает:

  • Значение, соответствующее targetKey в найденном словаре.
  • Ошибку, если элемент не найден или targetKey отсутствует.

Пример в шаблоне:

{{ findValueInDictArray .items "environment" "test" "url" }}  // Вывод: Значение ключа "url" из первого найденного словаря, где "environment" равно "test".

generatePassword

generatePassword генерирует случайный пароль с заданными параметрами.

Параметры:

  • length — длина пароля (по умолчанию: 16).
  • includeUppercase — включать заглавные буквы A-Z (по умолчанию: true).
  • includeLowercase — включать строчные буквы a-z (по умолчанию: true).
  • includeNumbers — включать цифры 0-9 (по умолчанию: true).

Возвращает:

  • Строку со сгенерированным паролем.
  • Ошибку, если невозможно сгенерировать пароль с заданными параметрами.

Примеры в шаблоне:

{{ generatePassword }}                                   // Вывод: Случайный пароль длиной 16 символов
{{ generatePassword 12 }}                                // Вывод: Случайный пароль длиной 12 символов
{{ generatePassword 8 true true true }}                  // Вывод: Пароль длиной 8 символов
{{ generatePassword 10 false true true }}                // Вывод: Пароль длиной 10 символов только из строчных букв и цифр

encodeUnicode

encodeUnicode преобразует строку в последовательность Unicode escape-последовательностей. Каждый символ строки кодируется в формате \uXXXX, где XXXX - четырехзначное шестнадцатеричное представление кодовой точки символа.

Параметры:

  • Входная строка, которую нужно закодировать в Unicode escape-последовательности.

Возвращает:

  • Строку, где каждый символ представлен в виде \uXXXX escape-последовательности.

Пример в шаблоне:

{{ encodeUnicode "Привет" }} // Вывод: "\u041f\u0440\u0438\u0432\u0435\u0442"
{{ encodeUnicode "Hello" }}  // Вывод: "\u0048\u0065\u006c\u006c\u006f"

decodeUnicode

decodeUnicode декодирует строку, содержащую Unicode escape-последовательности, обратно в обычную строку. Функция обрабатывает escape-последовательности вида \uXXXX, где XXXX - четырехзначное шестнадцатеричное число, представляющее кодовую точку Unicode.

Параметры:

  • Строка с Unicode escape-последовательностями, которую нужно декодировать.

Возвращает:

  • Декодированную строку, где все Unicode escape-последовательности преобразованы в символы.
  • Ошибку, если декодирование не удалось (например, при некорректном формате escape-последовательностей).

Пример в шаблоне:

{{ decodeUnicode "\u041f\u0440\u0438\u0432\u0435\u0442" }} // Вывод: "Привет"
{{ decodeUnicode "\u0048\u0065\u006c\u006c\u006f" }}      // Вывод: "Hello"

jwtSign

jwtSign формирует подписанный JWT по переданным claims, ключу подписи и алгоритму.

Параметры:

  • claims — карта или JSON-строка. Стандартные поля: «sub», «iss», «aud», «exp», «iat», «nbf».
  • signingKey — ключ подписи: для HS256/HS384/HS512 строка-секрет, для RS256/ES256 и др. — PEM закрытого ключа.
  • algorithm — алгоритм подписи: HS256, HS384, HS512, RS256, RS384, RS512, ES256, ES384, ES512, PS256 и др.
  • headers — заголовки JWT (опционально): карта или JSON-строка, например «kid», «cty». Пустая строка или пустая карта — заголовки не задаются.

Возвращает:

  • Строку с подписанным JWT.
  • Ошибку при неверных параметрах или ключе.

Примеры в шаблоне:

{{ jwtSign (dict "sub" "user-123" "iss" "ddp") .credentials.secret "HS256" "" }}

Глобальные переменные

Глобальные переменные — общие переменные, которые могут быть переиспользованы в шаблонизации при запуске действий.

Для получения значения глобальной переменной необходимо указать подобную строку в соответствующих полях:

{{ .global.<slug>.<key> }}

где:

  • global — указывает на то, что идет обращение к глобальным переменным.
  • slug — идентификатор набора глобальных переменных.
  • key — ключ переменной, значение которой необходимо подставить.

Глобальные переменные хранятся в базе данных DDP в открытом виде, их значение может быть получено пользователями через веб-интерфейс. Не рекомендуется помещать конфиденциальные данные в глобальные переменные.

Настройка глобальных переменных

Настройка глобальных переменных производится в разделе «Самообслуживание» → «Глобальные переменные».

Применяются следующие правила именования:

  • Название набора глобальных переменных не должно быть пустым.
  • Идентификатор набора глобальных переменных не может быть пустым и должен соответствовать следующим условиям:
    • Содержать символы a-z, A-Z, цифры, либо подчеркивания.
    • Не начинаться с цифры.
  • Ключ каждой переменной набора не должен быть пустым и должен соответствовать следующим условиям:
    • Содержать символы a-z, A-Z, цифры, либо подчеркивания.
    • Не начинаться с цифры.
  • Значение каждой переменной набора не должно быть пустым.

Командные переменные

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

Командные переменные настраиваются в разделе «Администрирование» → «Команды» в меню редактирования команды.
Каждый пользователь может редактировать переменные тех команд, в которые он входит - это можно сделать в профиле пользователя.

Чтобы получить значение командной переменной, используйте следующую конструкцию:

{{ .team.<variable_name> }}

При запуске действия пользователь должен выбрать команду, чьи переменные будут подставлены.
При запуске сценария или процесса команда выбирается один раз - и её переменные используются во всех действиях внутри.

Переменные действий

Параметры действия

Параметры действия доступны через контекст {{ .property.* }} и содержат значения, переданные при запуске действия.

Для получения значения параметра действия используйте следующую конструкцию:

{{ .property.<property_slug> }}

где:

  • property — указывает на то, что идет обращение к параметрам действия.
  • property_slug — идентификатор параметра, значение которого необходимо подставить.

Идентификаторы параметров можно посмотреть на вкладке Пользовательская форма в окне конфигурации действия.

Примеры использования:

{{ .property.environment }}   // Значение параметра "environment"
{{ .property.count }}         // Значение параметра "count"
{{ .property.url }}           // Значение параметра "url"

Ответ действия

Ответ действия доступен через контекст {{ .response.* }} и содержит данные, возвращенные после выполнения действия.

Для получения значения из ответа действия используйте следующую конструкцию:

{{ .response.<field_name> }}

где:

  • response — указывает на то, что идет обращение к ответу действия.
  • field_name — название поля в ответе, значение которого необходимо подставить.

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

  1. Открыть меню действия (кнопка с тремя точками в карточке действия).
  2. Выбрать пункт Запуски действия.
  3. Открыть конфигурацию одного из запусков действия.
  4. Найти в таблице колонку Response.

Примеры использования:

{{ .response.status }}        // Статус ответа
{{ .response.data.id }}       // ID из данных ответа
{{ .response.headers.auth }}  // Значение заголовка авторизации

Внимание. Контекст {{ .response.* }} может использоваться только в полях, описывающих правила обновления сущности после запуска действия.

Учётные данные

Учётные данные доступны во всех действиях, сценариях, процессах, виджетах, источниках данных и внешних сервисах через контекст {{ .credentials.* }}.

Для получения значения учётных данных используйте следующую конструкцию:

{{ .credentials.<credentials_slug> }}

где:

  • credentials — указывает на то, что идет обращение к учётным данным.
  • credentials_slug — идентификатор учётных данных, значение которого необходимо подставить.

В данном случае идентификаторы учетных данных - это те идентификаторы, которые задается во вкладке «Авторизация» в разделе «Учетные данные» в диалогах конфигурации объектов DDP.

Примеры использования:

{{ .credentials.token }}             // Токен доступа
{{ .credentials.username }}          // Имя пользователя
{{ .credentials.password }}          // Пароль
{{ .credentials.accessKeyId }}       // Access Key ID для S3
{{ .credentials.secretAccessKey }}   // Secret Access Key для S3
{{ .credentials.apiKey }}            // API ключ
{{ .credentials.bearerToken }}       // Bearer токен

Сущность (entity)

Сущность доступна в виджетах с областью видимости Resource, действиях, процессах и сценариях через контекст {{ .entity.* }}.

Для получения значения поля сущности используйте следующую конструкцию:

{{ .entity.<field_name> }}

где:

  • entity — указывает на то, что идет обращение к сущности.
  • field_name — название поля сущности, значение которого необходимо подставить.

Основные поля сущности

{{ .entity.uuid }}           // UUID сущности
{{ .entity.slug }}           // Идентификатор сущности
{{ .entity.name }}           // Название сущности
{{ .entity.description }}    // Описание сущности

Параметры сущности

Параметры сущности доступны через контекст {{ .entity.properties.* }} и содержат пользовательские параметры, настроенные для конкретной сущности.

Для получения значения параметра сущности используйте следующую конструкцию:

{{ .entity.properties.<property_slug> }}

где:

  • entity — указывает на то, что идет обращение к сущности.
  • properties — указывает на параметры сущности.
  • property_slug — идентификатор параметра сущности, значение которого необходимо подставить.

Примеры использования:

{{ .entity.properties.projectId }}     // ID проекта из параметров сущности
{{ .entity.properties.branch }}        // Ветка Git из параметров сущности
{{ .entity.properties.environment }}   // Окружение из параметров сущности
{{ .entity.properties.apiUrl }}        // URL API из параметров сущности
{{ .entity.properties.version }}       // Версия из параметров сущности

Параметры процесса

Для каждого процесса доступно задание общих параметров, значения которых могут быть использованы во всех действиях, входящих в сценарий.

Для получения значения параметра процесса используйте следующую конструкцию:

{{ .process.<property_slug> }}

где:

  • process — указывает на то, что идет обращение к процессу.
  • property_slug — идентификатор параметра процесса, значение которого необходимо подставить.

Тип и значение по умолчанию параметров задаются в интерфейсе редактирования процесса. При этом, для каждого конкретного параметра пользователь может при запуске процесса переопределить значение по умолчанию в случае, если редактирование параметра разрешено.

Примеры использования:

{{ .process.deploymentUrl }}    // URL для деплоя из параметров процесса
{{ .process.branch }}           // Ветка Git из параметров процесса
{{ .process.environment }}      // Окружение из параметров процесса

Параметры сценария

Для каждого сценария доступно задание общих параметров, значения которых могут быть использованы во всех действиях, входящих в сценарий.

Для получения значения параметра сценария используйте следующую конструкцию:

{{ .workflow.<property_slug> }}

где:

  • workflow — указывает на то, что идет обращение к сценарию.
  • property_slug — идентификатор параметра сценария, значение которого необходимо подставить.

Тип и значение по умолчанию параметров задаются в интерфейсе редактирования сценария. При этом, для каждого конкретного параметра пользователь может при запуске сценария переопределить значение по умолчанию в случае, если редактирование параметра разрешено.

Примеры использования:

{{ .workflow.apiEndpoint }}       // API-эндпоинт из параметров сценария
{{ .workflow.notificationEmail }} // Email для уведомлений из параметров сценария
{{ .workflow.retryAttempts }}     // Количество попыток повтора из параметров сценария

Хранилище процесса

Хранилище доступно только в процессах и используется для передачи данных между действиями. В настройках действия задаются правила записи в хранилище (подробнее — в разделе «Запись в хранилище процесса»), а в конфигурации последующих действий используются плейсхолдеры для чтения данных.

Для получения значения из хранилища используйте следующую конструкцию:

{{ .store.<ключ> }}

где:

  • store — указывает на то, что идет обращение к хранилищу процесса.
  • <ключ> — название ключа в хранилище, под которым было сохранено значение (поле Ключ в хранилище в правилах записи).

Особенности использования:

  • Хранилище доступно только в процессах, в обычных действиях и сценариях плейсхолдеры {{ .store.* }} не работают.
  • Если ключа нет в хранилище (действие ещё не выполнялось, не имело правил записи или запись не произошла), действие завершится с ошибкой.
  • Если для одного и того же ключа пишут несколько действий, остаётся последнее записанное значение.

Примеры использования:

{{ .store.projectId }} // ID проекта из хранилища
{{ .store.orderRef }}  // Референс заказа из хранилища