我正在开发一款需要与OData服务进行通信的应用程序(确切地说是Microsoft Dynamics CRM)。我有一个要求,我只需要知道实体拥有的所有属性。
e.g。
[Organization URI]/api/data/v8.1/contacts
返回所有联系人,但我只想要联系人的属性定义。
现在[Organization URI]/api/data/v8.1/contacts
返回带有值的JSON,但我正在寻找的是联系人实体的模式。它应该返回它所拥有的所有属性(例如firstname
,lastname
)以及可能的属性类型。
我尝试使用$metadata
,但没有运气。是否有可能仅获取有关实体的信息?
任何帮助将不胜感激。
答案 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