Механизм синхронизации Sync Engine

Сложный

Sync Engine — механизм синхронизации Creatio с внешними хранилищами данных. Внешнее хранилище — внешний сервис или приложение, данные из которого синхронизируются с Creatio.

Назначение Sync Engine:

  • Импорт данных из внешних хранилищ. Подразумевает создание, изменение и удаление Entity в приложении на основе полученных данных.
  • Экспорт данных во внешние хранилища.

Классы механизма синхронизации 

Классы, которые реализуют логику работы механизма синхронизации Sync Engine:

  • Terrasoft.Sync.SyncAgent — агент синхронизации. Метод Synchronize() класса SyncAgent запускает синхронизацию между указанными хранилищами данных.
  • Terrasoft.Sync.SyncContext — контекст синхронизации. Представляет собой агрегацию провайдеров и метаданных для работы класса SyncAgent.
  • Terrasoft.Sync.LocalProvider — работа с хранилищем Creatio. Позволяет работать с классом LocalItem.
  • Terrasoft.Sync.LocalItem — элемент синхронизации из хранилища Creatio. Представляет собой один или несколько объектов Creatio, которые, как одно целое, синхронизируются с внешним хранилищем. Элемент синхронизации из внешнего хранилища, который конвертирован в сущность LocalItem. Содержит набор экземпляров класса SyncEntity.
  • Terrasoft.Sync.RemoteProvider — работа с внешним хранилищем.
  • Terrasoft.Sync.RemoteItem — элемент синхронизации внешнего хранилища. Представляет собой набор данных из внешнего хранилища, который синхронизируется атомарно. Может состоять из одной или нескольких сущностей (записей) внешнего хранилища.
  • Terrasoft.Sync.SyncEntity — элемент синхронизации Creatio. Является оберткой над отдельными Entity. Позволяет работать с Entity, как с синхронизируемым объектом. Задает состояние и действие (добавить, удалить, изменить), которое необходимо выполнить с Entity.

Служебная информация синхронизированных элементов содержится в таблице [SysSyncMetaData] базы данных. По сути, таблица разграничивает синхронизацию из хранилищ Creatio и внешних хранилищ. Таблица может содержать несколько записей для одного элемента синхронизации — по одной для каждого объекта приложения, который включен в элемент синхронизации.

Метаданные для одного элемента синхронизации в приложении представлены объектом класса ItemMetadata (коллекция элементов из таблицы [SysSyncMetaData]). Управление метаданными осуществляется через класс, который реализует интерфейс IReplicaMetadata. Экземпляр класса создается для конкретного хранилища через класс-фабрику MetaDataStore.

Алгоритм выполнения синхронизации 

  1. Синхронизируйте измененные элементы.

    1. Создайте экземпляр класса SyncAgent.
    2. Создайте контекст синхронизации SyncContext.
    3. Актуализируйте записи в таблице метаданных [SysSyncMetaData] данными из Creatio. Для этого вызовите метод CollectChangesInSyncedEntities() класса ReplicaMetadata, который реализует интерфейс IReplicaMetadata. В процессе актуализации записей возможны различные варианты актуализации записей.

    После этого запускается синхронизация хранилищ.

    Действия, которые выполняются во время синхронизации хранилищ:

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

    В процессе синхронизации хранилищ возможны различные варианты.

  2. Синхронизируйте новые элементы.

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

Варианты актуализации записей:

  • После последней синхронизации в Creatio изменена ранее синхронизированная сущность:

    • В метаданных соответствующей записи изменяется дата модификации.
    • В колонку [LocalState] таблицы [SysSyncMetaData] устанавливается значение "Изменен".
    • В качестве источника модификации устанавливается идентификатор LocalStore.
  • После последней синхронизации в Creatio удалена синхронизируемая сущность. В этом случае в колонку [LocalState] соответствующей записи таблицы [SysSyncMetaData] устанавливается значение "Удален".
  • Для синхронизируемой сущности в Creatio отсутствует соответствующая запись в таблице [SysSyncMetaData]. В этом случае сущность игнорируется.

Варианты синхронизации хранилищ:

  • Не удалось получить метаданные (синхронизируемый элемент является новым).

    • Элемент конвертируется в элемент Creatio. Для заполнения объекта синхронизации у конкретного экземпляра RemoteItem приложения вызывается метод FillLocalItem().
    • Запись сохраняется в метаданных. При сохранении в таблице [SysSyncMetaData] указываются идентификаторы внешнего хранилища и элемента во внешнем хранилище, в качестве даты создания и даты модификации устанавливается текущая дата, в качестве источника создания и источника модификации устанавливается внешнее хранилище.
  • Метаданные получены (синхронизируемый элемент уже синхронизирован с Creatio) В этом случае выполняется переход к решению конфликта версий. По умолчанию приоритет имеют последние изменения в приложении или внешнем хранилище (реализация содержится в классе RemoteProvider).
  • Актуализируются метаданные для текущей пары элементов синхронизации.

