Предупреждение | ||
---|---|---|
| ||
|
Общие сведения
Протокол и точки подключения
- Обмен данными осуществляется посредством передачи xml документов по протоколу HTTP
- Конечная точка имеет вид http(s)://%адрес сервера Grotem%/%имя решения%/admin/%метод%, номер порта зависит от конфигурации web сервера IIS (по умолчанию 80 для http и 443 для https), например:
http://server.cloudapp.net/agent/admin/uploaddata2 - Используется "Basic" авторизация, имя пользователя - "admin", пароль - пароль решения.
- Сервер поддерживает обмен сжатыми данными, клиент должен указать значение "gzip" или "deflate" в заголовке "content-encoding" и(или) "accept-encoding"
- Кодировка - UTF-8
Методы
UploadData2 (POST)
- Загружает данные на сервер.
- Структура xml документа:
<?xml version="1.0" encoding="UTF-8"?>
<Root>
<RegionalSettings NumberDecimalSeparator="" NumberGroupSeparator=""/>
<Rows>
<Row _Type="%Тип данных%" _RS="%статус строки%" Id="%GUID объекта%" ...%атрибуты объекта%>
<%Подчиненная таблица% Key="%ключ строки%">
<Row LineNumber="%номер строки%" ...%атрибуты строки%/>
<Row LineNumber="%номер строки%" ...%атрибуты строки%/>
</%Подчиненная таблица%>
</Row>
</Rows >
</Root> - Статусы строки: "0" - новая запись, "1" - измененная запись, "2" - удаленная запись, "3" - помеченная на удаление
- Типы данных - имя типа объекта, например "Catalog.Outlet"
- Подчиненные таблицы - объект может иметь 0 или более подчиненных таблиц.
- Ключ строки - одно или несколько названий полей подчиненной таблицы, разделенные запятой. Необязательный атрибут. От его наличия зависит способ которым сервер изменит объект на сервере. Если ключ строки не указан, то при записи сервер сначала удалит все строки из подчиненной таблицы а затем вставит из файла. При наличии ключа сервер будет пытаться найти запись и обновить ее, или вставить если не найдет. Рекомендуется всегда указывать ключ, это позволит снизить трафик между мобильным агентом и сервером, предотвратить рост трекинговых таблиц.
- В необязательном теге RegionalSettings указываются значения разделителей целой и дробной частей числа, групп разрядов.
- Возвращаемое значение - "ок" в случае успеха или текст ошибки в противном случае.
- Пример: Обмен данными с сервером БИТ:Мобайл
- Команда -ud утилиты utils.exe использует метод UploadData2 для загрузки данных.
UploadData2Async (POST)
- Асинхронная версия UploadData2
- Возвращает GUID сессии загрузки и продолжает работу в фоновом режиме.
- Для получения статуса сессии следует использовать метод AsyncTaskStatus
UploadData3 (POST)
- Загружает данные на сервер
- Загрузка аналогична UploadData2, за исключением интерпретации атрибута "_RS". Если UploadData2 строго выполняет действие согласно значению атрибута, то UploadData3 проверяет существование объекта в базе и выполнит вставку если объекта нет и обновление если есть не зависимо от указанного в "_RS" значения.
- За счет дополнительных проверок работает чуть медленнее, для первоначальной загрузки данных в базу рекомендуется использовать метод UploadData2 со значением "_RS" равным нулю.
- Возвращаемое значение - "ок" в случае успеха или текст ошибки в противном случае.
UploadData3Async (POST)
- Асинхронная версия UploadData3
- Возвращает GUID сессии загрузки и продолжает работу в фоновом режиме.
- Для получения статуса сессии следует использовать метод AsyncTaskStatus
DownloadData (POST)
- Получает данные с сервера
Клиент формирует уникальный номер сессии и передает его серверу вместе со списком типов необходимых объектов с просьбой вернуть новые или измененные с момента последнего сеанса данные. После обработки клиент должен подтвердить получение данных с помощью метода "DownloadDataCommit"
Сервер возвращает данные, измененные с момента последней подтвержденной сессии загрузки.
- Структура запроса
<?xml version="1.0" encoding="UTF-8"?>
<Request Session="%GUID сессии%">
<Entity Name="%Тип данных%"/>
<Entity Name="%Тип данных%"/>
</Request> - Возвращаемое значение - xml document
DownloadDataCommit (POST)
- Помечает на сервере сессию загрузки данных как успешную.
- Сервер возвращает данные, измененные с момента последней подтвержденной сессии загрузки.
- Структура запроса
<?xml version="1.0" encoding="UTF-8"?>
<Request Session="%GUID сессии%">
</Request> - Возвращаемое значение - "ок" в случае успеха или текст ошибки в противном случае.
DownloadDeleted (GET)
- Возвращает список объектов, помеченных на удаление.
- Пример: Обмен данными с сервером БИТ:Мобайл
CheckIfExists (POST)
- Возвращает список объектов, не существующих в базе данных.
- Структура запроса:
<?xml version="1.0"?>
<Request>
<Entity Name="%Тип объекта%">
<Row Id="%GUID объекта%"/>
</Entity>
</Request> - Структура ответа:
<?xml version="1.0"?>
<Root>
<Entity Name="%Тип объекта%">
<Row Id="%GUID объекта%"/>
</Entity>
</Root> - Пример запроса: Обмен данными с сервером БИТ:Мобайл
- Пример ответа: Обмен данными с сервером БИТ:Мобайл
AsyncTaskStatus (GET)
- Возвращает статус сессии асинхронной загрузки данных
- Возможные значения: "ok", "xxx completed.." (где xxx - количество обработанных объектов), или текст ошибки.
- Пример запроса: http://server.cloudapp.net/agent/admin/asynctaskstatus/542EF0E8-C178-406E-BF55-800BEE853AD9
DownloadDeviceLog (GET)
- Возвращает логи обмена мобильных агентов с сервером - содержимое таблицы DeviceLog.
Реализация
Сценарии обмена
- В 1С конфигурациях для взаимодействия с платформой Grotem существует регистр сведений "ChangedData", который с помощью подписок на события наполняется ссылками на новые, измененные или помеченные на удаление объекты.
- Для выгрузки данных на сервер обработка 1С, которая занимается обменом формирует xml документ на основе данных из регистра и отправляет его серверу (UploadData2 или UploadData3). В случае если сервер вернул "ок" - регистр очищается.
- Для загрузки данных с сервера обработка формирует уникальный ключ сессии со списком необходимых типов данных и отправляет его серверу (DownloadData). В случае успешной обработки полученных данных обработка вызывает DownloadDataCommit для фиксации успешной сессии загрузки.
- Обмен может быть настроен в автоматическом режиме с помощью регламентного задания или запуска процесса 1cv8.exe планировщиком заданий Windows
Пример отправки данных из 1С
//RequestFileName содержит данные для отправки на сервер
//сжимаем данные
ZipFileName = GetTempFileName(".zip");
ZipFile = New ZipFileWriter(ZipFileName, , , ZIPCompressionMethod.Deflate, ZIPCompressionLevel.Optimal);
ZipFile.Add(RequestFileName, ZIPStorePathMode.StoreRelativePath, ZIPSubDirProcessingMode.ProcessRecursively);
ZipFile.Write();
//отправляем
Connection = New HTTPConnection("server.cloudapp.net",80,"admin", "S0mePassword");
ResultFileName = GetTempFileName();
HeaderHTTP = New Map();
HeaderHTTP.Insert("Content-Encoding", "deflate");
Connection.Post(ZipFileName,"/webapp/admin/uploaddata2", ResultFileName, HeaderHTTP);
//результат
Result = New TextDocument();
Result.Read(ResultFileName, TextEncoding.UTF8);
For C = 1 To Result.LineCount() Do
Message(Result.GetLine(C));
EndDo;