【发布时间】:2012-10-22 12:26:38
【问题描述】:
我正在使用一个插件,它应该在删除实体之前检查某些先决条件是否为真。如果它是假的,我会抛出一个InvaludPluginExecutionException。这工作得很好,但我的问题是,我有另一个插件来处理实体的更新,当然有些条件是真的,并删除了链接的实体。
您必须了解在帐户实体中存在AccountGroups 实体列表。
更新插件关心只有一个AccountGroup 实体被标记为主要实体。
如果向帐户添加新的 AccountGroup 实体,插件将删除标记为主要的旧 AccountGroup 实体,并将新的 AccountGroup 实体添加为主要实体。
在这种情况下,更新插件会触发预删除插件并取消删除步骤。
进一步抛出InvalidExecutionException。
有什么方法可以找出插件在哪里触发?例如。更新插件触发删除调用,不应该执行预删除插件?或者还有其他方法吗?
预删除插件代码:
[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!");
}
}
}
【问题讨论】: