Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.

...

При инициализации базы MSSQL по метаданным в каждую таблицу добавляются служебные поля IsDeleted и TimestampIsDeleted - поле boolean типа, флаг удаленной записи. Timestamp - поле типа bigint, содержащее в себе время последней модификации записи.

Протокол и точки подключения

  1. Обмен данными осуществляется посредством передачи сжатых в zip json документов POST запросом по протоколу HTTP
  2. Конечная точка имеет вид http(s)://%адрес сервера GROTEM %/%имя решения%/device/DefaultScope/DownloadChanges, номер порта зависит от конфигурации web сервера IIS (по умолчанию 80 для http и 443 для https), например:
    http://server.ru/grotem/device/DefaultScope/DownloadChanges
  3. Используется "Basic" авторизация, имя пользователя и пароль зависят от решения
  4. В запросе должны быть проставлены следующие хедеры:
    "configname" - имя конфигурации из метаданных, например "Service"
    "configversion" - версия конфигурации из метаданных, например "1.3.1.327"
    "coreversion" - (ОПЦИОНАЛЬНО) версия клиента, например "3.0.0.0"
  5. Кодировка - UTF-8

...

  • Tablename - имя таблицы
  • Fields - json объект с полями записи

Порядок синхронизации

  1. Клиент отправляет свой документ с данными и заполненным полем TimestampFrom, в нем передается время последней успешной синхронизации с сервером.. Если это поле = 0, то синхронизация считается начальной и клиент получит полный набор данных с сервера.
  2. Сервер получает документ с данными, заполняет в нём поле TimestampTo текущей датой и выполняет обновление записей или помечает их как удаленные. Всем затронутым записям присваивается одно и то же значение Timestamp TimestampTo
  3. Сервер получает список записей в таблицах, изменённых после TimestampFrom, и возвращает клиенту JSON документ с данными. В этом документе значение TimestampTo является датой последней успешной синхронизации и должно быть запомнено клиентом.


Получение связанных данных

Во всех таблицах, участвующих в синхронизации, присутствует поле KeyFieldTimestamp. В нем должен проставляться timestamp последнего изменения любого из ключевых полей таблицы.
В случае, если ключевые поля хотя бы одной записи из видимых клиенту по фильтрам были изменены с момента последней синхронизации, то при синхронизации клиенту будет отправлен не частичный, а полный changeset.

ВАЖНО: поле KeyFieldTimestamp не заполняется автоматически (за исключением начальной загрузки данных), логика его заполнения лежит на стороне прикладных разработчиков. 

Нужно учесть, что для того, чтобы пришли актуальные данные, у дочернего элемента нужно на прикладном уровне менять и timestamp и keyFieldTimestamp.