我尝试使用 WinOpportunityRequest&更新开放机会的状态。 MSDN中提供的LoseOpportunityRequest API。 我已经按照MSDN和MSDN中给出的代码进行了操作。我甚至提到了stackoverflow' s Set Opportunity Status
但是,当我为开放机会运行以下代码时,它会抛出错误说明
LoseOpportunityRequest req = new LoseOpportunityRequest();
Entity opportunityClose = new Entity("opportunityclose");
opportunityClose.Attributes.Add("opportunityid", new EntityReference(OptyEntityName, new Guid("xxxx-xxx")));
opportunityClose.Attributes.Add("subject", "Lost the Opportunity!");
req.OpportunityClose = opportunityClose;
// 4 = Cancelled and 5 = Out-Sold
req.Status = new OptionSetValue(4);
LoseOpportunityResponse resp = (LoseOpportunityResponse)_serviceProxy.Execute(req);
错误 -
4不是带有Id(Guid)的机会的有效状态代码
当我尝试更改已关闭机会的状态时,表示机会已关闭。
还需要考虑的另一件事是我的CRM中的这个状态有一个挂锁图标,表示它已被锁定。
是否可以更改状态,是否基于角色?
答案 0 :(得分:1)
对于一个开放的机会,我们可以将状态更改为输赢。因此,我们将在here中使用 WinOpportunityRequest 和 LoseOpportunityRequest 。
因此,我们需要将值更改为-1,以便CRM可以加载默认状态代码。
req.Status = new OptionSetValue(4);
更改为-1后,它不会抛出任何异常。
req.Status = new OptionSetValue(-1);
执行执行调用后。机会价值将变为丢失。机会将被关闭。
要重新打开已关闭的商机,我们可以使用SetStateRequest class。代码如下。
var stateRef = new EntityReference("optyname", new Guid("optyid"));
SetStateRequest req = new SetStateRequest();
req.State = new OptionSetValue(0);
req.Status = new OptionSetValue(2);
req.EntityMoniker = stateRef;
SetStateResponse stateSet = (SetStateResponse)_serviceProxy.Execute(req);
执行执行调用后,机会状态将重新设置为打开状态,状态显示为打开状态。
州代码与州不同。州代码可以打开,赢或关闭。 status可以有多个值。详细信息在msdn提供。
答案 1 :(得分:1)
你是对的。国家与身份是连体双胞胎。你不能只更新其中一个,总是成对出现。
State = StateCode
状态原因= StatusCode(带挂锁的字段)
在你的答案代码中,这是在SetStateRequest req。
中正确构建的req.State = new OptionSetValue(0);
req.Status = new OptionSetValue(2);
但在OP中,您只设置状态而不是状态。
每个MSDN,LoseOpportunityRequest
OpportunityClose
实体必须在仅传递状态时关闭它而不会出现问题。但你不是alone。
参考:Opportunity& OpportunityClose