Пример выполнения синхронизации 

Рассмотрим работу синхронизации на примере активности и ее участников, которые синхронизируются в одну задачу Google-календаря.

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

LocalItem — элемент синхронизации, который содержит активность (объект Activity) и ее участников (коллекция объектов SyncEntity). Представляет собой коллекцию объектов (SyncEntity), в которые конвертируется задача Google.

RemoteItem — задача Google, которую получило приложение Creatio от внешней системы.

Несмотря на то, что активность и ее участники — один элемент синхронизации, в метаданных содержатся одна запись для активности и по одной записи для каждого участника.

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

Класс SyncAgent
Легкий

Пространство имен Terrasoft.Sync.

Класс Terrasoft.Sync.SyncAgent реализует агент синхронизации. Позволяет синхронизировать данные между хранилищем Creatio и внешним хранилищем. Агент не решает конфликты синхронизации при их обнаружении. При обнаружении конфликта синхронизации агент перенаправляет его в IConflictResolver, который возвращает объект SyncConflictResolution. На основе этого объекта агент выполняет необходимые действия.

На заметку. Полный перечень конструкторов, свойств и методов класса SyncAgent, его родительских классов, а также реализуемых им интерфейсов, можно найти в Библиотеке .NET классов.

Конструкторы 

SyncAgent(UserConnection userConnection, LocalProvider localProvider, RemoteProvider remoteProvider)

Создает экземпляр агента синхронизации.

Параметры
userConnection Пользовательское подключение.
localProvider Хранилище Creatio.
remoteProvider Внешнее хранилище.
SyncAgent(SyncContext syncContext)

Контекст синхронизации.

Параметры
syncContext Контекст синхронизации.

Свойства 

LocalProvider LocalProvider

Объект, который позволяет получить или применить изменения в хранилище Creatio.

RemoteProvider RemoteProvider

Объект, который позволяет получить или применить изменения во внешнем хранилище.

ReplicaMetadata IReplicaMetadata

Интерфейс, который позволяет управлять метаданными синхронизируемых элементов.

SyncContext SyncContext

Контекст синхронизации.

Методы 

void Synchronize()

Запускает процесс синхронизации.

Класс SyncContext
Сложный

Пространство имен Terrasoft.Sync.

Класс Terrasoft.Sync.SyncContext реализует контекст синхронизации. Представляет собой агрегацию провайдеров и метаданных для работы класса SyncAgent.

На заметку. Полный перечень свойств и методов класса SyncContext, его родительских классов, а также реализуемых им интерфейсов, можно найти в Библиотеке .NET классов.

Свойства 

Logger ISyncLogger

Объект, который позволяет сохранять сообщения в лог интеграции.

MsgLogger SyncMsgLogger

Логгер сообщений для механизма синхронизации.

LocalProvider LocalProvider

Объект, который позволяет получить или применить изменения в хранилище Creatio. Позволяет работать с LocalItem.

RemoteProvider RemoteProvider

Объект, который позволяет получить или применить изменения во внешнем хранилище.

UserConnection UserConnection

Пользовательское подключение.

LastSyncVersion DateTime

Дата и время последней синхронизации (UTC).

CurrentSyncStartVersion DateTime

Текущие дата и время синхронизации (UTC). Устанавливается после обновления метаданных.

Методы 

void SetLookupColumnValue(Entity entity, string lookupColumnName, string lookupDisplayValue)

Устанавливает значение колонки поиска сущности.

Параметры
entity Экземпляр класса Terrasoft.Core.Entities.Entity.
lookupColumnName Имя справочной колонки.
lookupDisplayValue Отображаемое значение справочной колонки.
void SetLookupColumnValue(Entity entity, string lookupColumnName, string lookupDisplayValue, string lookupDisplayColumnName)

Устанавливает значение колонки поиска сущности.

Параметры
entity Экземпляр класса Terrasoft.Core.Entities.Entity.
lookupColumnName Имя справочной колонки.
lookupDisplayValue Отображаемое значение справочной колонки.
lookupDisplayColumnName Отображаемое имя справочной колонки.
void LogInfo(SyncAction operation, SyncDirection direction, string format, params object[] args)

Записывает в журнал информационное сообщение.

Параметры
operation Действие объекта синхронизации.
direction Направление синхронизации.
format Формат.
args Параметры формата.
void LogError(SyncAction operation, SyncDirection direction, string format, params object[] args)

Записывает в журнал сообщение об ошибке.

Параметры
operation Действие объекта синхронизации.
direction Направление синхронизации.
format Формат.
args Параметры формата.
void LogError(SyncAction operation, SyncDirection direction, string format, Exception exception, params object[] args)

Записывает в журнал сообщение об ошибке.

