Платформа поддерживает шаблонизацию с использованием 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" из структуры .itemfindValueInDictArray
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-последовательности.
Возвращает:
- Строку, где каждый символ представлен в виде
\uXXXXescape-последовательности.
Пример в шаблоне:
{{ 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:
- Открыть меню действия (кнопка с тремя точками в карточке действия).
- Выбрать пункт
Запуски действия. - Открыть конфигурацию одного из запусков действия.
- Найти в таблице колонку 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 }} // Референс заказа из хранилища