我打算克隆一个电话记录,为此我做了以下
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);
但是上面的行给了我一个例外:无法插入重复的密钥
请建议我,我错过了什么?
答案 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"];
}