如何设置机会状态 - Dynamics CRM?

How to set the Opportunity Status - Dynamics CRM?

我正在尝试使用 WinOpportunityRequest & LoseOpportunityRequest API 中提供的 open opportunity 更新状态MSDN。 我遵循了 MSDN 中给出的代码,我什至提到了 Whosebug 的

但是,当我 运行 以下代码用于 开放机会 时,它会抛出错误,指出

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 is not a valid status code on opportunity with Id(Guid)

当我尝试更改 已关闭机会 的状态时,它显示 机会已关闭

还需要考虑的一件事是我的 CRM 中的此状态有一个挂锁图标,表示它已锁定。

那么是否可以更改状态,是否基于角色?

对于开放的机会,我们可以将状态更改为赢或输。所以我们将在here.

中使用WinOpportunityRequestLoseOpportunityRequest

因此,我们需要将值更改为-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);

执行调用后,机会状态设置回打开,状态显示为打开。

州代码与状态不同。状态码可以有open、win或close。状态可以有多个值。 msdn.

提供了详细信息

你是对的。 State 和 Status 是连体双胞胎。不能只更新其中一个,总是成对更新。

州 = 州代码
状态原因 = StatusCode(带挂锁的字段)

More read

在您的答案代码中,这在 SetStateRequest 请求中被正确构造。

req.State = new OptionSetValue(0);
req.Status = new OptionSetValue(2);

但在 OP 中,您只设置 Status 而不是 State。

MSDN, LoseOpportunityRequest with OpportunityClose entity has to close it without issues when you pass only Status. But you are not alone.

参考:Opportunity & OpportunityClose