Описание работы с метаданными для синхронизации
Glossary Item Box
Общее описание
Для синхронизации используется вспомогательная таблица метаданных SysSyncMetaData, которая, по сути, является таблицей развязки между внешним RemoteItem (элемент синхронизации во внешнем хранилище) и LocalItem (элемент синхронизации в Creatio). Каждая строка таблицы представляется в системе экземпляром класса SysSyncMetaData. Свойства класса SysSyncMetaData представлены в таблице 1.
Табл. 1. — Свойства класса SysSyncMetaData
Параметр | Тип | Описание |
---|---|---|
RemoteId | String | Идентификатор элемента во внешнем хранилище. |
SyncSchemaName | String | Название схемы синхронизируемого элемента. |
LocalId | Guid | Идентификатор элемента в локальном хранилище. |
IsLocalDeleted | Boolean | Указывает, удален ли элемент из локального хранилища со времени последней синхронизации. Параметр актуализируется перед синхронизацией и при применении изменений в локальном хранилище. На основе его значения при выборке измененных элементов из локального хранилища устанавливается состояние SyncEntity. Устарел, оставлен для совместимости. На текущий момент используется LocalState. |
IsRemoteDeleted | Boolean | Указывает, удален ли элемент из внешнего хранилища со времени последней синхронизации. Устарел, оставлен для совместимости. На текущий момент используется RemoteState. |
Version | Date | Дата последнего выполненного изменения элемента (дата модификации). |
ModifiedInStoreId | Guid | Id хранилища, в котором выполнено последнее изменение. |
CreatedInStoreId | Guid | Id хранилища, в котором создан элемент синхронизации. |
RemoteStoreId | Guid | Идентификатор внешнего хранилища, с которым был синхронизирован элемент. |
ExtraParameters | String | Дополнительные параметры для элемента. |
LocalState | Int | Состояние элемента в локальном хранилище (0 — не изменен, 1 — новый, 2 — изменен, 3 — удален). |
RemoteState | Int | Состояние элемента во внешнем хранилище (0 — не изменен, 1 — новый, 2 — изменен, 3 — удален). |
В метаданных хранится информация только об уже синхронизированных элементах.
Для одного элемента синхронизации может быть несколько записей в таблице метаданных — по одной для каждого объекта приложения, включенного в элемент синхронизации.
Активность и участники — это один элемент синхронизации, но в метаданных будет содержаться одна запись для активности и по одной записи для каждого участника.
На текущий момент только один объект из внешнего хранилища преобразуется в несколько объектов Creatio, как показано на рисунке 1. Вариант, когда допустимо соответствие многие ко многим (несколько внешних объектов соответствуют нескольким локальным объектам, и эта совокупность является одним элементом синхронизации), не поддерживается.
Рис. 1. — Схема преобразования объекта внешнего хранилища в объекты локального
В системе метаданные для одного элемента синхронизации представлены объектом класса ItemMetadata (коллекция элементов SysSyncMetaData). А управление метаданными осуществляется через класс, реализующий интерфейс IReplicaMetadata. Экземпляр класса, реализующий интерфейс IReplicaMetadata, создается через класс-фабрику MetaDataStore для конкретного хранилища.
Класс MetaDataStore
Класс-фабрика создает конкретный экземпляр класса, который реализует интерфейс IReplicaMetadata для хранилища. Методы класса представлены в таблице 2.
Табл. 2. — Методы класса MetaDataStore
Метод | Тип возвращаемого значения | Описание |
---|---|---|
GetReplicaMetadata(Guid localStoreId, Guid remoteStoreId) | IreplicaMetadata | Создает экземпляр класса, реализующий интерфейс IReplicaMetadata для конкретного хранилища. |
Класс ItemMetadata
Этот класс является неделимым объектом метаданных синхронизации. Содержит набор метаданных для каждой сущности синхронизации (коллекция элементов SysSyncMetadata). Свойства класса представлены в таблице 3.
Табл. 3. — Свойства класса ItemMetaData
Параметр | Тип | Описание |
---|---|---|
RemoteId | String | Идентификатор элемента во внешнем хранилище. |
RemoteItemName | String | Наименование элемента во внешнем хранилище. |
Интерфейс IReplicaMetadata
Класс, реализующий интерфейс IReplicaMetadata, инкапсулирует метаданные синхронизации. Реализует работу с объектами ItemMetadata. Свойства интерфейса представлены в таблице 4, а методы — в таблице 5.
Табл. 4. — Свойства интерфейса IReplicaMetaData
Параметр | Тип | Описание |
---|---|---|
RemoteStoreId | Guid | Идентификатор внешнего хранилища. |
LocalStoreId | Guid | Идентификатор локального хранилища. |
Табл. 5. — Методы интерфейса IReplicaMetaData
Метод | Тип возвращаемого значения | Описание |
---|---|---|
FindItemStore (string remoteItemId) | ItemMetadata | Находит и возвращает объект метаданных синхронизации ItemMetadata по идентификатору во внешнем хранилище remoteItemId. |
UpdateItemMetadata (ItemMetadata oldItemMetaDatas, IRemoteItem remoteItem, LocalItem localItem, bool changesToBpm) | Void | Обновляет метаданные после синхронизации. |
EnumerateItemsWithChangesInBpm (SyncContext context) | IEnumerable<ItemMetadata> | Возвращает коллекцию объектов ItemMetadata, измененных после последней синхронизации в Creatio и не обработанных в процессе текущего сеанса синхронизации. |
CollectChangesInSyncedEntities (UserConnection userConnection, string schemaName, DateTime lastSyncVersion) | Void | Обновляет метаданные для элементов синхронизации, измененных в Creatio. Если элемент был изменен в приложении после последней синхронизации SysMetadata, колонка Version будет заполнена датой модификации элемента. Для актуализации метаданных используется хранимая процедура ActualizeSysSyncMetaData. |
CollectNewDetailsForSyncedEntities (UserConnection userConnection, DetailEntityConfig detailEntityConfig, string remoteItemName) | Void | Создает новые записи в таблице SysSyncMetaData для деталей элемента синхронизации. |
TryResolveRemoteId (Guid localId, out string remoteId) | Boolean | Возвращает идентификатор элемента во внешнем хранилище remoteId из метаданных по уникальному идентификатору элемента синхронизации в Creatio localId. Если элемент помечен как удаленный, то remoteId возращен не будет и метод возвратит false. |
TryResolveExtraParameters (Guid localId, out string extraParameters) | Boolean | Возвращает дополнительные параметры extraParameters для элемента синхронизации из метаданных по localId. Если extraParameters не будут найдены, метод вернет false. |