【问题标题】:Pre Delete fails with update of Entity CRM2011实体 CRM2011 更新导致预删除失败
【发布时间】: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!");
        }
    }            
}

【问题讨论】:

    标签: c# plugins crm


    【解决方案1】:

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

    【讨论】:

    • 我通过使用 context.depth 属性解决了这个问题。这是为了防止 crm 插件中的递归调用。
    • 哦,对,我不明白这是你原来问题的问题。
    猜你喜欢
    • 1970-01-01
    • 2011-09-30
    • 1970-01-01
    • 2012-11-20
    • 1970-01-01
    • 2013-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多