Программные модули в DATAREON Platform: выносим повторяющуюся логику в C# функции

от автора

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

Меня зовут Илья Вязников, я инженер сопровождения СОФРОС. Я делюсь практическими приёмами и полезными настройками платформы.

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

Нормализация GUID, очистка строк, проверки на пустые значения, преобразование форматов, парсинг JSON — сначала это несколько строк кода, потом десятки одинаковых фрагментов в разных схемах обработки. В результате:

  • Алгоритмы становятся сложнее читать;

  • Исправления приходится вносить в нескольких местах;

  • Возрастает риск, что часть процессов останется со старой логикой.

В DATAREON Platform эту проблему можно решить через программные модули — механизм для хранения и повторного использования собственных функций на C#.

В статье покажу:

  • Как создать программный модуль;

  • Как добавить в него собственную функцию;

  • Как вызывать её из алгоритмов;

  • Какие сценарии особенно удобно выносить в модули на практике.

Зачем это нужно:

  • Повышение читаемости и поддерживаемости кода.

  • Централизованное хранение бизнес-логики.

  • Упрощение доработок — меняешь функцию в одном месте, а не в десятках алгоритмов.

В качестве примера разберём функцию нормализации GUID, которая часто встречается в интеграциях между разными системами. 

Шаг 1. Создание программного модуля

  1. В Центре настройки перейдите в раздел: Обработка данных → Схемы обработки.

  2. Нажмите «Добавить»(+) → Программный модуль.

  3. На вкладке Основные заполните:

    • Название: PM_ПрограммныйМодуль_Пример (или любое удобное вам)

    • Имя: PM_ПрограммныйМодуль_Пример

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

    Для примера реализуем функцию нормализации GUID. Она:

    • возвращает пустой GUID для null и пустых значений;

    • приводит корректные GUID к единому формату;

    • удаляет лишние пробелы.

    public static string НормализоватьГуид(object value){    if (value == null)    {        return Guid.Empty.ToString("D");    }    string text = value.ToString();    if (Guid.TryParse(text, out Guid guid))    {        return guid.ToString("D");    }    return string.IsNullOrWhiteSpace(text) ? Guid.Empty.ToString("D") : text.Trim();}

    Можно добавлять сколько угодно функций в один модуль.

  5. Сохраните и примените изменения.

Шаг 2. Вызов функции в алгоритме

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

Для вызова используется специальный синтаксис:

{ИмяМодуля}.{НазваниеФункции}(параметры);

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

var testValues = new object[]{    null,    "",    "   ",    "abc",    "  abc  ",    "6F9619FF-8B86-D011-B42D-00C04FC964FF",    "{6F9619FF-8B86-D011-B42D-00C04FC964FF}",    "invalid-guid",    123,    Guid.Empty};foreach (var value in testValues){    Строка = value?.ToString();    Logger.Info($"До вызова функции: {Строка}");    Строка = PM_ПрограммныйМодуль_Пример.НормализоватьГуид(value);    Logger.Info($"После вызова функции: {Строка}");}

Ожидаемый результат

После выполнения алгоритма в логах вы увидите корректную нормализацию значений, например:

Функция становится доступна во всех бизнес-процессах и алгоритмах системы.

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

  1. Не превращайте модуль в «свалку функций» — Лучше разделять по зонам ответственности.

  2. Выносите только повторяемую логику — Если код используется один раз, модуль может быть избыточен.

  3. Делайте функции максимально детерминированными — Без скрытых побочных эффектов и зависимости от внешнего состояния.

  4. Используйте единый нейминг — Это сильно упрощает поддержку больших проектов.

Чаще всего в модули удобно выносить:

  • Работу с GUID;

  • Очистку и нормализацию строк;

  • Преобразование дат;

  • Парсинг JSON/XML;

  • Формирование кодов, артикулов и идентификаторов;

  • Общие проверки входных данных.

Заключение

Программные модули в DATAREON Platform позволяют сделать алгоритмы компактнее, читаемее и проще в сопровождении.

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

На практике такой подход сокращает количество ошибок при доработках и ускоряет поддержку интеграций.

А какие функции вы чаще всего выносите в программные модули?

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

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