Creatio development guide
PDF
Это документация Creatio версии 7.16.0. Мы рекомендуем использовать новую версию документации.

Сервис синхронизации 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.

Общий алгоритм актуализации записей метаданных следующий:

  1. Если какая-либо ранее синхронизированная сущность в Creatio была изменена с момента последней синхронизации, значит у соответствующей записи в метаданных изменяется дата модификации и свойству LocalState устанавливается значение "Изменен", а в качестве источника модификации устанавливается идентификатор LocalStore.
  2. Если синхронизированная сущность в Creatio была удалена после последней синхронизации — у соответствующей записи в метаданных устанавливается LocalState "Удален".
  3. Если для сущности в Creatio нет соответствующей записи в метаданных — она игнорируется.

Далее начинается процесс синхронизации хранилищ:

  1. Поочередно запрашиваются все изменения из внешнего хранилища.
  2. Для каждого элемента внешнего хранилища необходимо получить метаданные.

Возможны следующие варианты: 

  1. Если метаданные получить не удалось — это новый элемент, который конвертируется в элемент Creatio и сохраняется. Для заполнения объекта синхронизации, в приложении вызывается метод FillLocalItem у конкретного экземпляра RemoteItem. Также сохраняется запись в метаданных (Id внешнего хранилища, Id элемента во внешнем хранилище, дата создания и модификации устанавливается текущей, источник создания и модификации — внешнее хранилище).
  2. Если получены метаданные, значит этот элемент уже был синхронизирован с Creatio. Необходимо перейти к решению конфликта версий. По умолчанию приоритет имеют последние изменения в приложении или внешнем хранилище (реализация в RemoteProvider).
  3. Актуализируются метаданные для текущей пары элементов синхронизации.

После перебора всех измененных элементов из внешнего хранилища, в метаданных (в интервале между прошлой и текущей синхронизациями) остались элементы, которые были изменены в Creatio, но не были изменены во внешнем хранилище.

  1. Необходимо получить измененные в Creatio элементы в промежутке между прошлой синхронизацией и началом текущей синхронизации.
  2. Применяются изменения во внешнем хранилище.
  3. Необходимо обновить дату модификации элементов в метаданных (источник изменения Creatio).

После этого необходимо новые, еще не синхронизированные записи из Creatio добавить во внешнее хранилище, а также добавить метаданные для новых элементов.

Совместимость с продуктами Creatio

Сервис синхронизации Sync Engine совместим со всеми продуктами Creatio.

Варианты развертывания

Сервис синхронизации Sync Engine реализован в ядре приложения и не требует дополнительных настроек.

Смотрите также

© Terrasoft 2002-2020.

Был ли данный материал полезен?

Как можно улучшить эту статью?