预删除失败,更新了Entity CRM 2011

时间:2012-10-22 12:26:38

标签: c# plugins crm

我正在使用一个插件,它应该在删除实体之前检查某些先决条件是否为真。如果它是假的,我会抛出一个InvaludPluginExecutionException。这非常有效,但我的问题是,我有一个其他插件来处理实体的更新,当然有些条件是真的,并删除了链接的实体。 您必须了解在帐户实体中存在AccountGroups实体的列表。 Update Plugin关注只有一个AccountGroup实体被标记为主要实体。 如果向帐户添加新的AccountGroup实体,则插件会删除标记为主要的旧AccountGroup实体,并将新的AccountGroup实体添加为主要实体。 在这种情况下,Update Plugin将触发Pre Delete Plugin并取消删除步骤。 此外,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!");
        }
    }            
}

1 个答案:

答案 0 :(得分:1)

您可以通过使用SharedVariables集合在插件之间传递数据来解决此问题,请参阅MSDN。我相信这应该使你的Update插件能够在delete插件可以读取的SharedVariables中添加一些标志,然后你可以从中驱动你的逻辑(例如,如果设置了标志,不要停止删除记录)