0

こんにちは、ms dynamics crm 2011 のプラグインを作成しようとしています。プラグインは、契約明細から関連レコードを取得し、請求書明細エンティティのレコードを作成することになっています。fetchxml によって返されるレコードが 1 つだけの場合、コードは完全に実行されますが、複数の契約行を持つ契約でループすると、次のエラーがスローされます。

ビジネス プロセス エラー 同じキーを持つアイテムが既に追加されています

各レコードに一意の 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");
}
4

2 に答える 2

1

を使用しているためですAttributes.Add

productdescription属性コレクションは実際にはディクショナリであり、同じキー( 、、quantityなど)をディクショナリに2回追加することはできません。

ロードしたエンティティレコードにはすでにそれらのキーが含まれているため(に含まれているためcolumnset

これを回避する最も簡単な方法は、次を使用することです。invoiceline["quanity"] = quantity;

これにより、そのキーの既存の値が上書きされます。存在しない場合は、新しいキーと値のペアがディクショナリに追加されます。

関連資料:Dictionary.Addメソッド

于 2013-03-05T14:06:44.493 に答える
0

このように入れてみてください:

Entity invoiceLine;
foreach (Entity contractDetail in contractDetails.Entities)
{
    invoiceline = new Entity("invoicedetail");
    ...
}
于 2013-03-05T14:11:43.737 に答える