2013-03-05 4 views
0

안녕하세요, ms dynamics crm 2011 용 플러그인을 작성하려고합니다. 플러그인이 계약서에서 관련 레코드를 가져온 후 인보이스 라인에 대한 레코드를 생성해야합니다. 실재. fetchxml에 의해 하나의 레코드가 반환되는 경우 코드가 완벽하게 실행되지만 계약선이 둘 이상인 계약에 대해 루프를 돌리면 다음 오류가 throw됩니다.다이나믹 CRM 비즈니스 프로세스 오류 동일한 키가있는 항목이 이미 추가되었습니다

비즈니스 프로세스 오류 동일한 키가있는 항목이 이미 있습니다 추가되었습니다

내 생각 엔 각 레코드 또는 뭔가에 대한 고유 한 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"); 
} 

답변

1

왜냐하면 Attributes.Add을 사용하고 있기 때문입니다.

속성 컬렉션은 실제로 사전이므로 동일한 키 (productdescription, quantity 등)를 사전에 두 번 추가 할 수 없습니다. invoiceline["quanity"] = quantity;

이 기존 값을 덮어 쓰게됩니다 :

그래서 당신이 이미로드 한 그 실체 기록은

이를 방지하는 가장 쉬운 방법은 (당신이 columnset에 포함되어 있기 때문에) 사용하는 그냥 그 키가 해당 키에 대해 - 또는 존재하지 않는 경우 새 키 값 쌍을 사전에 추가하십시오.

관련 읽기 : Dictionary.Add Method.

+0

감사하고, 지금 해결되는 코드에 내 머리를하고 내가 원하는 실행되면! – harri

0

는 다음과 같이 넣어보십시오 :이

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