【发布时间】:2019-04-16 10:46:08
【问题描述】:
如何通过 Dynamics CRM 中的 C# 代码重新打开已关闭(赢得或失去)的机会? SetStateRequest 已弃用(请参阅 documentation),当我尝试通过 Update 执行相同操作时,我收到此错误:
元素“http://schemas.microsoft.com/2003/10/Serialization/Arrays:anyType”包含映射到名称“Microsoft.Crm.Common.ObjectModel:ActivityState”的类型的数据。反序列化器不知道映射到此名称的任何类型。考虑更改 DataContractResolver 上的 ResolveName 方法的实现,以返回名称“ActivityState”和命名空间“Microsoft.Crm.Common.ObjectModel”的非空值。
代码如下:
Entity updateTarget = new Entity("opportunity", opportunityId);
updateTarget["statecode"] = new OptionSetValue(0); // 0 = Open
updateTarget["statuscode"] = new OptionSetValue(1); // 1 = In Progress
orgSvc.Update(updateTarget); // Raises exception
执行 REST PATCH 请求来设置 statecode 和 statuscode 会产生同样的错误。
我暂时停用了所有正在运行的插件,以确保这些插件不是导致此错误的原因。
这似乎是机会的例外。其他记录可以使用Update 关闭和打开,没有任何问题。
我在 CRM 8.2 和 9.1 上对此进行了测试。
【问题讨论】:
-
如下回答中提到的,不用
OptionSetValue试试,就像updateTarget["statecode"] = 0;一样 -
这会产生错误“状态代码无效或状态代码有效但状态代码对于指定的状态代码无效。”。
-
好的,所以尝试添加一个附加语句:
updateTarget["statuscode"] = 1这是“进行中”的代码
标签: c# dynamics-crm deprecated setstate