【问题标题】:Getting only property definitions of entity in OData仅获取 OData 中实体的属性定义
【发布时间】:2016-08-09 04:32:54
【问题描述】:

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

例如

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

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

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

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

任何帮助将不胜感激。

【问题讨论】:

  • 获取实体信息的唯一方法是从服务元数据。您可以访问代码中的元数据对象吗?

标签: odata dynamics-crm


【解决方案1】:

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(以及作为该属性 GUID 的 MetadataId)。

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

【讨论】:

  • 非常感谢您的详细解答。只要我被允许,就会奖励你赏金:-)
  • 虽然这对我很有帮助,但我想再问一个问题。目前我得到了所有 270 个属性,有什么方法可以获取重要的属性或我们只能从 UI 编辑的属性?
  • 您可以检索 AttributeOf (api/data/v8.1/EntityDefinitions?$select=LogicalName&$expand=Attributes($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 这是一个粗略的简化,因为...
  • 不同的表单可以通过安全分配给不同的用户。多个表单可以应用于单个用户。但是对于开箱即用的 CRM,这应该会为您提供一个结果。
  • 然后您将解析 XML (formxml),以交叉引用控制节点的 datafieldname 属性以及上面获取的元数据。
【解决方案2】:

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

您会看到结构上存在差异。即元数据定义 LookupAttributeMetadata 属性,但 Web API 使用单值导航属性和只读“查找属性”。

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

【讨论】:

    【解决方案3】:

    如果您正在使用 Web Api(看起来像),那么您可以检索具有 AttributeMetadata 的导航属性的 EntityMetadata,该属性将描述属性(又名;字段、属性)。

    [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 的更多示例

    【讨论】:

    • 尝试为“联系人”调用 EntityDefinitions 时找不到导航属性。你能帮我一下吗?
    • 非常感谢您抽出宝贵的时间。我已经尝试过这样做。我想要得到的是该实体的属性。例如通讯录具有firstnamelastname 属性。我想获取该实体的架构。
    猜你喜欢
    • 1970-01-01
    • 2017-04-18
    • 1970-01-01
    • 2017-04-08
    • 2016-09-07
    • 1970-01-01
    • 2016-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多