
Привет, Хабр!
Меня зовут Илья Вязников, я инженер сопровождения СОФРОС. Я делюсь практическими приёмами и полезными настройками платформы.
В интеграционных проектах на DATAREON довольно быстро появляется одна и та же проблема: код бизнес-алгоритмов разрастается, а повторяющаяся логика начинает копироваться между процессами.
Нормализация GUID, очистка строк, проверки на пустые значения, преобразование форматов, парсинг JSON — сначала это несколько строк кода, потом десятки одинаковых фрагментов в разных схемах обработки. В результате:
-
Алгоритмы становятся сложнее читать;
-
Исправления приходится вносить в нескольких местах;
-
Возрастает риск, что часть процессов останется со старой логикой.
В DATAREON Platform эту проблему можно решить через программные модули — механизм для хранения и повторного использования собственных функций на C#.
В статье покажу:
-
Как создать программный модуль;
-
Как добавить в него собственную функцию;
-
Как вызывать её из алгоритмов;
-
Какие сценарии особенно удобно выносить в модули на практике.
Зачем это нужно:
-
Повышение читаемости и поддерживаемости кода.
-
Централизованное хранение бизнес-логики.
-
Упрощение доработок — меняешь функцию в одном месте, а не в десятках алгоритмов.
В качестве примера разберём функцию нормализации GUID, которая часто встречается в интеграциях между разными системами.
Шаг 1. Создание программного модуля
-
В Центре настройки перейдите в раздел: Обработка данных → Схемы обработки.
-
Нажмите «Добавить»(+) → Программный модуль.

-
На вкладке Основные заполните:
-
Название: PM_ПрограммныйМодуль_Пример (или любое удобное вам)
-
Имя: PM_ПрограммныйМодуль_Пример

-
-
Перейдите на вкладку Код и добавьте нужные функции. Ниже представлен пример одной функции.
Для примера реализуем функцию нормализации 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();}Можно добавлять сколько угодно функций в один модуль.

-
-
Сохраните и примените изменения.
Шаг 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($"После вызова функции: {Строка}");}
Ожидаемый результат
После выполнения алгоритма в логах вы увидите корректную нормализацию значений, например:

Функция становится доступна во всех бизнес-процессах и алгоритмах системы.
Полезные советы:
-
Не превращайте модуль в «свалку функций» — Лучше разделять по зонам ответственности.
-
Выносите только повторяемую логику — Если код используется один раз, модуль может быть избыточен.
-
Делайте функции максимально детерминированными — Без скрытых побочных эффектов и зависимости от внешнего состояния.
-
Используйте единый нейминг — Это сильно упрощает поддержку больших проектов.
Чаще всего в модули удобно выносить:
-
Работу с GUID;
-
Очистку и нормализацию строк;
-
Преобразование дат;
-
Парсинг JSON/XML;
-
Формирование кодов, артикулов и идентификаторов;
-
Общие проверки входных данных.
Заключение
Программные модули в DATAREON Platform позволяют сделать алгоритмы компактнее, читаемее и проще в сопровождении.
Если в проекте появляется повторяющийся код хотя бы в нескольких процессах, это уже хороший сигнал вынести его в отдельную функцию и переиспользовать централизованно.
На практике такой подход сокращает количество ошибок при доработках и ускоряет поддержку интеграций.
А какие функции вы чаще всего выносите в программные модули?
Для тех кто хочет подробнее ознакомиться с функционалом описанным в статье — полезные ссылки:
ссылка на оригинал статьи https://habr.com/ru/articles/1039424/