Javascript 如何通过JS中的Web API从元数据中获取查找的实体类型

Javascript 如何通过JS中的Web API从元数据中获取查找的实体类型,javascript,dynamics-crm,metadata,dynamics-crm-online,dynamics-crm-2016,Javascript,Dynamics Crm,Metadata,Dynamics Crm Online,Dynamics Crm 2016,在我的应用程序中,我选择了某个实体类型,并通过展开属性($expand=attributes)从EntityDefinitionsweb API端点检索该实体的所有字段属性对于类型为'Lookup'(AttributeType)的特定属性,我想知道相关实体的类型。由于属性请求包含每个属性的大量数据,我通过选择几个属性来过滤展开。不幸的是,似乎无法选择Targets属性。因此,我要么请求所有数据(速度很慢),要么进行筛选,不知道实体类型 以下是我的请求,当省略目标时,该请求有效 `EntityDe

在我的应用程序中,我选择了某个实体类型,并通过展开
属性
$expand=attributes
)从
EntityDefinitions
web API端点检索该实体的所有字段属性对于类型为
'Lookup'
AttributeType
)的特定属性,我想知道相关实体的类型。
由于属性请求包含每个属性的大量数据,我通过选择几个属性来过滤展开。不幸的是,似乎无法选择
Targets
属性。因此,我要么请求所有数据(速度很慢),要么进行筛选,不知道实体类型

以下是我的请求,当省略
目标时,该请求有效

`EntityDefinitions?` +
    `$filter=EntitySetName eq '${entityTypeName}'&` +
    `$select=Attributes&` +
    `$expand=Attributes(` +
    `  $select=DisplayName,LogicalName,Targets` +
    `)`
是否可以选择
目标
属性? 不同的解决方案方法

在我的用例中,这些方法都有自己的缺点

  • 一次请求所有
    关系定义
    数据。它包含每个实体所需的所有信息。接收到的数据量很大,请求需要几秒钟的时间。因此,响应应该缓存在用户浏览器的本地存储中。仅通过必要的属性过滤请求似乎不可能与EntityDefinitions相同
  • 请求所选实体的确切一条数据记录,其中特定查找不为null,并包括注释标头,以便显示lookuplogical名称。这有一个缺点,即在系统中找不到这样的记录。请求数据记录而不是元数据也是错误的
  • 示例:帐户实体,获取primarycontactid查找字段属性的实体类型。Url、标题和响应:

    http://SYSTEM_URL/ORGA_NAME/api/data/v8.2/accounts?$filter=primarycontactid ne null&$top=1
    
  • 在C#中请求元数据,并通过自定义操作从JS调用代码
  • 可以选择
    目标
    在为我的问题草草记下一些注释时,我发现有必要将属性强制转换为某个派生类型。在我的例子中,我将其转换为具有的查找类型。可以在强制类型上按
    Targets
    进行过滤,因为派生类型包含
    Targets
    属性。基类型不存在

    响应将仅包含查找属性,仅包括属性
    LogicalName
    DisplayName
    目标

    http://SYSTEM_URL/ORGA_NAME/api/data/v8.2/EntityDefinitions(LogicalName='account')/Attributes/Microsoft.Dynamics.CRM.LookupAttributeMetadata?$select=Targets,LogicalName,DisplayName
    
    这是官方记录的,并在此处解释:

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