2012-10-22 81 views
1

我正在使用一個插件,在刪除實體之前應該檢查某些前置條件是否屬實。如果它是假的,我會拋出InvaludPluginExecutionException。這工作得很好,但我的問題是,我有一個其他插件處理更新的實體,當然一些條件是真實的,並刪除鏈接的實體。 您必須明白在帳戶實體中存在一個AccountGroups實體列表。 更新插件關心只有一個被標記爲主要的AccountGroup實體。 如果爲該帳戶添加新的AccountGroup實體,該插件將刪除舊的標記爲主要的AccountGroup實體,並將新的AccountGroup實體添加爲主要實體。 在這種情況下,Update Plugin觸發Pre Delete Plugin並取消刪除步驟。 此外InvalidExecutionException被拋出。Pre刪除失敗,更新實體CRM 2011

有沒有什麼方法可以找出插件在哪裏觸發?例如。更新插件觸發刪除呼叫,不應執行預刪除插件?或者還有其他方法嗎?

代碼預刪除插件的:

[OnPreDelete] 
public void PreventDeletion(IServiceProvider serviceProvider){ 

    var pluginServiceFactory = new PluginServiceFactory(serviceProvider); 
    var targetAccount = pluginServiceFactory.Context.GetTargetEntityReference(); 



    using (var context = new DataContext(pluginServiceFactory.OrganizationService)) 
    { 
     var acgr = (from ac in context.im_customergroupSet 
        where ac.Id == targetAccount.Id 
        select ac).FirstOrDefault(); 


     if (acgr.im_Primary == true) 
     { 
      throw new InvalidPluginExecutionException("Primary Account Groups can not be deleted!"); 
     } 
    }    
} 

回答

1

您可能能夠通過使用SharedVariables採集插件之間傳遞數據解決這個問題,看到MSDN。我相信這應該可以讓你的Update插件將一些標誌添加到刪除插件可以讀取的SharedVariables中,然後你可以從中驅動你的邏輯(例如,如果標誌被設置,不要停止刪除記錄) 。

+0

我使用context.depth屬性解決了問題。這是爲了防止crm插件中的遞歸調用。 – ICantSeeSharp

+0

哦,對,我不明白這是你原來的問題的問題。 –

+0

是的,我可以形容它不是,但沒有問題:) – ICantSeeSharp