如何通过JS中的Web API从MetaData中获取查找的实体类型

问题描述 投票:0回答:2

在我的应用程序中,我选择了某种实体类型,并通过展开

EntityDefinitions
(
Attributes
) 从
$expand=Attributes
Web API 端点检索该实体的所有字段属性。 对于
'Lookup'
AttributeType
)类型的某个属性,我想知道相关实体的类型。
因为属性请求包含每个属性的大量数据,所以我通过选择一些属性来过滤扩展。不幸的是,似乎无法选择
Targets
属性。因此,我必须请求所有数据(这很慢),或者我正在过滤并且不知道实体类型。

这是我的请求,当省略

Targets
时该请求有效。

`EntityDefinitions?` +
    `$filter=EntitySetName eq '${entityTypeName}'&` +
    `$select=Attributes&` +
    `$expand=Attributes(` +
    `  $select=DisplayName,LogicalName,Targets` +
    `)`

是否可以选择
Targets
属性?

不同的解决方案

在我的用例中,这些方法有其自身的缺点。

  1. 一次性请求所有
    RelationshipDefinitions
    数据。它包含每个实体所需的所有内容。接收到的数据量很大,请求需要相当长的时间。因此,响应应该缓存在用户浏览器的本地存储中。与 EntityDefinitions 类似,仅通过必要的属性过滤请求似乎是不可能的。
  2. 请求所选实体的确切一条数据记录,其中特定查找不为空并包括注释标头,以便存在查找逻辑名称。这样做的缺点是系统中找不到这样的记录。请求数据记录而不是元数据也感觉不对。

示例:账户实体,获取primarycontactid查找字段属性的实体类型。网址、标头和响应:

http://SYSTEM_URL/ORGA_NAME/api/data/v8.2/accounts?$filter=primarycontactid ne null&$top=1
'Prefer': `odata.include-annotations="*"`
"[email protected]": "contact",
  1. 在 C# 中请求元数据并通过自定义操作从 JS 调用代码。
javascript dynamics-crm metadata dynamics-crm-online dynamics-crm-2016
2个回答
1
投票

可以选择
Targets

在为我的问题记下一些注释时,我发现有必要将属性转换为某种派生类型。就我而言,我使用 LookupAttributeMetadata 将其转换为查找类型。在强制转换类型上可以按

Targets
进行过滤,因为派生类型包含
Targets
属性。基本类型 AttributeMetadata 没有。

响应将仅包含查找属性,仅包含属性

LogicalName
DisplayName
Targets

http://SYSTEM_URL/ORGA_NAME/api/data/v8.2/EntityDefinitions(LogicalName='account')/Attributes/Microsoft.Dynamics.CRM.LookupAttributeMetadata?$select=Targets,LogicalName,DisplayName

这是官方记录和解释的:query-metadata-web-api


0
投票

另一种选择是扩大/加入关系。

例如,我使用了以下扩展:

Attributes($select=LogicalName,DisplayName;$filter=IsValidODataAttribute eq true and IsValidForGrid eq true),ManyToOneRelationships($select=ReferencingAttribute,ReferencedEntity)

对于任何 LookupAttribute,您都可以“查找”关系中引用的实体。

© www.soinside.com 2019 - 2024. All rights reserved.