Как предотвратить удаление дочернего контакта при удалении родительского аккаунта? - PullRequest
0 голосов
/ 20 марта 2019

В Microsoft Dynamics 365 я хочу удалить учетную запись, но предотвратить удаление любых дочерних контактов, которые находятся в активном состоянии. Контакты в неактивном состоянии должны быть удалены как обычно. Как я могу добиться этого с помощью плагина?

1 Ответ

1 голос
/ 20 марта 2019

К сожалению, 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);
                }
            }
        }
    }
}
...