克隆电话呼叫实体

时间:2014-09-29 07:22:43

标签: dynamics-crm-2013

我打算克隆一个电话记录,为此我做了以下

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

但是上面的行给了我一个例外:无法插入重复的密钥

请建议我,我错过了什么?

4 个答案:

答案 0 :(得分:1)

看起来Id尚未被清除。我已成功使用以下代码正确清除它。

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

答案 1 :(得分:1)

我从以下代码中获得了成功:

首先,我从我的克隆实体中删除了activityid

cloneToDo.Attributes.Remove("activityid");

然后我为实体添加了新的GUID

cloneToDo.Id = Guid.NewGuid();

及其完成。

注意:最好删除状态码和状态码

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

答案 2 :(得分:0)

我遇到了同样的问题,在尝试了你在这里发布的所有解决方案之后无法使其发挥作用。 我一直在努力,找到解决问题的方法。 当我从源PhoneCall获取它时,我正在复制To字段,并且不知道系统为什么不喜欢它。 所以我的解决方案就是重新创建EntityColletion以便在我这里展示TO:

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

然后使用这个新创建的EntityCollection(“toCollection”)设置新PhoneCall的“TO”属性 希望这会有所帮助:)

答案 3 :(得分: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"];
}