2

当我删除 MarketingList(A) 时,我有一个插件可以触发并使用存储在 MarketingList(A) 上的属性中的 Guid 检索另一个 Marketing List(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();
    }

}

4

2 回答 2

1

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

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

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

我可以看到几种解决此问题的方法。

  1. 使用工作流删除记录,这样它应该始终在网格完成其工作后运行。
  2. 使您的插件在帖子上异步运行,同样,它应该始终在网格完成工作后运行。
  3. 从网格中删除删除按钮,并添加一个自定义功能区按钮,该按钮具有在删除前检查记录是否存在的行为。

作为旁注,您是否知道您实现的插件将执行与级联关系相同的行为?如果将关系设置为级联删除,则不需要任何代码。

于 2012-11-10T18:33:30.263 回答
0

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

于 2012-11-09T12:25:57.793 回答