Параметры
operation Действие объекта синхронизации.
direction Направление синхронизации.
format Формат.
exception Исключение элемента, который вызвал ошибку.
args Параметры формата.
Класс LocalProvider
Сложный

Пространство имен Terrasoft.Sync.

Класс Terrasoft.Sync.LocalProvider реализует работу с локальным хранилищем. Позволяет работать с классом LocalItem.

На заметку. Полный перечень конструкторов, свойств и методов класса LocalProvider, его родительских классов, а также реализуемых им интерфейсов, можно найти в Библиотеке .NET классов.

Конструкторы 

LocalProvider(UserConnection userConnection)

Создает экземпляр класса с помощью UserConnection.

Параметры
userConnection Пользовательское подключение.

Свойства 

StoreId Guid

Идентификатор хранилища Creatio, которое будет синхронизировано.

UserConnection UserConnection

Экземпляр UserConnection.

MaxItemsPerSelect int

Максимальное количество элементов в выборке.

Методы 

static void AddItemSchemaColumns(EntitySchemaQuery esqForFetching, EntityConfig entityConfig)

Добавляет в EntitySchemaQuery-запрос указанные колонки.

Параметры
esqForFetching Экземпляр класса EntitySchemaQuery.
entityConfig Экземпляр класса EntityConfig.
void ApplyChanges(SyncContext context, LocalItem entities)

Применяет изменения к каждому экземпляру сущности в коллекции entities.

Параметры
context Экземпляр класса SyncContext.
entities Экземпляр класса LocalItem.
LocalItem FetchItem(ItemMetadata itemMetaData, SyncItemSchema itemSchema, bool loadAllColumns = false)

Загружает коллекцию сущностей, которые связаны с конкретным элементом синхронизации.

Параметры
itemMetaData Экземпляр класса ItemMetadata.
itemSchema Экземпляр класса SyncItemSchema.
loadAllColumns Если установлено значение true, то загружаются все столбцы сущностей. При значении false загружаются только столбцы из экземпляра сущности EntityConfig.
Класс LocalItem
Сложный

Пространство имен Terrasoft.Sync.

Класс Terrasoft.Sync.LocalItem реализует элемент синхронизации из хранилища Creatio. Представляет собой один или несколько объектов Creatio, которые, как одно целое, синхронизируются с внешним хранилищем. Элемент синхронизации из внешнего хранилища, который конвертирован в сущность LocalItem, содержит набор экземпляров класса SyncEntity.

На заметку. Полный перечень конструкторов, свойств и методов класса LocalItem, его родительских классов, а также реализуемых им интерфейсов, можно найти в Библиотеке .NET классов.

Конструкторы 

LocalItem(SyncItemSchema itemSchema)

Создает экземпляр элемента синхронизации.

Параметры
itemSchema Элемент синхронизации.

Свойства 

Entities Dictionary<string, List<SyncEntity>>

Коллекция SyncEntity, которая ставится в соответствия с одним SyncItem. Содержит коллекцию пар "ключ-значение", где ключ — имя схемы, а значение — коллекция SyncEntity этой схемы.

Version DateTime

Наибольшее значение даты и времени модификации из всех Entities в LocalItem.

Schema SyncItemSchema

Схема настройки сущности элемента синхронизации.

Методы 

void AddOrReplace(string schemaName, SyncEntity syncEntity)

Добавляет новый SyncEntity в коллекцию. Если SyncEntity с таким EntityId уже существует, заменяет его.

Параметры
schemaName Имя схемы.
syncEntity Синхронизируемая сущность.
SyncEntity Add(UserConnection userConnection, string schemaName)

Создает и добавляет новый SyncEntity в коллекцию.

Параметры
userConnection Пользовательское подключение.
schemaName Имя схемы.
IEnumerator<SyncEntity> GetEnumerator()

Создает счетчик SyncEntity.

Класс RemoteProvider
Сложный

Пространство имен Terrasoft.Sync.

Класс Terrasoft.Sync.RemoteProvider реализует работу с внешним хранилищем.

На заметку. Полный перечень свойств и методов класса RemoteProvider, его родительских классов, а также реализуемых им интерфейсов, можно найти в Библиотеке .NET классов.

Свойства 

StoreId Guid

Идентификатор внешнего хранилища, с которым будет выполняться синхронизация.

Version DateTime

Дата и время последней синхронизации.

RemoteChangesCount int

Количество элементов, которые импортированы из внешнего хранилища.

LocalChangesCount int

Количество элементов, которые импортированы из хранилища Creatio.

SyncItemSchemaCollection List<SyncItemSchema>

Настройка коллекции схем внешнего хранилища.

UseMetadata bool

Флаг, который позволяет использовать метаданные.

SessionInfo string

Информация о сессии пользователя.

Методы 

abstract void ApplyChanges(SyncContext context, IRemoteItem syncItem)

Применяет изменения в элементе внешнего хранилища.

