Автоматическое разрешение конфликтов при синхронизации
Glossary Item Box
Общая информация
В ходе синхронизации мобильного приложения, работающего в offline-режиме, могут возникать ситуации, когда переданные в bpm’online данные не могут быть сохранены по ряду причин. К таким причинам могут относиться следующие:
-
Запись была слита в bpm'online с другой дублирующейся записью, поэтому ее не существует.
-
Запись была удалена из bpm'online.
Каждая из приведенных выше ситуаций обрабатывается мобильным приложением автоматически.
Слияние дублей
Алгоритм разрешения конфликта, возникающего по причине использования данных, которые в bpm’online были удалены в ходе процедуры слияния дублей, представлен схематически на рис. 1:
Рис. 1. — Схема разрешения конфликта, возникшего в результате слияния дублей на сервере
Как видно на схеме, в ходе синхронизации приложение сначала забирает на сервере информацию о том, по каким записям с момента последней синхронизации производилось слияние дублей. А именно какие записи были удалены и какие записи их заменили. Если в ходе экспорта не было никаких ошибок, то далее выполняется импорт. Если же произошла ошибка, связанная с исключением внешнего ключа (Foreign Key Exception), или ошибка, связанная с тем, что на сервере не была найдена какая-то из записей (Item Not Found Exception), то выполняется процедура разрешения этого конфликта со следующими этапами:
- В экспортируемых данных ищутся колонки, содержащие “старую” запись.
- В найденных колонках “старая” запись заменяется новой, в которой данные объединялись.
После этого запись повторно отправляется в bpm’online. Как только заканчивается импорт и появляется информация о слитых дублях, локально производится удаление “старых” записей.
Запись не найдена
В случае, когда сервер возвращает ошибку, свидетельствующую о том, что измененная пользователем запись в bpm’online не найдена, приложение выполняет следующие действия:
- Проверяет наличие записи в списке заисей, удаленных в ходе слияния дублей (см. “Слияние дублей”).
- Если в списке удаленных записи нет, то приложение удаляет ее локально.
- Удаляет информацию по этой записи из лога синхронизации.
Таким образом, приложение считает этот конфликт разрешенным и продолжает экспорт данных.