Репозиторий с шаблоном разработки «Прикладные константы».
Решение предоставляет универсальный механизм хранения и использования прикладных констант, значения которых могут изменяться без внесения изменений в код. Константы могут быть использованы как в программном коде, так и в NoCode (через функции вычисляемых выражений), что делает настройку системы гибкой и удобной.
Возможности решения:
- объединение констант в логические группы через справочник Группы констант;
-
хранение констант и групп констант двух категорий:
-
Пользовательские — создаются вручную, допускают изменение системных полей (Имя, Описание, Guid, Группа, Тип) и могут быть удалены из системы;

-
Системные — создаются программно при инициализации системы, не допускают изменения системных полей (Имя, Описание, Guid, Группа, Тип) и не могут быть удалены из системы;

-
-
хранение значений различных типов данных:
- строка (string);
- целое число (integer);
- вещественное число (double);
- идентификатор (long);
- дата (DateTime);
- логическое значение (bool);
- пароль (хранится в виде зашифрованной строки);
-
создание системных констант и групп констант при инициализации системы;
-
использование системных констант в программном коде для получения их значений через серверные функции модуля Прикладные константы;
-
использование констант в NoCode для получения их значений через функции вычисляемых выражений модуля Прикладные константы. Например, константу можно указать в параметре процесса и использовать её в настройке варианта процесса или получить её через функцию вычсляемого выражения Получить прикладную константу по точному совпадению значения в поле Guid. Функция доступна из контекста (Задача, Задание, Документ, Справочник);