Параметры
context Экземпляр класса SyncContext.
syncItem Элемент синхронизации.
abstract void CommitChanges(SyncContext context)

Вызывается после обработки изменений во внешнем хранилище и хранилище Creatio. Предназначен для реализации дополнительных действий для конкретной реализации интеграции.

Параметры
context Экземпляр класса SyncContext.
abstract IEnumerable<LocalItem> CollectNewItems(SyncContext context)

Возвращает перечень новых элементов для синхронизации внешнего хранилища.

Параметры
context Экземпляр класса SyncContext.
abstract IEnumerable<IRemoteItem> EnumerateChanges(SyncContext context)

Возвращает перечень элементов для синхронизации внешнего хранилища.

Параметры
context Экземпляр класса SyncContext.
abstract IRemoteItem LoadSyncItem(SyncItemSchema schema, string id)

Возвращает объект синхронизации из внешнего хранилища по уникальному внешнему ключу.

Параметры
schema Схема синхронизации.
id Уникальный внешний ключ.
abstract IRemoteItem CreateNewSyncItem(SyncItemSchema schema)

Для текущего элемента возвращает удаленный синхронизированный элемент.

Параметры
schema Схема синхронизации.
abstract IEnumerable<Type> KnownTypes()

Получает типы всех элементов синхронизации из внешнего хранилища. Возвращает коллекцию всех типов, которые реализуют интерфейс IRemoteItem. На их основе, SyncAgent строит экземпляры SyncItemSchema, которые описывают синхронизируемые сущности.

virtual int GetNumberPageElements(SyncContext context)

Возвращает количество элементов, которые необходимо обработать на одной странице приложения Creatio.

Параметры
context Экземпляр класса SyncContext.
virtual IRemoteItem LoadSyncItem(SyncItemSchema schema, ItemMetadata itemMetadata)

Возвращает объект синхронизации по значению метаданных.

Параметры
schema Схема синхронизации.
itemMetadata Метаданные синхронизации.
virtual SyncConflictResolution ResolveConflict(IRemoteItem syncItem, ItemMetadata itemMetaData, Guid localStoreId)

Разрешает конфликт между измененными элементами хранилища Creatio и внешнего хранилища. По умолчанию приоритет имеют изменения в Creatio.

Параметры
syncItem Элемент синхронизации.
itemMetadata Метаданные синхронизации.
localStoreId Идентификатор хранилища Creatio.
virtual void RealeaseItem(ref IRemoteItem remoteItem)

Забирает элемент синхронизации из внешнего хранилища.

Параметры
remoteItem Элемент синхронизации.
virtual bool NeedMetaDataActualization()

Возвращает флаг, который устанавливает необходимость актуализации метаданных.

virtual IEnumerable<ItemMetadata> GetLocallyModifiedItemsMetadata(SyncContext context, EntitySchemaQuery modifiedItemsEsq)

Возвращает элементы синхронизации, которые были изменены в хранилище Creatio после последней синхронизации.

Параметры
context Экземпляр класса SyncContext.
modifiedItemsEsq Запрос к объекту схемы.
virtual void LogError(string format, Exception exception, params object[] args)

Записывает в журнал сообщение об ошибке.

Параметры
format Формат строки с сообщением об ошибке.
exception Исключение, которое вызвало ошибку.
args Параметры сообщения об ошибке.
Класс RemoteItem
Сложный

Пространство имен Terrasoft.Sync.

Класс Terrasoft.Sync.RemoteItem реализует интерфейс IRemoteItem. Интерфейс реализует элемент синхронизации внешнего хранилища. Представляет собой набор данных из внешнего хранилища, который синхронизируется атомарно. Может состоять из одной или нескольких сущностей (записей) внешнего хранилища. Класс RemoteItem является контейнером для данных, которые приходят из внешнего хранилища. Также класс преобразовывает эти данные в сущности Entity, и наоборот — из Entity наполняет внешнее хранилище.

На заметку. Полный перечень свойств и методов класса RemoteItem, его родительских классов, а также реализуемых им интерфейсов, можно найти в Библиотеке .NET классов.

Свойства 

Id string

Идентификатор элемента во внешнем хранилище.

Version DateTime

Версия элемента в текущем хранилище (дата последней модификации). Используется для сравнения двух элементов из разных хранилищ.

Schema SyncItemSchema

Описывает схему соответствия синхронизируемого элемента.

State SyncState

Действие, которые выполнено над элементом с даты последней синхронизации.

Action SyncAction

Действие, которое необходимо выполнить над элементом.

Методы 

void FillLocalItem(SyncContext context, ref LocalItem localItem)

Заполняет свойства элемента LocalItem хранилища Creatio значениями элемента внешнего хранилища. Используется для применения изменений в хранилище Creatio.

Параметры
context Экземпляр класса SyncContext.
localItem Элемент хранилища Creatio, который соответствует текущему элементу внешнего хранилища.
void FillRemoteItem(SyncContext context, LocalItem localItem)

