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