在我的应用程序中,我选择了某种实体类型,并通过展开
EntityDefinitions
(Attributes
) 从 $expand=Attributes
Web API 端点检索该实体的所有字段属性。 对于'Lookup'
(AttributeType
)类型的某个属性,我想知道相关实体的类型。因为属性请求包含每个属性的大量数据,所以我通过选择一些属性来过滤扩展。不幸的是,似乎无法选择 Targets
属性。因此,我必须请求所有数据(这很慢),或者我正在过滤并且不知道实体类型。
这是我的请求,当省略
Targets
时该请求有效。
`EntityDefinitions?` +
`$filter=EntitySetName eq '${entityTypeName}'&` +
`$select=Attributes&` +
`$expand=Attributes(` +
` $select=DisplayName,LogicalName,Targets` +
`)`
Targets
属性?不同的解决方案
在我的用例中,这些方法有其自身的缺点。
RelationshipDefinitions
数据。它包含每个实体所需的所有内容。接收到的数据量很大,请求需要相当长的时间。因此,响应应该缓存在用户浏览器的本地存储中。与 EntityDefinitions 类似,仅通过必要的属性过滤请求似乎是不可能的。示例:账户实体,获取primarycontactid查找字段属性的实体类型。网址、标头和响应:
http://SYSTEM_URL/ORGA_NAME/api/data/v8.2/accounts?$filter=primarycontactid ne null&$top=1
'Prefer': `odata.include-annotations="*"`
"[email protected]": "contact",
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
另一种选择是扩大/加入关系。
例如,我使用了以下扩展:
Attributes($select=LogicalName,DisplayName;$filter=IsValidODataAttribute eq true and IsValidForGrid eq true),ManyToOneRelationships($select=ReferencingAttribute,ReferencedEntity)
对于任何 LookupAttribute,您都可以“查找”关系中引用的实体。