К сожалению, Dynamics не позволяет нам изменять отношение каскадного удаления в учетной записи к контакту 1-N, что означает, что при каждом удалении учетной записи будут удаляться все связанные с ней контакты. Эта связь также не может быть удалена.
РЕДАКТИРОВАТЬ: Зарегистрируйте плагин ниже как PreValidation Удалите, и он будет работать (Благодарим @Sxntk за идею удаления дочерних записей)
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);
}
}
}
}
}