【问题标题】:How to set the Opportunity Status - Dynamics CRM?如何设置商机状态 - Dynamics CRM?
【发布时间】:2017-08-03 07:01:46
【问题描述】:

我正在尝试使用 MSDN 中提供的 WinOpportunityRequest 和 LoseOpportunityRequest API 来更新 开放机会 的状态。 我遵循了 MSDN 中给出的代码,我什至提到了 stackoverflow 的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 中的这种状态有一个挂锁图标,表示它已被锁定。

那么状态是否可以改变,是基于角色的吗?

【问题讨论】:

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


    【解决方案1】:

    对于一个开放的机会,我们可以将状态更改为赢或输。所以我们将使用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。 status 可以有多个值。详细信息在msdn提供。

    【讨论】:

      【解决方案2】:

      你是对的。状态和状态是连体双胞胎。您不能只更新其中一个,始终成对更新。

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

      More read

      在您的答案代码中,这在 SetStateRequest req 中正确框定。

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

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

      每个MSDNLoseOpportunityRequestOpportunityClose 实体在您仅传递状态时必须毫无问题地关闭它。但你不是alone

      参考:Opportunity & OpportunityClose

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多