Заполняет свойства элемента внешнего хранилища значениями из элемента LocalItem хранилища Creatio. Используется для применения изменений во внешнем хранилище.

Параметры
context Экземпляр класса SyncContext.
localItem Элемент хранилища Creatio, который соответствует текущему элементу внешнего хранилища.
Класс SyncEntity
Сложный

Пространство имен Terrasoft.Sync.

Класс Terrasoft.Sync.SyncEntity реализует элемент синхронизации Creatio. Является оберткой над отдельными Entity. Позволяет работать с Entity, как из синхронизируемым объектом. Задает состояние и действие (добавить, удалить, изменить), которое необходимо выполнить с Entity.

На заметку. Полный перечень конструкторов, свойств и методов класса SyncEntity, его родительских классов, а также реализуемых им интерфейсов, можно найти в Библиотеке .NET классов.

Конструкторы 

SyncEntity(Entity entity, SyncState state)

Создает экземпляр элемента синхронизации.

Параметры
entity Экземпляр класса Entity.
state Экземпляр класса SyncState.

Свойства 

EntityId Guid

Идентификатор сущности.

EntitySchemaName string

Имя схемы, для которой создается обертка.

Entity Entity

Сущность, для которой создается обертка.

State SyncState

Последнее действие, которое выполнено над сущностью.

Action SyncAction

Действие, которое необходимо выполнить из сущностью.

ExtraParameters string

Дополнительная информация, которая связана с конкретной сущностью. Внешний провайдер для пользовательских потребностей.

Методы 

static SyncEntity CreateNew(Entity entity)

Создает обертку для сущности.

Параметры
entity Экземпляр класса Entity.
static SyncEntity CreateNew(UserConnection userConnection, string schemaName)

Создает обертку для сущностей схемы.

Параметры
userConnection Пользовательское подключение.
schemaName Имя схемы.
Класс SyncItemSchema
Сложный

Пространство имен Terrasoft.Sync.

Класс Terrasoft.Sync.SyncItemSchema задает схему настройки сущности элемента синхронизации.

На заметку. Полный перечень конструкторов, свойств и методов класса SyncItemSchema, его родительских классов, а также реализуемых им интерфейсов, можно найти в Библиотеке .NET классов.

Конструкторы 

SyncItemSchema()

Создает экземпляр класса.

Свойства 

SyncValueName string

Название типа сущности.

SyncValueType Type

Тип сущности.

PrimaryEntityConfig EntityConfig

Настройка основной сущности элемента синхронизации.

Configs List<EntityConfig>

Список настроек сущностей элемента синхронизации.

DetailConfigs List<DetailEntityConfig>

Список настроек сущностей деталей элемента синхронизации.

Direction SyncDirection

Определяет направление синхронизации для объектов текущего типа. По умолчанию — DownloadAndUpload. Если не содержит флаг Download, то изменения не будут применяться в Creatio. Если не содержит флаг Upload, то не будут выбираться новые сущности из Creatio.

Методы 

static SyncItemSchema CreateSyncItemSchema(Type syncValueType)

Создает настройки сущности элемента синхронизации со всеми настройками связанных сущностей.

Параметры
syncValueType Тип сущности.
void Validate(UserConnection userConnection)

Проверяет правильность сформированного EntityConfig. Если проверка не прошла, то выдается исключение (если в EntityConfig имя схемы указано два раза, то генерируется DublicateDataException. Если указано имя несуществующей схемы, то генерируется InvalidSyncItemSchemaException).

Параметры
userConnection Пользовательское подключение.
Класс MapAttribute
Сложный

Пространство имен Terrasoft.Sync.

Атрибутом Map декорируются реализации интерфейса IRemoteItem.

На заметку. Полный перечень конструкторов и свойств класса MapAttribute, его родительских классов, а также реализуемых им интерфейсов, можно найти в Библиотеке .NET классов.

Конструкторы 

MapAttribute(string schemaName, int order)

Указывает порядок сохранения сущностей в хранилище Creatio из указанной схемы.

Параметры
schemaName Имя схемы, которая участвует в текущем элементе синхронизации.
order Порядок сохранения сущностей в хранилище Creatio.
Пример использования
Пример использования атрибута Map
[Map("Activity", 0)]
[Map("ActivityParticipant", 1)]
public class GoogleTask: IRemoteItem {
    ...
}

В таком объявлении класса задача из Google-календаря синхронизируется с активностью и участниками активности из Creatio. Активность (объект Activity) указывается первой, поскольку участники активности (объект ActivityParticipant) хранит ссылку на создаваемую активность и при другом порядке будет вызвано исключение.

В большинстве случаев класс SyncAgent может автоматически сформировать запрос по выборке новых элементов синхронизации из Creatio. Для этого необходимо указать основную сущность и способ связи с деталями.

Пример указания основной сущности и способа связи с деталями представлен ниже.

