在OData中仅获取实体的属性定义

时间:2016-08-09 04:32:54

标签: odata dynamics-crm

我正在开发一款需要与OData服务进行通信的应用程序(确切地说是Microsoft Dynamics CRM)。我有一个要求,我只需要知道实体拥有的所有属性。

e.g。

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

返回所有联系人,但我只想要联系人的属性定义。

现在[Organization URI]/api/data/v8.1/contacts返回带有值的JSON,但我正在寻找的是联系人实体的模式。它应该返回它所拥有的所有属性(例如firstnamelastname)以及可能的属性类型。

我尝试使用$metadata,但没有运气。是否有可能仅获取有关实体的信息?

任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:3)

Query Metadata using the Web API。之前的答案很接近,但您需要$expand=Attributes来获取属性列表。此外,它还可以获取要在联系人上过滤的所有实体。

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(以及MetadataId,它是该属性的GUID)。

所以第一个$select用于实体的属性。 $expand告诉CRM包含属性。内部$select告诉在属性上返回哪些字段。 $filter确保他们只返回联系人的所有元数据。

答案 1 :(得分:2)

提供的答案描述了如何获取实体的元数据,技术上确实具有给定实体的所有定义。 但是,在使用Web API时,另一种方法是下载Web API的CSDL元数据文档($ metadata)并查找联系人entityType的定义。这是用于生成此文档contact EntityType的数据,并提供Web API使用的特定定义。

您会发现结构存在差异。 ie metadata定义了LookupAttributeMetadata属性,但Web API使用单值导航属性和只读'查找属性'。

有关了解Web API $元数据的信息,请参阅Web API types and operations > Entity types

答案 2 :(得分:1)

如果您正在使用Web 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

的更多示例