如何设置机会状态 - 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中的这种状态有一个挂锁图标,意味着它被锁定。
那么是否有可能改变状态和不是基于角色?
答
对于一个开放的机会,我们可以改变状态为赢或输。因此,我们将使用WinOpportunityRequest和LoseOpportunityRequest 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。