Сервис синхронизации Sync Engine
Glossary Item Box
В Creatio реализован механизм синхронизации с внешними хранилищами данных (Sync Engine), который позволяет создавать, изменять и удалять Entity в системе на основании данных из внешних систем и экспортировать данные во внешние системы.
Процесс синхронизации осуществляется с помощью класса SyncAgent, который реализован в пространстве имен Terrasoft.Sync ядра приложения.
Схема
Классы, задействованные в механизме синхронизации
- Агент синхронизации (SyncAgent) — класс с одним публичным методом Synchronize, который запускает синхронизацию между переданными ему хранилищами данных.
- Контекст синхронизации (SyncContext) — класс, представляющий собой агрегацию провайдеров и метаданных для работы SyncAgent.
- Хранилище — конкретный репозиторий синхронизируемых данных.
Локальное хранилище (LocalProvider) — позволяет работать с LocalItem в Creatio.
Внешнее хранилище (RemoteProvider) — внешний сервис или приложение, данные из которого синхронизируются с Creatio. - Элемент синхронизации (SyncItem) — множество объектов из внешнего и локального хранилища, между которыми устанавливается однозначное соответствие.
Элемент синхронизации внешнего хранилища (RemoteItem) — представляет собой набор данных из внешнего хранилища, который синхронизируется атомарно. Может состоять из одной или нескольких сущностей (записей) внешнего хранилища.
Элемент синхронизации (SyncEntity) — является оберткой над конкретными Entity. SyncEntity необходим для работы с Entity как c синхронизируемым объектом, так и с состоянием и действием, которое с этим Entity необходимо произвести (добавить, удалить, изменить).
Элемент синхронизации (LocalItem) — один или несколько объектов из Creatio, которые синхронизируются с внешним хранилищем как одно целое. Элемент синхронизации из внешнего хранилища, конвертированный в сущности LocalItem, в свою очередь, содержит набор экземпляров класса SyncEntity. - Таблица метаданных SysSyncMetadata — содержит служебную информацию синхронизируемых элементов, по сути является таблицей развязки RemoteItem-LocalItem. Описание метаданных можно посмотреть в статье "Описание работы с метаданными для синхронизации".
Общий алгоритм синхронизации
Перед началом синхронизации необходимо создать экземпляр SyncAgent и контекст синхронизации SyncContext, после этого актуализировать записи в таблице метаданных данными из Creatio. Для этого нужно вызвать метод CollectChangesInSyncedEntities класса, реализующего интерфейс IReplicaMetadata.
Общий алгоритм актуализации записей метаданных следующий:
- Если какая-либо ранее синхронизированная сущность в Creatio была изменена с момента последней синхронизации, значит у соответствующей записи в метаданных изменяется дата модификации и свойству LocalState устанавливается значение "Изменен", а в качестве источника модификации устанавливается идентификатор LocalStore.
- Если синхронизированная сущность в Creatio была удалена после последней синхронизации — у соответствующей записи в метаданных устанавливается LocalState "Удален".
- Если для сущности в Creatio нет соответствующей записи в метаданных — она игнорируется.
Далее начинается процесс синхронизации хранилищ:
- Поочередно запрашиваются все изменения из внешнего хранилища.
- Для каждого элемента внешнего хранилища необходимо получить метаданные.
Возможны следующие варианты:
- Если метаданные получить не удалось — это новый элемент, который конвертируется в элемент Creatio и сохраняется. Для заполнения объекта синхронизации, в приложении вызывается метод FillLocalItem у конкретного экземпляра RemoteItem. Также сохраняется запись в метаданных (Id внешнего хранилища, Id элемента во внешнем хранилище, дата создания и модификации устанавливается текущей, источник создания и модификации — внешнее хранилище).
- Если получены метаданные, значит этот элемент уже был синхронизирован с Creatio. Необходимо перейти к решению конфликта версий. По умолчанию приоритет имеют последние изменения в приложении или внешнем хранилище (реализация в RemoteProvider).
- Актуализируются метаданные для текущей пары элементов синхронизации.
После перебора всех измененных элементов из внешнего хранилища, в метаданных (в интервале между прошлой и текущей синхронизациями) остались элементы, которые были изменены в Creatio, но не были изменены во внешнем хранилище.
- Необходимо получить измененные в Creatio элементы в промежутке между прошлой синхронизацией и началом текущей синхронизации.
- Применяются изменения во внешнем хранилище.
- Необходимо обновить дату модификации элементов в метаданных (источник изменения Creatio).
После этого необходимо новые, еще не синхронизированные записи из Creatio добавить во внешнее хранилище, а также добавить метаданные для новых элементов.
Совместимость с продуктами Creatio
Сервис синхронизации Sync Engine совместим со всеми продуктами Creatio.
Варианты развертывания
Сервис синхронизации Sync Engine реализован в ядре приложения и не требует дополнительных настроек.
Смотрите также