【问题标题】:Resolve entity id to entity type in MS Dynamics CRM在 MS Dynamics CRM 中将实体 ID 解析为实体类型
【发布时间】:2014-12-01 18:03:27
【问题描述】:

你知道系统中有没有类似全球MS CRM实体的参考书?

我需要将实体 ID 解析为实体类型,而不需要检查每个实体是否存在给定的 GUID。

有可能吗?

【问题讨论】:

  • 请问为什么存在这个要求?除了一些 SQL 工作之外,很少有记录 GUID 没有其他信息,例如逻辑名称或对象类型代码。
  • 这个要求确实很特别——就是在操作前Retrieve上找出annotation链接到哪个实体。从查询定义中可以获得被引用实体的 GUID,但不能获得它的类型。
  • 如果您正在处理annotation,您有一个ObjectTypeCode。我在下面发布了一个关于如何根据 OTC 值查询实体逻辑名称的答案。我建议您更新您的问题以更好地描述实际要求。

标签: dynamics-crm-2011 dynamics-crm dynamics-crm-2013


【解决方案1】:

我不知道任何支持的方式,但我相信您可以对数据库中的 PrincipalObjectAccess 表进行 SQL 查询并检索 ObjectTypeCode 的值,其中 ObjectId 是 GUID。

【讨论】:

  • 实际上,即使通过常规的OrganizatinService 调用也可以检索 POA 对象,但这仍然不是有效的方法。我相信 POA 条目并不总是被创建,即如果实体遵循常规的安全方法,无一例外,比如共享创建......
【解决方案2】:

对于annotation,您需要查看objecttypecode 字段以确定objectid 的实体类型。

您可以在代码中生成实体逻辑名称和对象类型代码列表作为Dictionary 对象(这将为您提供最快的性能,但需要您知道系统中的所有实体类型)编译时间)或(如果您使用 CRM 2011 UR12+ 或 CRM 2013)您可以发送MetadataQuery。

您可以在此处阅读有关执行元数据查询的更多信息:http://bingsoft.wordpress.com/2013/01/11/crm-2011-metadata-query-enhancements/

满足您要求的示例代码:

var objTypeCode = [INTEGER] //Make this this the annotation.objecttypecode

MetadataFilterExpression entityFilter = new MetadataFilterExpression(LogicalOperator.And);
EntityFilter.Conditions.Add(new MetadataConditionExpression("ObjectTypeCode", MetadataConditionOperator.Equals, objTypeCode);
EntityQueryExpression entityQueryExpression = new EntityQueryExpression()
{
     Criteria = entityFilter
};
RetrieveMetadataChangesRequest retrieveMetadataChangesRequest = new RetrieveMetadataChangesRequest()
{
     Query = entityQueryExpression,
     ClientVersionStamp = null
};

RetrieveMetadataChangesResponse response = (RetrieveMetadataChangesResponse)orgService.Execute(retrieveMetadataChangesRequest);

您可以减少检索到的元数据,以获得更好的性能,如下所示:How to get the CRM Entity Name from the Object Type Code of a RegardingID?

【讨论】:

    猜你喜欢
    • 2021-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-19
    • 2012-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多