2.1.7 Пакетные команды
Пакетные команды позволяют выполнять за один запрос несколько команд.
Пакетная команда использует метод HTTP POST. В теле запроса содержится пакет в виде текста. Принимается только запрос с Content-Type: application/x-www-form-urlencoded; charset=UTF-8.
Адрес для вызова пакетной команды формируется как: <адрес сервиса>/CoreHost/OData/$changes.
В теле запроса отправляется массив объектов в формате JSON.
Формат пакета команд
Пакет команд состоит из объектов со следующими свойствами:
method – команда (POST,DELETE или MERGE).
url – ресурс: путь к объекту или вызов сервисного метода с параметрами, аналогичен строке запроса, которая формируется для GET запроса, без адреса сервиса и ./CoreHost/OData/.
data – данные объекта.
Виды команды:
- POST – создает объект с данными, указанными в параметрев data;
- DELETE – удаляет указанный объект;
- MERGE – изменяет указанный объект согласно данным в параметре data.
Путь к объекту содержит последовательные наименование типа объекта или списка объектов со значением идентификатора в круглых скобках, если он уже существует, и слэш («/») в качестве разделителя уровня вложенности. Для добавляемого объекта его идентификатор в пути не указывается.
Например:
|
[{"method":"MERGE", "url":"DOC_RC(4568)","data":{"NOTE":"3rv3v3rv3vrv3v3v"}},
{"method":"DELETE", "url":"DOC_RC(4568)/DOC_WHO_List(4569)"},
{"method":"POST", "url":"DOC_RC(4568)/DOC_WHO_List","data":{"ISN_DOC_WHO":-19999,"ISN_DOC":4568,"ORDERNUM":2,"DUE_PERSON":"0.2SD.2SR."}}]
|
Результат пакетной команды
Результат пакетной команды возвращается в виде JSON массива, где каждый элемент по порядку соответствует команде в пакете. В каждом присутствует значение statusCode, которое соответствует коду состояния HTTP (201 – «создано», 204 – «нет содержимого» и т.д.). В свойстве data, если таковое есть, содержится дополнительная информация.
При создании объекта возвращается только его идентификатор. Содержимое нового объекта получается командой чтения данных.
Например:
|
[{"statusCode":204},
{"statusCode":204},
{"statusCode":201,"data":{"OData.metadata":"../$metadata#MapItemInt","ID":4574,"TempID":-19999}}]
|