Пример формирования запроса
[Map("Activity", 0, IsPrimarySchema = true)]
[Map("ActivityParticipant", 1, PrimarySchemaName = "Activity", ForeingKeyColumnName = "Activity")]
public class GoogleTask: IRemoteItem {
    ...
}

В данном случае в базу данных отправится один запрос на получение новых активностей и по одному запросу на каждую выбранную активность для получения связанных с ней участников.

Свойства 

SchemaName string

Имя схемы объекта в хранилище Creatio.

Order int

Порядок обработки сущности для элемента синхронизации. Чем меньше значение, тем раньше сущность будет обработана при обработке элемента синхронизации.

Direction SyncDirection

Определяет направление синхронизации для объектов текущего типа. По умолчанию — DownloadAndUpload. Если не содержит флаг Download, то изменения не будут применять в Creatio. Если не содержит флаг Upload, то не будут выбираться новые сущности из Creatio.

PrimarySchemaName string

Имя схемы главного объекта. Не может указываться в паре с IsPrimarySchema.

ForeignKeyColumnName string

Имя колонки для связи детали с главным объектом. Не может указываться в паре с IsPrimarySchema.

IsPrimarySchema bool

Флаг, который указывает, что данная схема является основной в данном элементе синхронизации. Может быть установлен только для одной схемы.

FetchColumnNames string[]

Названия колонок, которые будут загружаться из хранилища Creatio. Если значение не указано, то загружаются все колонки объекта.

Класс DirectionAttribute
Средний

Пространство имен Terrasoft.Sync.

Атрибут DirectionAttribute позволяет указать направление синхронизации для элемента синхронизации.

На заметку. Полный перечень конструкторов и свойств класса DirectionAttribute, его родительских классов, а также реализуемых им интерфейсов, можно найти в Библиотеке .NET классов.

Конструкторы 

DirectionAttribute(SyncDirection direction = SyncDirection.DownloadAndUpload)

Указывает направление синхронизации для элемента синхронизации.

Параметры
direction Направление синхронизации. По умолчанию — DownloadAndUpload.

Свойства 

SyncDirection SyncDirection

Указывает направление синхронизации для элемента синхронизации. По умолчанию — DownloadAndUpload.

Класс EntityConfig
Сложный

Пространство имен Terrasoft.Sync.

Класс Terrasoft.Sync.EntityConfig настраивает сущность элемента синхронизации.

На заметку. Полный перечень свойств класса EntityConfig, его родительских классов, а также реализуемых им интерфейсов, можно найти в Библиотеке .NET классов.

Свойства 

SchemaName string

Название схемы объекта сущности.

Order int

Порядок обработки сущности для элемента синхронизации. Чем меньше значение, тем раньше сущность будет обработана при обработке элемента синхронизации.

Direction SyncDirection

Доступные направления для синхронизации. По умолчанию — DownloadAndUpload. Если не содержит флаг Download, то изменения не будут применяться в Creatio. Если не содержит флаг Upload, то не будут выбираться новые сущности из Creatio.

FetchColumnNames string[]

Названия колонок, которые будут загружаться из хранилища Creatio. Если при создании экземпляра значение не указано, то загружаются все колонки объекта.

Класс DetailEntityConfig
Сложный

Пространство имен Terrasoft.Sync.

Класс Terrasoft.Sync.DetailEntityConfig настраивает сущности элемента синхронизации.

На заметку. Полный перечень свойств класса DetailEntityConfig, его родительских классов, а также реализуемых им интерфейсов, можно найти в Библиотеке .NET классов.

Свойства 

PrimarySchemaName string

Имя схемы основной синхронизируемой сущности Creatio.

ForeignKeyColumnName string

Имя колонки для связи детали с главным объектом.

Класс MetaDataStore
Сложный

Пространство имен Terrasoft.Sync.

Класс-фабрика Terrasoft.Sync.MetaDataStore создает конкретный экземпляр класса, который реализует интерфейс IReplicaMetadata для хранилища.

На заметку. Полный перечень конструкторов и методов класса MetaDataStore, его родительских классов, а также реализуемых им интерфейсов, можно найти в Библиотеке .NET классов.

Конструкторы 

MetaDataStore(UserConnection userConnection)

Создает экземпляр класса с учетом пользовательского подключения.

Параметры
userConnection Пользовательское подключение.

Методы 

IReplicaMetadata GetReplicaMetadata(Guid localStoreId, Guid remoteStoreId)

Создает экземпляр класса, который реализует интерфейс IReplicaMetadata для конкретного хранилища.

Параметры
localStoreId Идентификатор хранилища Creatio.
remoteStoreId Идентификатор внешнего хранилища.
void RemoveReplicaMetadata(Guid storageId)

Удаляет все метаданные для хранилища.

Параметры
storageId Идентификатор хранилища.
Класс ItemMetadata
Сложный

