Разработка:storages/sync

Материал из DOF
Перейти к: навигация, поиск
Плагин
Название sync
Тип storages


Таблица в базе данных

sync - Справочник для работы с внешней синхронизацией.

Подробный формат полей в таблице:

  • downptype Тип внутреннего плагина (с которым выполняется синхронизация)
  • downpcode Код плагина
  • downsubstorage Код субсправочника (пока пустой, но по полю должна выполняться фильтрация, чтобы методы не путали записи с пустым кодам и записи с указанным - они относятся к разным справочникам). Это нужно, например, если у нас есть универсальный справочник, который позволяет создавать через веб-интерфейс настраиваемые справочники, а физически хранит их в одной таблице SQL.
  • downid Внутренний id
  • upptype Тип плагина - поставщика синхронизации (обычно - sync)
  • uppcode Код плагина - поставщика синхронизации
  • upsubsubstorage Код субсправочника (а вот здесь ситуация частая - если через один плагин мы синхронизируемся с несколькими внешними справочниками).
  • upid Внешний id.
  • direct Направление последней синхронизации (up - изнутри наружу, down - внутрь)
  • lasttime UnixTimestamp последней синхронизации
  • lastoperation - последняя операция (connect - установлена связь между существующими объектами, create - создан объект в системе-получателе (по направлению), update, delete, unsync - синхронизация разорвана, следующая операция только create или connect)
  • downhash Хеш значимых данных на момент последнего обновления. Cчитаем по объекту, который пришел из внутренней системы (нижней), при направлении синхронизации up.
  • uphash Хеш значимых данных на момент последнего обновления. Cчитаем по объекту, который пришел из внешней системы (верхней), при направлении синхронизации down.

API

makeHash()

Метод вычисления хешей: на вход получает объект Object и объект-маску (необязательный параметр). Если передан объект-маска, сперва удаляются все игнорируемые поля через unset(). Затем объект сериализуется в json и от него считаем sha1. С порядком переменных пока не заморачиваемся - если где и ошибёмся, не страшно - ситуация редкая, да и если лишний раз синхронизируем апдейт - не страшно.

Принцип работы с объектом маской: все поля, которые имеют в маске значение "ignore" не учитываются при вычислении хеша.

Важное замечание:

$obj->a= "ignore"; - будет проигнорировано поле a;

$obj->a->b= "ignore"; - будет проигнорировано только поле "b", а остальные потомки поля "a" будут учтены.

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

Входные параметры:

  • (object) $data - данные синхронизации.
  • (object) $datamask - не значимые данные синхронизации, которые будут игнорированы. По умолчанию null.

Возвращаемые значения:

  • (string) $hash - sha1 сериализованного json объекта значимых данных.
createConnect()

Воздает подключение к синхронизации, вызывает класс dof_storage_sync_connect Входные параметры:

  • (string) $downptype - тип внутреннего плагина.
  • (string) $downpcode - код внутреннего плагина.
  • (string) $downsubstorage - код внутреннего субсправочника.
  • (string) $upptype - тип внешнего плагина.
  • (string) $uppcode - код внешнего плагина.
  • (string) $upsubstorage - код внешнего субсправочника.

Возвращаемые значения:

  • (stdClass) $connect - объект класса dof_storage_sync_connect.

Класс dof_storage_sync_connect