Глобальные константы в DATAREON Platform: как убрать хардкод из интеграций

от автора

Привет, Хабр!

С вами снова Илья Вязников, инженер сопровождения SOFROS. Продолжаю делиться практическими приёмами, которые упрощают жизнь при эксплуатации и доработке интеграций.

Не так давно я рассказывал, как вынести повторяющуюся логику в C# функции, но в любом серьёзном проекте со временем накапливаются не только функции, но и куча параметров: адреса сервисов, таймауты и т.д. Сначала их прописывают прямо в коде, но очень быстро это превращается в проблему.

Сегодня расскажу про глобальные константы — один из полезных инструментов платформы для централизованного хранения таких параметров.

Когда глобальные константы особенно полезны

Глобальные константы стоит использовать, если значение применяется более чем в одном месте.

Типичные кейсы:

  • Параметры интеграций

    • URL внешних API

    • Пути к файловым каталогам

    • Порты и адреса серверов

  • Технические лимиты и retry-политики

    • Максимальное количество попыток

    • Таймауты

    • Размер батча обработки

  • Справочные значения

    • ИНН организации

    • Коды филиалов

    • Идентификаторы систем-источников

Вместо того чтобы писать в коде:

const int MAX_RETRY = 3;

const string CRM_URL = «https://crm.company.local/api»;

гораздо удобнее вынести это в глобальные константы и обращаться к ним централизованно.


Создание набора глобальных констант

  1. В Центре настройки перейдите: Обработка данных — Глобальные константы

  2. Нажмите + и создайте новый набор.

  3. Укажите Название и Имя (обычно они совпадают).
    Пример: MessageProcessing, ExternalServices, OrganizationSettings.

  4. Перейдите на вкладку Переменные и добавьте нужные параметры.

Пример переменных:

Название

Тип

Значение

RetryCount

int

3

EnableArchiveRestore

Boolean

true

MessageProperty

String

Example

Поддерживаемые типы: string, int, boolean. Также можно использовать массивы и разрешить null-значения.


Использование в Схемах обработки:

Обращение к константам очень простое:

Синтаксис: ГлобальныйНабор.Переменная

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

var retryCount = MessageProcessing.RetryCount;if (retryCount > 0){  Logger.Info($"Количество попыток: {retryCount}");}if (MessageProcessing.EnableArchiveRestore){  Logger.Info("Повторная обработка архива включена");}

Это особенно удобно, когда нужно быстро изменить поведение системы (увеличить retry, отключить какой-то сценарий, поменять batch size) без правок алгоритмов.

Аналогично можно обращаться к константам в условиях.


Использование в конфигурации объектов:

В наборы констант можно добавить и адреса серверов, а затем обращаться к ним в соответствующих объектах, например Внешних системах, сервисах.

В ряде объектов конфигурации значения можно задавать через специальный синтаксис:

[[НаборКонстант.Адрес]]

Важно:

  • Двойные квадратные скобки обязательны;

  • Константа должна существовать и быть сохранена;

  • Тип константы должен совпадать с типом параметра.

Пример:

Если константа не создана, но указана в конфигурации, выводится соответствующая ошибка (Не удалось сохранить: Не существует константы с таким именем)

Так можно задавать адреса в коннекторах, настройках хранилищ, email-сервисах и т.д.


Ограничения и важные нюансы

  • В обработчиках 1С глобальные константы платформы недоступны.

  • В конфигурации объектов поддерживаются только string, int и Boolean.

  • Секретные данные (пароли, токены) хотя технически можно хранить, стоит учитывать внутреннюю политику безопасности и разграничение доступа. Такие данные лучше хранить другими механизмами (об этом будет отдельная статья).

Полезные советы

  1. Разделяйте константы по смыслу
    Хорошая практика:

    • ExternalServices

    • MessageProcessing

    • OrganizationSettings

    • RetryPolicies

  2. Не выносите в константы значения, которые используются только в одном месте — это только усложнит конфигурацию.

  3. Используйте понятные имена — в будущем это сильно облегчит поддержку.


Заключение

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

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

А как вы работаете с переменными в ваших интеграционных проектах? Если есть вопросы не стесняйтесь писать комментарии, а если интересно узнать больше о нашей компании, новости, вебинары, специальные предложения подписывайтесь на наш канал в Telegram

Для тех кто хочет подробнее ознакомиться с функционалом описанным в статье — полезные ссылки:

ссылка на оригинал статьи https://habr.com/ru/articles/1043508/