Пространство имен Terrasoft.Sync.

Класс Terrasoft.Sync.ItemMetadata является неделимым объектом метаданных синхронизации. Содержит набор метаданных для каждой сущности синхронизации (коллекция элементов SysSyncMetadata).

На заметку. Полный перечень свойств класса ItemMetadata, его родительских классов, а также реализуемых им интерфейсов, можно найти в Библиотеке .NET классов.

Свойства 

RemoteId string

Идентификатор элемента во внешнем хранилище.

RemoteItemName string

Имя элемента во внешнем хранилище.

Класс ReplicaMetadata
Средний

Пространство имен Terrasoft.Sync.

Класс Terrasoft.Sync.ReplicaMetadata реализует интерфейс IReplicaMetadata, инкапсулирует метаданные синхронизации.

На заметку. Полный перечень конструкторов, свойств и методов класса ReplicaMetadata, его родительских классов, а также реализуемых им интерфейсов, можно найти в Библиотеке .NET классов.

Конструкторы 

ReplicaMetadata(UserConnection uc)

Создает экземпляр класса ReplicaMetadata.

Параметры
uc Пользовательское подключение.

Свойства 

RemoteStoreId Guid

Идентификатор внешнего хранилища.

LocalStoreId Guid

Идентификатор хранилища Creatio.

Методы 

Поскольку методы класса ReplicaMetadata совпадают с методами интерфейса IReplicaMetadata, ознакомиться с описанием методов можно в статье Интерфейс IReplicaMetadata.

Класс SyncRetryPolicy
Средний

Пространство имен Terrasoft.Sync.

Класс Terrasoft.Sync.SyncRetryPolicy предоставляет API для выполнения повторной операции синхронизации. При обнаружении экземпляра TException синхронизация запускается повторно.

На заметку. Полный перечень методов класс SyncRetryPolicy, его родительских классов, а также реализуемых им интерфейсов, можно найти в Библиотеке .NET классов.

Методы 

void Execute(int retryCount, TimeSpan delay, Action operation)

Последовательно выполняет операцию синхронизации. Запускается при обнаружении экземпляра TException.

Параметры
retryCount Максимальное количество повторных попыток операции.
delay Задержка между попытками.
operation Операция синхронизации.
Интерфейс IReplicaMetadata
Сложный

Пространство имен Terrasoft.Sync.

Интерфейс Terrasoft.Sync.IReplicaMetadata инкапсулирует метаданные синхронизации. Реализует работу с объектами ItemMetadata.

На заметку. Полный перечень свойств и методов класса IReplicaMetadata, его родительских классов, а также реализуемых им интерфейсов, можно найти в Библиотеке .NET классов.

Свойства 

RemoteStoreId Guid

Идентификатор внешнего хранилища.

LocalStoreId Guid

Идентификатор хранилища Creatio.

Методы 

ItemMetadata FindItemMetaData(string remoteItemId)

Возвращает объект метаданных синхронизации ItemMetadata по идентификатору во внешнем хранилище.

Параметры
remoteItemId Идентификатор внешнего хранилища.
void UpdateItemMetadata(ItemMetadata oldItemMetaDatas, IRemoteItem remoteItem, LocalItem localItem, bool changesToBpm, SyncContext context = null)

Обновляет метаданные после синхронизации.

Параметры
oldItemMetaDatas Метаданные предыдущей синхронизации.
remoteItem Элемент из внешнего хранилища.
localItem Элемент из хранилища Creatio.
changesToBpm Текущее направление синхронизации.
context Контекст синхронизации.
IEnumerable<ItemMetadata> EnumerateItemsWithChangesInBpm(SyncContext context)

Возвращает коллекцию объектов ItemMetadata, измененных после последней синхронизации в Creatio и не обработанных в процессе текущего сеанса синхронизации.

Параметры
context Контекст синхронизации.
void CollectChangesInSyncedEntities(UserConnection userConnection, string schemaName, DateTime lastSyncVersion)

Обновляет метаданные для элементов синхронизации, измененных в Creatio. Если элемент был изменен в приложении после последней синхронизации SysMetadata, колонка Version будет заполнена датой модификации элемента. Для актуализации метаданных используется хранимая процедура ActualizeSysSyncMetaData.

Параметры
userConnection Пользовательское подключение.
schemaName Синхронизированное имя схемы.
lastSyncVersion Дата последней синхронизации.
void CollectNewDetailsForSyncedEntities(UserConnection userConnection, DetailEntityConfig detailEntityConfig, string remoteItemName, DateTime lastSyncVersion = default(DateTime))

Создает новые записи в таблице SysSyncMetaData для деталей элемента синхронизации.

Параметры
userConnection Пользовательское подключение.
detailEntityConfig Экземпляр класса DetailEntityConfig.
remoteItemName Название элемента из внешнего хранилища.
lastSyncVersion Дата последней синхронизации.
bool TryResolveRemoteId(Guid localId, out string remoteId)

