[ELMA3] Отслеживание изменений через API
При использовании API системы важно понимать принцип отслеживания изменений. Для обмена и отслеживания изменений используется сервис IEntityChangesService совместно с сервисом IEntityHeadService.
Весь обмен можно описать кратко следующими шагами:
- Сформировать постоянный запрос на языке EQL.
- Провести первоначальную синхронизацию.
- Периодически запрашивать изменения с сервера:
- При получении изменений – подтвердить на сервер для синхронизации;
- При возникновении ошибки – снова провести полную синхронизацию списка.
Далее эти шаги подробно расписаны.
Сформировать постоянный запрос на языке EQL
На клиенте формируется и запоминается запрос EQL к определенному типу. Например, для получения списка текущих задач пользователя подойдет запрос к типу ITaskBase.
Для формирования запроса воспользуйтесь страницей описывающей язык EQL.
Провести первоначальную синхронизацию
При первом обращении (если до этого ни разе не было синхронизации) идет запрос на получение заголовков списка данных через метод IEntityHeadService.Query. В этом случае необходимо провести первичную синхронизацию кэша клиента и сервера при помощи метода IEntityChangesService.Sync.
Периодически запрашивать изменения с сервера
Периодически можно делать запрос к методу IEntityChangesService.Changes.
При получении от метода IEntityChangesService.Changes данных по изменениям клиент должен применить их локально:
- удалить из своего списка все объекты из массива Deleted;
- обновить\добавить в список все объекты из массива Updated.
После применения локальных данных, для подтверждения синхронизации кэша, клиент отправляет на сервер в метод IEntityChangesService.ChangesCommit идентификатор Id полученный ранее.
Под применением данных локально, нужно понимать сохранение списков в локальном постоянном хранилище на клиенте. После сохранения данные о сущностях уже могут подтягиваться в фоновом режиме.
Если при подтверждении синхронизации в методе IEntityChangesService.ChangesCommit произошла ошибка или метод вернул False, то нужно заново провести синхронизацию кэша (см. выше).