CRM 2011插件(消息:删除,预验证)多重删除警告

时间:2012-11-09 11:08:38

标签: plugins dynamics-crm-2011

当我删除MarketingList(A)时,我有一个插件,使用存储在MarketingList(A)上的属性中的Guid触发并检索另一个营销列表(B)。

如果我选择MarketingList(A)并将其删除,则会正确删除MarketingList(B)。但是,当我选择(A& B)或网格上的所有记录时,我有一个警告: “发生了错误。所选操作未完成一个或多个记录”。 警告后,记录将被删除。

感谢任何帮助!

插件:

Message: **Delete**<br>
PrimaryEntity: **list**<br>
Stage of Execution: **Pre-Validation**.

代码:

if (context.MessageName == "Delete")
{
    using (var crm = new XrmServiceContext(service))
    {
        List listToDelete = crm.ListSet.Where(p => p.Id == context.PrimaryEntityId).SingleOrDefault();
        List retrievedList = crm.ListSet.Where(p => p.Id == new Guid(listToDelete.tph_WitnessMarketingListID)).SingleOrDefault();
        if (retrievedList == null) return;
        crm.DeleteObject(retrievedList);
        crm.SaveChanges();
    }

}

2 个答案:

答案 0 :(得分:1)

我不确定你是否能够避免这种情况(至少在目前的设计中)。

我相信你是正确的,问题是网格试图删除已被删除的东西。

我怀疑在尝试删除记录之前,网格控件没有检查记录是否存在。我不指望它;刚刚给出了一个要删除的东西列表,假设它们仍然存在似乎是合理的。

我可以通过几种方法来解决这个问题。

  1. 使用工作流删除记录,这样它应该在网格完成工作后始终运行。
  2. 让你的插件在帖子上异步运行,再次这样它应该总是在网格完成工作后运行。
  3. 从网格中删除删除按钮,并添加带有行为的自定义功能区按钮,以便在删除之前检查记录是否存在。
  4. 作为旁注,您是否知道您实施的插件将执行与级联关系相同的行为?如果将关系设置为级联删除,则不需要任何代码。

答案 1 :(得分:0)

假设您只在A的字段(tph_WitnessMarketingListID)中存储了B的id字符串。可能在A之前删除了B,因此删除可能失败。尝试调试插件以查看失败的行。