2014-09-29 64 views
1

我要克隆一個電話記錄,對我做以下克隆Phonecall實體

Entity originalToDo = crmService.Retrieve("phonecall", new Guid(originalToDoId), cols); 

Entity cloneToDo = originalToDo; 

,並刪除activityid和activitypartyid

if (originalToDo.Attributes.Contains("to")) 
       { 
        foreach (Entity item in ((EntityCollection)(originalToDo.Attributes["to"])).Entities) 
        { 
         RemoveProperties(item, "activityid"); 
         RemoveProperties(item, "activitypartyid"); 

        } 

       } 

cloneToDo.Attributes["to"] = (EntityCollection)originalToDo.Attributes["to"]; 

CreateRequest crRequest = new CreateRequest(); crRequest.Target = cloneToDo; 

CreateResponse crResponse = (CreateResponse)service.Execute(crRequest); 

但上述行給了我一個例外:無法插入重複密鑰

請建議我,我失蹤了?

回答

1

我已得到了下面的代碼的成功:

首先我從我的克隆實體

cloneToDo.Attributes.Remove("activityid"); 

然後我添加了一個新的GUID刪除activityid到實體

cloneToDo.Id = Guid.NewGuid(); 

及其完成。

注意:它能夠更好地去除

cloneToDo.Attributes.Remove("statecode"); 
cloneToDo.Attributes.Remove("statuscode"); 
1

它看起來像Id還沒有被清除。我已經成功使用下面的代碼來正確清除它。

originalToDo.EntityState = null;  
originalToDo.Id = Guid.Empty; 
originalToDo.Attributes.Remove("activityid"); 
0

我有同樣的問題,並試圖您在這裏發佈的所有解決方案不能使它工作後statecode和的StatusCode。 我一直試圖找到解決我的問題。 我正在複製To域,因爲我從源PhoneCall獲得它,並且不知道系統爲什麼不喜歡它。 所以我的解決辦法是,正如我在這裏重新創建瑟的到EntityColletion:

List<Entity> to = phoneCall.To != null ? phoneCall.To.ToList() 
            : postImage != null & postImage.To != null ? postImage.To.ToList() 
            : null;  
EntityCollection toCollection = new EntityCollection(); 
foreach (Entity t in to) { 
    Entity toParty = new Entity("activityparty"); 
    toParty["partyid"] = t.GetAttributeValue<EntityReference>("partyid"); 
    toCollection.Entities.Add(toParty); 
} 

,然後就設置了「TO」有了這個新創建EntityCollection新PhoneCall的屬性(」 toCollection「) 希望這會對一些人有所幫助:)

0
if (activity.Attributes.Contains("to")) 
{ 
    foreach (Entity item in ((EntityCollection)(activity.Attributes["to"])).Entities) 
    { 
     item.Attributes.Remove("activityid"); 
     item.Attributes.Remove("activitypartyid"); 
     item.Id = Guid.NewGuid(); 
    } 

    ap.Attributes["to"] = (EntityCollection)activity.Attributes["to"]; 
} 

if (activity.Attributes.Contains("from")) 
{ 
    foreach (Entity item in ((EntityCollection)(activity.Attributes["from"])).Entities) 
    { 
      item.Attributes.Remove("activityid"); 
      item.Attributes.Remove("activitypartyid"); 
      item.Id=Guid.NewGuid(); 
    } 

    ap.Attributes["from"] = (EntityCollection)activity.Attributes["from"]; 
}