Обработка данных клиентом

Процесс синхронизации на клиенте проходит в несколько этапов:

  • UPLOAD — загрузка данных на сервер. Передача данных происходит при помощи mobile-transfer-package и transfer-file
  • SYNC — запуск синхронизации на сервере см.sync-transfer
  • DOWNLOAD — загрузка данных с сервера
  • PROCESSING — обработка полученного пакета
  • REMOVE — удаление временных данных

Дополнительные поля для записей

Для корректной обработки данных у каждой записи есть дополнительные «скрытые» поля:

  • __type: string — тип операции: create, update, delete
  • __sync: boolean — по умолчанию false. Была ли запись до этого синхронизирована
  • __tid: any — внутренний идентификатор транзакции
  • __key: string — имя первичного ключа
  • __auto_increment: boolean — первичный ключ генерируется автоматически сервером или нет. Если этот параметр установлен как true, то при сохранении данных в БД первичный ключ созданный на клиенте не будет использоваться

Примечание.Синхронизация происходит только у тех записей чей параметр __sync = false

Выполнение синхронизации

...
cmp.start(dbName, [...], options);
...

, где

  • dbName: string — имя БД для которой выполняется синхронизация
  • […] — блок данных, см. ниже
  • options: any — дополнительные опции

Блок данных:

Представляет из себя объект в котором хранится информация:

  • какие таблицы нужно синхронизировать
  • какие и в каком виде данные получить от сервера
  • какие вложения нужно получить

Пример:

...
cmp.start(dbName, [{
    name: 'audits'
}, {
    name: 'audit_keys', // нужно получить данные от этой таблицы, при этом их синхронизируя
    select: {
        select: 'id,code,message,description',
        filter: [{
            property: "code",
            value: "CE0"
        }]
    }
}, {
    name: '__attachmets',
    items: [
        '/answer.txt'
    ]
}], {
...

Дополнительные опции:

  • persist: boolean — если установить параметр true, то для обработки файлов будет использовать механизм Persistent Storage
  • buffer: number — размер пакета передаваемого на сервер. По умолчанию равен 1024*1024 (1 Мб)
  • user: string — имя пользователя (применяется в зависимости от реализации)
  • appVersion: string — версия приложения (применяется в зависимости от реализации)
  • step: function — функция обратного вызова. Возвращается при смене этапа (шага) синхронизации
    step: function (message, data) {
        console.log(message);
    },
    
  • status: function — функция обратного вызова. Возвращается статус (процесс) синхронизации
    status: function (message, data) {
        if (data.error) {
            console.error(message);
        } else {
            console.log(message);
        }
    }
    
  • callback: function — функция обратного вызова. Завершение выполнения синхронизации
    callback: function (result) {
        if(result.success == true) {
            
        }
    }

Формат блоков пакета *.bkp

{
    items: { // данные для добавления, обновления, удаления
        table1: [...],
        table2: [...]
    },
    select: { // блок выборки данных из БД
        table1: {
            select: 'id, name, date', // список поле для выборки
            filter: [{ // фильтр
                property: 'code',
                value: '0'   
            }] // можно также передавать сортировку см. http://docs.appcode.pw/docs?project=postgresql-rpc-dbcontext&file=/modules/postgresql-query-creator.js
        }
    },
    append: {}, // синтаксис аналогичен select
    attachments: ['/readme.txt', '/pic.jpg'] // получение файлов ОТ сервера, передача осуществляется другим механизмом
}

items

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

...
audits: [{
    id: '1',
    action_code: 'CE0',
    action_message: 'аудит теста',
    action_date: new Date(),
    app_name: '',
    app_version: '',
    user_name: '',
    region: '',
    __type: 'create',
    __sync: false,
    __tid: '',
    __auto_increment: true,
    __key: 'id'
}]
...

select и append

Выборка данных из БД. append отличается от select тем, что:

  • при обработке select записи и таблицы удаляются (truncate) и полученные результаты select добавляются
  • при обработке append удаление записей не происходит
Print Friendly, PDF & Email