Возвращает идентификатор элемента во внешнем хранилище remoteId из метаданных по уникальному идентификатору элемента синхронизации в Creatio localId. Если элемент помечен как удаленный, то remoteId возращен не будет и метод возвратит false.

Параметры
localId Идентификатор сущности в хранилище Creatio.
remoteId Идентификатор элемента во внешнем хранилище.
bool TryResolveRemoteId(Guid localId, string remoteItemName, out string remoteId)

Возвращает идентификатор элемента во внешнем хранилище remoteId из метаданных по уникальному идентификатору элемента синхронизации в Creatio localId. Если элемент помечен как удаленный, то remoteId возращен не будет и метод возвратит false.

Параметры
localId Идентификатор сущности в хранилище Creatio.
remoteItemName Название элемента во внешнем хранилище.
remoteId Идентификатор элемента во внешнем хранилище.
bool TryResolveExtraParameters(Guid localId, out string extraParameters)

Возвращает дополнительные параметры extraParameters для элемента синхронизации из метаданных по localId. Если extraParameters не будут найдены, метод вернет false.

Параметры
localId Идентификатор сущности в хранилище Creatio.
extraParameters Параметры элемента во внешнем хранилище.
Интерфейс ISyncProvider
Средний

Пространство имен Terrasoft.Sync.

Интерфейс Terrasoft.Sync.ISyncProvider обеспечивает взаимодействие с хранилищем данных. Изолирует агент синхронизации от деталей реализации хранилища данных.

На заметку. Полный перечень свойств и методов интерфейса ISyncProvider, его родительских классов, а также реализуемых им интерфейсов, можно найти в Библиотеке .NET классов.

Свойства 

StoreId Guid

Идентификатор хранилища.

Version DateTime

Дата последней синхронизации для провайдера. Синхронизируются только те записи, которые изменились, начиная с этой даты.

Методы 

void ApplyChanges(SyncContext context, TSyncItem syncItem)

Применяет изменения в хранилище.

Параметры
context Контекст синхронизации.
syncItem Элемент синхронизации.
IEnumerable<TSyncItem> EnumerateChanges(SyncContext context)

Возвращает перечень объектов синхронизации хранилища.

Параметры
context Контекст синхронизации.
void CommitChanges(SyncContext context)

Завершает применение изменений.

Параметры
context Контекст синхронизации.
Перечисления Terrasoft.Sync
Средний

Перечисление SyncConflictResolution 

Пространство имен Terrasoft.Sync.

Перечисление Terrasoft.Sync.SyncConflictResolution содержит типы разрешения конфликта версий элемента сихронизации в хранилище Creatio и внешнем хранилище.

На заметку. Полный перечень значений перечисления SyncConflictResolution можно найти в Библиотеке .NET классов.

Возможные значения (SyncConflictResolution)
ApplyToLocal Приоритет изменений внешнего хранилища.
ApplyToRemote Приоритет изменений хранилища Creatio.
None Не выполнять синхронизацию элемента.

Перечисление SyncState 

Пространство имен Terrasoft.Sync.

Перечисление Terrasoft.Sync.SyncState содержит состояния элемента синхронизации в текущем хранилище.

На заметку. Полный перечень значений перечисления SyncState можно найти в Библиотеке .NET классов.

Возможные значения (SyncState)
None 0 Не отслеживается.
New 1 Новый элемент.
Modified 2 Измененный элемент.
Deleted 3 Удаленный элемент.

Перечисление SyncAction 

Пространство имен Terrasoft.Sync.

Перечисление Terrasoft.Sync.SyncAction содержит действия, которое необходимо выполнить над обьектом при применении изменений.

На заметку. Полный перечень значений перечисления SyncAction можно найти в Библиотеке .NET классов.

Возможные значения (SyncAction)
None 0 Не выполнять никаких действий.
Create 1 Создать элемент.
Update 2 Обновить элемент.
Delete 3 Удалить элемент.
CreateRecurringMaster 4 Создать повторяющийся элемент.
Repeat 5 Повторить элемент.

Перечисление SyncDirection 

Пространство имен Terrasoft.Sync.

Перечисление Terrasoft.Sync.SyncDirection определяет направление синхронизации.

Способы определения направления синхронизации:

  • На уровне агента. В этом случае направление применяется для всех синхронизируемых объектов.
  • На уровне конкретного объекта. В этом случае направление перекрывает значение агента и устанавливает направление синхронизации для текущего объекта.

На заметку. Полный перечень значений перечисления SyncDirection можно найти в Библиотеке .NET классов.

Возможные значения (SyncDirection)
Download 2 Изменения применяются только в хранилище Creatio.
Upload 4 Изменения применяются только во внешнем хранилище.
DownloadAndUpload Download | Upload Двунаправленная синхронизация внешнего хранилища и хранилища Creatio.