1

Можно ли удалить объект, пока он все еще находится в транзакции обновления плагина?динамика crm плагин удалить объект во время сообщения об обновлении

Кажется, что следующий код не работает. Мне нужно удалить объект, когда его обновлены и некоторые другие обстоятельства

Что-то вроде:

protected void ExecutePosAnnotationtUpdate(LocalPluginContext localContext) 
{ 
    if (localContext == null) 
    { 
     throw new ArgumentNullException("localContext"); 
    } 

    if (localContext.PluginExecutionContext.Depth > 1) return; 


    Entity postEntityImage = null; 
    if (localContext.PluginExecutionContext.PostEntityImages.Contains("PostImage")) 
    { 
     if (localContext.PluginExecutionContext.PostEntityImages["PostImage"] != null) 
     { 
      postEntityImage = localContext.PluginExecutionContext.PostEntityImages["PostImage"]; 
     } 
    } 

    Entity preEntityImage = null; 
    if (localContext.PluginExecutionContext.PreEntityImages.Contains("PreImage")) 
    { 
     if (localContext.PluginExecutionContext.PreEntityImages["PreImage"] != null) 
     { 
      preEntityImage = localContext.PluginExecutionContext.PreEntityImages["PreImage"]; 
     } 
    } 

    if ((bool)postEntityImage.Attributes["isdocument"]) 
    { 
     if (some condition) 
      localContext.OrganizationService.Delete(postEntityImage.LogicalName, postEntityImage.Id); 
    } 
} 

`

+0

Вы пытались зарегистрировать свой плагин на этапе обновления async? –

+0

Мне любопытно: пытаетесь ли вы запретить пользователям загружать файлы в заметки? – Alex

+0

@Alex :) Да, почти все правильно. Я хочу переместить вложение на событие обновления. – user3499805

ответ

1

Поскольку вы обновляете, запись есть в Target.

public void Execute(IServiceProvider serviceProvider) 
{ 
    var context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext)); 
    var serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory)); 
    var service = serviceFactory.CreateOrganizationService(context.UserId); 

    var target = context.InputParameters["Target"] as Entity; 
    var condition = /* whatever */ 
    if(condition) 
    { 
     service.Delete(target.LogicalName, target.Id); 
    } 
} 

Работа, как ожидается, при подключении к Update сообщениям, Post-Operation, Asynchronous. Работает внутри Sandbox, также.

Записи не будет исчезнуть сразу, это займет некоторое время (~ 20 секунд на моей площадке на месте). Если вы сделаете это Synchronous, он по-прежнему будет работать, но предупреждения появятся, потому что данные исчезнут при обработке CRM во время обновления.