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");
}

Dynamics CRM Business Process Error已添加具有相同键的项

这是因为你使用的是Attributes.Add

属性集合实际上是一个字典,您不能将相同的键(productdescription, quantity等)添加到字典两次。

所以您已经加载的实体记录已经具有这些键(因为您将其包含在columnset中)

避免这种情况最简单的方法就是使用:invoiceline["quanity"] = quantity;

这将覆盖该键的现有值-或者如果它不存在,则向字典中添加一个新的键值对。

相关阅读:字典。添加方法。

试着这样写:

Entity invoiceLine;
foreach (Entity contractDetail in contractDetails.Entities)
{
    invoiceline = new Entity("invoicedetail");
    ...
}