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

问题描述:

我试图通过使用WinOpportunityRequest & LoseOpportunityRequest MSDN中提供的API更新开放机会的状态。 我跟着这是在MSDN &给出的代码,我连称计算器的Set Opportunity Status如何设置机会状态 - Dynamics CRM?

但是,当我运行的开放的机会这下面的代码,它抛出错误,指出

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中的这种状态有一个挂锁图标,意味着它被锁定。

那么是否有可能改变状态和不是基于角色?

对于一个开放的机会,我们可以改变状态为赢或输。因此,我们将使用WinOpportunityRequestLoseOpportunityRequest in here

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

在执行调用执行之后,机会状态被重新打开并且状态显示为打开状态。

状态码与状态不同。州代码可以打开,赢或结束。状态可以有多个值。详细信息请见msdn

你说得对。状态&状态是连体双胞胎。你不能只更新其中一个,总是成对的。

enter image description here

状态= StateCode
状态原因=的StatusCode(带挂锁场)

More read

在你的答案代码,这是在SetStateRequest REQ正确陷害。

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

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

MSDNLoseOpportunityRequestOpportunityClose实体必须关闭它,而没有问题,当你只传递状态。但你不是alone

编号:Opportunity & OpportunityClose