2016-08-09 2 views
3

Я работаю над приложением, которое требует связи с сервисом OData (точнее, Microsoft Dynamics CRM). У меня есть требование, когда мне нужно только знать, что у всех свойств есть у объекта.Получение только определений свойств объекта в OData

например.

[Organization URI]/api/data/v8.1/contacts 

возвращает все контакты, однако мне нужны только определения свойств контакта.

Прямо сейчас [Organization URI]/api/data/v8.1/contacts возвращает JSON со значениями, однако то, что я ищу, является чем-то вроде схемы контактов. Он должен вернуть мне все свойства, которые он имеет (например, firstname, lastname) и, возможно, тип свойств.

Я пробовал использовать $metadata, но вам не повезло. Возможно ли получить информацию об объекте?

Любая помощь будет оценена по достоинству.

+0

Единственный способ получить информацию о сущности от метаданных службы. У вас есть доступ к вашему объекту метаданных внутри вашего кода? –

ответ

2

В полученных ответах описывается, как получить метаданные для объекта, который технически имеет, имеет все определения для данного объекта. Однако при использовании веб-API альтернативой было бы загрузить документ метаданных CSDL ($ метаданные) для веб-API и искать определение типа entityType. Это данные, используемые для создания этой документации contact EntityType, и предоставляет конкретное определение, используемое веб-API.

Вы увидите, что разница в конструкции. то естьметаданные определяют атрибуты LookupAttributeMetadata, но веб-API использует свойства однозначной навигации и свойства поиска только для чтения.

Для получения дополнительной информации, чтобы понять $ метаданных Web API, см Web API types and operations > Entity types

1

Если вы используете веб-Api (похоже, что вы есть), вы можете получить EntityMetadata, у которого есть свойство навигации для AttributeMetadata, в котором будут описаны атрибуты (ака; поля, свойства).

[Organization URI]/api/data/v8.1/EntityDefinitions

Use the Web API with CRM metadata

Например: GET [Organization URI]/api/data/v8.1/EntityDefinitions?$select=DisplayName,IsKnowledgeManagementEnabled,EntitySetName&$filter=SchemaName eq 'Contact' HTTP/1.1

Дальнейшие примеры на Query Metadata using the Web API

+0

Не удалось найти навигационное свойство при попытке вызвать EntityDefinitions для «Контакты». Можете ли вы мне немного помочь? –

+0

Большое вам спасибо за ваше время. Я уже пытался это сделать. То, что я пытаюсь получить, - это свойства этого объекта. например Контакты имеют свойства 'firstname',' lastname'. Я хочу получить схему этого объекта. –

3

См Query Metadata using the Web API. Предыдущий ответ близок, но вам нужен $expand=Attributes, чтобы получить список атрибутов. Кроме того, он получает все объекты, в которых вы хотите фильтровать Contact.

GET [Organization URI]/api/data/v8.1/EntityDefinitions?$select=LogicalName&**$expand=Attributes($select=LogicalName)**&$filter=SchemaName eq 'Contact' 

В возвращаемом JSON вы найдете атрибуты в

value[0].Attributes 

Что является массивом. В этом случае я $select=LogicalName, поэтому каждый из них имеет свойство LogicalName (а также метаданные, которое является идентификатором GUID для этого свойства).

Итак, первые $select предназначены для объектов недвижимости. $expand сообщает CRM о включении атрибутов. Внутренний $select сообщает, какие поля возвращать по атрибуту. $filter гарантирует, что они возвратят только эти метаданные для Contact.

+0

Большое вам спасибо за подробный ответ. Принесу вам награду, как только мне позволено :-) –

+0

Хотя это действительно помогло мне, я хотел задать еще один запрос. В настоящее время я получаю все 270 свойств, есть ли способ получить важные свойства или свойства, которые мы можем редактировать только из пользовательского интерфейса? –

+0

Вы можете получить AttributeOf (api/data/v8.1/EntityDefinitions? $ Select = LogicalName & $ expand = Атрибуты ($ select = LogicalName, AttributeOf) & $ filter = SchemaName eq 'Contact') и исключить поля, где AttributeOf не ноль. Это логические столбцы (например, имя для поля GUID) и фактически не хранятся в таблице. Для полей в форме вам нужно будет получить форму (SystemForm) для этого объекта: /api/data/v8.1/systemforms?$select=formxml&$filter=objecttypecode eq 'contact' и введите eq 2 и formactivationstate eq 1 Это простое упрощение, потому что ... –

Смежные вопросы