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

时间:2017-08-03 07:01:46

标签: c# dynamics-crm dynamics-crm-2011

我尝试使用 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中的这个状态有一个挂锁图标,表示它已被锁定。

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

2 个答案:

答案 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)

你是对的。国家与身份是连体双胞胎。你不能只更新其中一个,总是成对出现。

enter image description here

State = StateCode
状态原因= StatusCode(带挂锁的字段)

More read

在你的答案代码中,这是在SetStateRequest req。

中正确构建的
req.State = new OptionSetValue(0);
req.Status = new OptionSetValue(2);

但在OP中,您只设置状态而不是状态。

每个MSDNLoseOpportunityRequest OpportunityClose实体必须在仅传递状态时关闭它而不会出现问题。但你不是alone

参考:Opportunity& OpportunityClose