Состав объектов разработки
Справочники:
- Прикладные константы (ConstantsSetting)
- Группы констант (ConstantsGroup)
Модуль Прикладные константы (AppliedConstants):
Работа с системными константами и их группами основана на использовании уникальных идентификаторов (GUID). При создании константы или группы для них явно задаётся GUID, а все последующие операции в коде (поиск, получение значений) выполняются по этому идентификатору. Это гарантирует надёжную привязку, даже если отображаемые имена будут изменены.
Серверные функции модуля AppliedConstants:
Note
Параметры функций name, decription, guid, groupGuid являются типом string. Параметр constant - IConstantsSetting.
- Создание системных констант и групп констант в инициализации:
CreateConstantsGroup(name, description, guid)— создание группы констант;CreateConstant(name, description, string value, guid, groupGuid)— строка;CreateConstant(name, description, int value, guid, groupGuid)— целое число;CreateConstant(name, description, double value, guid, groupGuid)— вещественное число;CreateConstant(name, description, long value, guid, groupGuid)— идентификатор (long);CreateConstant(name, description, DateTime value, guid, groupGuid)— дата;CreateConstant(name, description, bool value, guid, groupGuid)— логическое значение;CreatePasswordConstant(name, description, string value, guid, groupGuid)— пароль.
- Работа с константами в коде (получение, извлечение значений, проверка на соответствие типу):
GetConstant(guid)— получение записи константы по guid;CheckConstantType(constant, type)— проверка типа константы;GetStringValue(guid)— получить строковое значение;GetIntegerValue(guid)— получить целочисленное значение;GetDoubleValue(guid)— получить вещественное значение;GetIdentifierValue(guid)— получить идентификатор;GetDateValue(guid)— получить дату;GetBoolValue(guid)— получить логическое значение;GetPasswordValue(guid)— получить пароль (расшифрованная строка base64);GetStringListValue(guid)— получить список строк, сформированный из строкового значения константы, в котором элементы заданы через разделитель (по умолчанию — запятая);GetIntegerListValue(guid)— получить список целых чисел, сформированный из строкового значения константы, в котором элементы заданы через разделитель (по умолчанию — запятая);
- Функции вычисляемых выражений (доступны в NoCode)
GetConstant(task, guid)— получить прикладную константу по guid;GetConstant(assignment, guid)— получить прикладную константу по guid;GetConstant(document, guid)— получить прикладную константу по guid;GetConstant(databook, guid)— получить прикладную константу по guid;GetStringValue(constant)— получить строковое значение;GetIntegerValue(constant)— получить целочисленное значение;GetDoubleValue(constant)— получить вещественное значение;GetIdentifierValue(constant)— получить идентификатор;GetDateValue(constant)— получить дату;GetBoolValue(constant)— получить логическое значение;GetStringListValue(constant)— получить список строк, сформированный из строкового значения константы, в котором элементы заданы через разделитель (по умолчанию — запятая);GetIntegerListValue(constant)— получить список целых чисел, сформированный из строкового значения константы, в котором элементы заданы через разделитель (по умолчанию — запятая);
Note
Замечания и пожелания по развитию шаблона разработки фиксируйте через Issues. При оформлении ошибки опишите сценарий для воспроизведения. Для пожеланий приведите обоснование для описываемых изменений - частоту использования, бизнес-ценность, риски и/или эффект от реализации.
Внимание! Изменения будут вноситься только в новые версии.
-
Создание системных констант в инициализации модуля AppliedConstants.
Для создания системных констант и групп предусмотрены точки расширения инициализации модуля AppliedConstants. Для этого в модуле определены две функции инициализации:
CreateConstantsGroups()— создание системных групп прикладных констант;CreateConstants()— создание системных констант всех поддерживаемых типов.
В функциях реализуйте логику создания системных констант и групп констант, используя серверные функции модуля AppliedConstants (
CreateConstantsGroup,CreateConstant,CreatePasswordConstant).Рекомендации:
- Создавайте все системные группы и константы в функциях инициализации модуля AppliedConstants.
- Храните имена констант, их Guid и значения по умолчанию в константах модуля AppliedConstants.
- Используйте GUID в нижнем регистре.
Пример структуры для описания метаданных системных констант:
[Public]
public static class ConstantsSetting
{
/// <summary>
/// Пример константы с целочисленным значением.
/// </summary>
[Public]
public static class ExampleConstantOne
{
[Public]
public const string Guid = "c81a9c54-7edf-428e-bb2e-4d29c6f408d7";
[Public]
public const string Name = "АО. Максимальное число переповторов";
[Public]
public const string Description = "Определяет максимальное количество повторных попыток выполнения асинхронного обработчика.";
[Public]
public const int DefaultValue = 10;
}
/// <summary>
/// Пример константы со списком чисел.
/// </summary>
[Public]
public static class ExampleConstantTwo
{
[Public]
public const string Guid = "f32ebf01-02d3-4e43-9f7a-cf649a68c1c4";
[Public]
public const string Name = "Интеграция. Список кодов успешных статусов";
[Public]
public const string Description = "Содержит перечень HTTP-статусов, которые считаются успешными при взаимодействии с внешними системами. Значения должны быть указаны через запятую.";
[Public]
public const string DefaultValue = "200,201,204";
}
}-
Добавление собственных типов констант.
Для добавления нового типа константы требуется:
- добавить новое значение перечисления для свойства Тип (Type) в справочнике Прикладные константы (ConstantsSetting);
- добавить новое свойство для хранения значения в справочник Прикладные константы (ConstantsSetting). Отображаемое наименование поля - Значение (Value);
- вынести поле на форму в то же место, куда вынесены остальные поля значений других типов. Номер колонки - 1, Номер строки - 3;
- настроить видимость поля в разделяемой функции
SetPropertiesState(); - добавить серверные функции для создания и получения значения нового типа константы;
- при необходимости добавить функцию вычисляемого выражения для NoCode.
-
Серверные функции для работы с константами в коде являются виртуальными, поэтому при необходимости их можно переопределить и реализовать собственную логику.
Для работы требуется установленный Directum RX версии 25.2 и выше.
- Склонировать репозиторий rx-template-settings в папку.
- Указать в config.yml в разделе DevelopmentStudio:
GIT_ROOT_DIRECTORY: '<Папка из п.1>'
REPOSITORIES:
repository:
- '@folderName': 'rx-template-settings'
'@solutionType': 'Work'
'@url': https://github.com/DirectumCompany/rx-template-settings'
- '@folderName': 'base'
'@solutionType': 'Base'
'@url': ''Возможные варианты:
A. Fork репозитория
- Сделать fork репозитория rx-template-settings для своей учетной записи.
- Склонировать созданный в п. 1 репозиторий в папку.
- Указать в config.yml в разделе DevelopmentStudio:
GIT_ROOT_DIRECTORY: '<Папка из п.1>'
REPOSITORIES:
repository:
- '@folderName': 'rx-template-settings'
'@solutionType': 'Work'
'@url': https://github.com/DirectumCompany/rx-template-settings'
- '@folderName': 'base'
'@solutionType': 'Base'
'@url': ''B. Подключение на базовый слой
Вариант не рекомендуется, так как при выходе версии шаблона разработки не гарантируется обратная совместимость.
- Склонировать репозиторий rx-template-settings в папку.
- Указать в config.yml в разделе DevelopmentStudio:
GIT_ROOT_DIRECTORY: '<Папка из п.1>'
REPOSITORIES:
repository:
- '@folderName': 'rx-template-settings'
'@solutionType': 'Base'
'@url': https://github.com/DirectumCompany/rx-template-settings'
- '@folderName': 'base'
'@solutionType': 'Base'
'@url': ''C. Копирование репозитория в систему контроля версий.
Рекомендуемый вариант для проектов внедрения.
- В системе контроля версий с поддержкой git создать новый репозиторий.
- Склонировать репозиторий rx-template-settings в папку с ключом
--mirror. - Перейти в папку из п. 2.
- Импортировать клонированный репозиторий в систему контроля версий командой: `git push –mirror https://github.com/DirectumCompany/rx-template-settings'