是否可以通过编程方式检查实体是否在 Dynamics CRM 中启用 "Activity"?

Is it possible to check if an Entity is "Activity" enabled in Dynamics CRM programatically?

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

这允许 Activity 条记录链接到新的自定义实体。

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

有没有办法检查实体是否以编程方式 "Activity" 启用?

您可以使用 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");

Do not set RetrieveAsIsPublished = true. Of course setting this property can as well be omitted, but I left it in sake of clarity. Credits go to SimonM, see comments section below.