我正在使用一個插件,在刪除實體之前應該檢查某些前置條件是否屬實。如果它是假的,我會拋出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!");
}
}
}
我使用context.depth屬性解決了問題。這是爲了防止crm插件中的遞歸調用。 – ICantSeeSharp
哦,對,我不明白這是你原來的問題的問題。 –
是的,我可以形容它不是,但沒有問題:) – ICantSeeSharp