Взаимодействие алгоритмов модификации
Для обработки действий по добавлению, изменению и удалению каких-либо объектов существуют специальные алгоритмы, которые мы объединили под общим названием - алгоритмы модификации. При этом для объектов аналитики и журнальных операций, помимо алгоритмов, выполняющихся на клиентском месте, существуют серверные алгоритмы модификации, предназначенные для поддержания целостности прикладных данных. К примеру, в рамках прикладной разработки может возникнуть необходимость каких-то дополнительных действий, выполняющихся при модификации объекта: например, при добавлении нового объекта необходимо проверять его соответствие определенным критериям, изменение объекта должно повлечь за собой автоматическое изменение другого объекта, и т.п.
Для каждого действия по модификации объекта или операции существует один клиентский и два серверных алгоритма. Обработка действия должна происходить по следующей схеме: клиентский алгоритм передает серверному алгоритму модифицируемый объект или операцию. Серверный алгоритм, который условно можно назвать алгоритмом до модификации начинает транзакцию и после проверки прав доступа, пути к объекту, и т.п производит действие по модификации. Далее запускается алгоритм после модификации, который также принимает модифицируемый объект или операцию. Алгоритм после модификации может производить какие-то дополнительные действия, связанные с объектом: например, вносить изменения в другие объекты. По окончании выполнения этого алгоритма транзакция завершается. Таким образом, клиентский алгоритм отвечает за вызов диалога, а серверные алгоритмы производит обработку данных. Запущенный клиентский алгоритм ожидает результата выполнения серверных алгоритмов модификации. В случае ошибки при выполнении алгоритма поддерживается корректный откат транзакции с отменой всех произведенных действий. Поддерживается сквозная передача параметров между алгоритмами: помимо модифицируемого объекта может передаваться любой набор параметров, причем каждый алгоритм может изменять эти параметры. В клиентском алгоритме, помимо начального набора параметров, определяются правила передачи этих параметров: нужно ли передавать параметры алгоритму до модификации, алгоритму после модификации, нужно ли передавать параметры обратно в вызвавший алгоритм - за это отвечает параметр типа МОДИФ_ПАРАМ.
Клиентские алгоритмы модификации должны храниться локально на клиентском месте, ссылка на эти алгоритмы задается в менеджере настроек отображения. Серверные алгоритмы модификации хранятся в базе данных - в качестве свойств объектов аналитики. При этом серверные алгоритмы модификации объектов аналитики должны храниться как свойства с предустановленными именами у корневого объекта, для потомков которого они выполняются. Использовать предустановленные имена свойств для серверных алгоритмов модификации объектов аналитики обязательно - иначе они не будут интерпретироваться как алгоритмы модификации. Предустановленные имена можно изменить в настройках сервера приложений (Команды администратора - Сервер - Редактор конфигурации в программе Radmin). Серверные алгоритмы модификации журнальных операций могут храниться как свойства любых объектов аналитики, а ссылка на них задается в редакторе типов операций.
В локальной версии платформы реализовать поддержку целостности данных возможно и без использования серверных алгоритмов (поскольку клиентская и серверная части представляют собой одну программу, и взаимодействие с базой данных происходит без участия серверного приложения). Однако из соображений масштабируемости все-же рекомендуется использовать серверные алгоритмы модификации: тогда при переходе на сетевую версию не потребуется глобальной переделки прикладной программы. Если какой-то из алгоритмов отсутствует - обработка производится стандартным образом, то есть обработка действия по модификации не требует обязательного наличия трех алгоритмов: клиентского и двух серверных. Например, сохранение связей объекта или операции реализуется в серверном алгоритме после_модификации, если требуется только перекрыть стандартный диалог - достаточно клиентского алгоритма, и т.д.