Получение данных#
OData предоставляет запрашиваемые данные в виде JSON или XML документа (смотря, что мы указали в параметре запроса $format). Рассмотрим таблицу соответствия типов «1С Предприятия» и OData:
Тип «1С Предприятия» | Тип свойства OData |
---|---|
Строка | Edm.String |
Дата | Edm.DateTime |
Число (целое) | Edm.Int16, Edm.Int32, Edm.Int64 |
Число (дробное) | Edm.Double |
Булево | Edm.Boolean |
Ссылка | Edm.Guid |
Перечисление | Edm.String |
Хранилище значения | Состоит из трех свойств*: |
1. | Навигационное свойство; |
2. | <Имя свойства>_Base64Data; |
3. | <Имя свойства>_Type. |
Ссылочный тип | Два свойства: |
1. | Собственно значение ссылки на объект типа Edm.Guid; |
2. | Навигационное свойство. |
Составные типы | Два свойства типа Edm.String: |
1. | Значение фактического типа, выраженное в виде строки; |
2. | Имя фактического типа. |
В таблице символ * означает, что: * С помощью навигационного свойства можно получить данные, хранящиеся в реквизите: o Для типа Картинка – будет получена собственно картинка с соответствующим значением HTTP-заголовка content-type; o Для типа ДвоичныеДанные – будет получен байтовый поток; o Для остальных типов – XDTO-сериализованное значение хранимых данных. * Свойство <Имя свойства>_Base64Data хранит данные, которые могут быть получены с помощью навигационного свойства, только закодированные в Base64. Редактировать данные реквизита типа ХранилищеЗначения можно только с помощью этого свойства. * Свойство <Имя свойства>_Type описывает тип данных, хранимых в реквизите. Может принимать одно и трех значений: o application/octet-stream – двоичные данные; o application/xml+xdto – XDTO-сериализованный объект; o значение HTTP-заголовка content-type, соответствующего картинке, хранящейся в реквизите, например, image/jpeg для картинки формата JPEG. Остальные типы не поддерживаются, и при попытке их чтения будет сгенерирована ошибка c кодом 501. Имена свойств могут оканчиваться на различные суффиксы, а именно: * Key; * Type; * Base64Data.
Теперь рассмотрим подробнее данные суффиксы:
Key
Данный суффикс содержит значение ключа ссылки (GUID) реквизита объекта или независимого регистра сведений без измерений. Для установки отбора по имени реквизита можно использовать данный суффикс, а именно: для установки отбора по ссылочному полю Номенклатура, условие будет выглядеть следующим образом: Номенклатура Key=guid'value'. При этом свойство Номенклатура будет содержать представление номенклатуры с указанным значением ссылки.
Type
Данный суффикс используется для описания реквизита составного типа. Так, если в данных есть поле составного типа Номенклатура, то в документе, который возвращает стандартный интерфейс OData, этому полю будет соответствовать два свойства:
* Номенклатура _Type – будет содержать описание типа значения реквизита в виде строки (тип Edm.String, диспетчеризационное свойство);
* Номенклатура – будет содержать значение реквизита (соответствующего типа).
Перечень допустимых типов, которые могут быть использованы в поле с таким суффиксом, определяется схемой сервиса, который можно получить при запросе полного описания стандартного интерфейса OData. Таким образом, при необходимости установить тип Документ.РасходнаяНакладная, в элемент с суффиксом _Type должно быть записано значение StandardODATA.Document РасходнаяНакладная.
Если значение реквизита составного типа в информационной базе «1С:Предприятия» имеет значение Неопределенно, то диспетчеризационное свойство будет иметь значение StandardODATA.Undefined, а само значение свойства должно игнорироваться.
Пример представления реквизита составного типа:
Коды ошибок В случае ошибочной ситуации возвращается ответ с HTTP-статусом 4XX или 5XX. Статус 4XX информирует об ошибках на стороне клиентского приложения, статус 5XX информирует об ошибке на стороне сервера.
Пример:
настраиваем новый тип для загрузки вложенного файла из Сотрудников в 1С. При загрузке выдает ошибку 404:
502 Timeout
В случае статуса 4XX сервер пытается уточнить причину ошибки и может передать клиентскому приложению дополнительный внутренний код ошибки и информационное сообщение (в виде xml-документа) в теле ответа. Пример:
9
Указание неверного количества аргументов функции.
Попытка передачи аргумента неверного типа.
Указание нереализованной лямбда-функции.