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