【问题标题】:Is it possible to check if an Entity is "Activity" enabled in Dynamics CRM programatically?是否可以通过编程方式检查实体是否在 Dynamics CRM 中启用了“活动”?
【发布时间】:2015-04-21 09:34:18
【问题描述】:

在 Dynamics CRM 2013 中创建自定义实体时,您可以选择为该实体启用活动(即在实体配置屏幕中,您可以选中“活动”复选框)。

这允许将活动记录链接到新的自定义实体。

我们有一个用 C# 开发的 CRM 插件,需要检查自定义实体是否启用了“活动”,因为插件需要创建链接到自定义实体记录的活动记录。

有没有办法检查实体是否以编程方式启用了“活动”?

【问题讨论】:

  • 我做了一个快速检查,看起来您必须评估实体的 1:n 关系才能找到答案。所以是的,肯定有一种方法可以以编程方式找出答案。这只是如何检索此信息的最佳性能问题。如果您有兴趣,我可以发布一个基本示例供您开始使用。
  • 嗨 Filburt,是的,就是这样,感谢您的回复。

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


【解决方案1】:

您可以使用RetrieveEntityRequest 查明实体是否已启用活动。 RetrieveEntityResponse 包含一个 EntityMetadata 对象,其中包含 OneToManyRelationships

当实体与 activitypointer 实体有关系时,为活动启用。

代码示例:

var metaResponse = (RetrieveEntityResponse)proxy.Execute(new RetrieveEntityRequest
{
    EntityFilters = EntityFilters.Relationships,
    LogicalName = "account",
    RetrieveAsIfPublished = false
});

bool isActivityEnabled =
    metaResponse.EntityMetadata.OneToManyRelationships
    .Any(r => r.ReferencingEntity == "activitypointer");

不要设置RetrieveAsIsPublished = true。当然设置这个属性也可以省略,但为了清楚起见我把它留下了。致谢 SimonM,请参阅下面的 cmets 部分。

【讨论】:

  • 看起来不错。是否有可能实体记录启用了“活动”,但没有任何链接的活动指针记录,然后导致误报?
  • 不,那是不可能的。 EntityMetadata 为您提供有关 Dynamics CRM 租户的数据模型的详细信息。这与数据库中实际存在的数据无关。
  • 这完成了工作,在此之前花了几个小时在元数据中寻找布尔值。很好的答案谢谢!
  • 通过网络搜索找到了这个答案,所以对于登陆这里的其他人:使用RetrieveAsIfPublished = true 不是一个好主意,尤其是在经常运行的代码中。此标志将绕过元数据缓存并评估所有配置以确定实体的外观元数据在发布之前的样子。
  • @SimonM:好点子!写这个答案时不知道。
猜你喜欢
  • 1970-01-01
  • 2018-03-14
  • 2016-12-10
  • 2011-03-07
  • 2011-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多