当我删除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();
}
}
答案 0 :(得分:1)
我不确定你是否能够避免这种情况(至少在目前的设计中)。
我相信你是正确的,问题是网格试图删除已被删除的东西。
我怀疑在尝试删除记录之前,网格控件没有检查记录是否存在。我不指望它;刚刚给出了一个要删除的东西列表,假设它们仍然存在似乎是合理的。
我可以通过几种方法来解决这个问题。
作为旁注,您是否知道您实施的插件将执行与级联关系相同的行为?如果将关系设置为级联删除,则不需要任何代码。
答案 1 :(得分:0)
假设您只在A的字段(tph_WitnessMarketingListID)中存储了B的id字符串。可能在A之前删除了B,因此删除可能失败。尝试调试插件以查看失败的行。