Dynamics CRM Business Process Error已添加具有相同键的项
本文关键字:添加 Business CRM Process Error Dynamics | 更新日期: 2023-09-27 18:02:13
你好,我想写一个ms dynamics crm 2011插件。插件从合同行获取相关记录,然后应该为发票行实体创建记录。如果fetchxml只返回一条记录,则代码运行完美,但是如果它循环查找包含多条合同行的合同,则抛出以下错误:
业务流程错误已经添加了具有相同键的项
我想我需要一个唯一的id为每条记录或一些东西,请看看我下面的代码。
Entity invoiceline = new Entity("invoicedetail");
foreach (Entity contractdetail in contractdetails.Entities)
{
tracingService.Trace("loop no. " + loopint + " " + "InvoiceID: " + stringinvoiceid);
loopint++;
invoiceline["invoiceid"] = new EntityReference("invoice", invoiceid);
//collect data from fetchxml
var title = contractdetail.Attributes["title"];
decimal quantity = Convert.ToDecimal(contractdetail.Attributes["initialquantity"]);
var price = contractdetail.Attributes["price"];
bool booleanover = true;
//add to invoiceline array
invoiceline.Attributes.Add("productdescription", title);
invoiceline.Attributes.Add("quantity", quantity);
invoiceline.Attributes.Add("priceperunit", price);
invoiceline.Attributes.Add("isproductoverridden", booleanover);
//invoiceline.Attributes.Add("invoicedetailid", invoiceid);
//add too database
service.Create(invoiceline);
tracingService.Trace("Created:" + title + " record");
}
这是因为你使用的是Attributes.Add
。
属性集合实际上是一个字典,您不能将相同的键(productdescription
, quantity
等)添加到字典两次。
所以您已经加载的实体记录已经具有这些键(因为您将其包含在columnset
中)
避免这种情况最简单的方法就是使用:invoiceline["quanity"] = quantity;
这将覆盖该键的现有值-或者如果它不存在,则向字典中添加一个新的键值对。
相关阅读:字典。添加方法。
试着这样写:
Entity invoiceLine;
foreach (Entity contractDetail in contractDetails.Entities)
{
invoiceline = new Entity("invoicedetail");
...
}