Plugins 如何防止删除父帐户时删除联系人子帐户?

Plugins 如何防止删除父帐户时删除联系人子帐户?,plugins,dynamics-crm,dynamics-365,Plugins,Dynamics Crm,Dynamics 365,在Microsoft Dynamics 365中,我希望删除帐户记录,但阻止删除处于活动状态的任何子联系人。处于非活动状态的联系人应正常删除。如何使用插件实现这一点?不幸的是,Dynamics不允许我们将帐户中的级联删除更改为联系人1-N关系,这意味着每次删除帐户时,所有与该帐户相关的联系人都将被删除。此关系也不能删除 编辑:将下面的插件注册为一个预验证删除,它将起作用(由于@Sxntk解除子记录关联的想法,这要归功于@Sxntk) 是的,但是我们不能用插件实现吗?也许你可以在用插件删除联系人之

在Microsoft Dynamics 365中,我希望删除帐户记录,但阻止删除处于活动状态的任何子联系人。处于非活动状态的联系人应正常删除。如何使用插件实现这一点?

不幸的是,Dynamics不允许我们将帐户中的级联删除更改为联系人1-N关系,这意味着每次删除帐户时,所有与该帐户相关的联系人都将被删除。此关系也不能删除

编辑:将下面的插件注册为一个预验证删除,它将起作用(由于@Sxntk解除子记录关联的想法,这要归功于@Sxntk)


是的,但是我们不能用插件实现吗?也许你可以在用插件删除联系人之前解除记录的关联-in@Sxntk是的,这是一个好主意,在预删除插件中是可行的。在插件/CWAs中使用ExecuteMultipleRequest不是最佳做法,应该避免:我的答案解决了你的问题吗?
public class AccountPreDeletePlugin : IPlugin
{
    public void Execute(IServiceProvider serviceProvider)
    {
        var tracingService = (ITracingService)serviceProvider.GetService(typeof(ITracingService));
        var pluginExecutionContext = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
        var organizationServiceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
        var organizationService = organizationServiceFactory.CreateOrganizationService(pluginExecutionContext.UserId);

        if (pluginExecutionContext.InputParameters.Contains("Target") && pluginExecutionContext.InputParameters["Target"] is EntityReference entityReference)
        {
            var query = new QueryExpression("contact") { NoLock = true };
            query.Criteria.AddCondition("parentcustomerid", ConditionOperator.Equal, entityReference.Id);
            query.Criteria.AddCondition("statecode", ConditionOperator.Equal, 0);

            var entityCollection = organizationService.RetrieveMultiple(query);

            if (entityCollection?.Entities?.Count > 0)
            {
                foreach (var entity in entityCollection.Entities)
                {
                    entity["parentcustomerid"] = null;
                    organizationService.Update(entity);
                }
            }
        }
    }
}