赢得机会时更新机会

时间:2016-04-13 06:51:09

标签: dynamics-crm

我已经完成了从cm 2013迁移到2016年的系统更新CRM插件的任务。该插件失败,因为它尝试将机会状态设置为赢,只需更新字段即可。并且您需要使用WinOpporunityRequest来执行此操作。

逻辑如下:

  1. 获胜时,插件会执行并在Opportunclose实体上运行
  2. 该插件创建一个新的自定义实体记录(项目)并更新其他几个记录。
  3. 通过使用opportunityclose实体的opportunityid
  4. 获取当前机会
  5. 它通过引用新创建的项目记录来更新商机上的字段。
  6. 该更新是通过Update()方法完成的。
  7. 在5上它失败了,因为当它在3时获得当前机会时它已经具有赢得状态。如果您尝试使用新状态更新记录,则会失败。

    我的问题是,如何在使用机会关闭实体时获得机会并仅更新单个字段。我不需要设置状态,因为这是在标准CRM流程中完成的。

    - 编辑 获取商机的代码行:

    Xrm.Opportunity currentOpportunityObjectToUpdate = serviceContext.CreateQuery<Xrm.Opportunity>().First(x => x.Id == entityRef.Id);
    

1 个答案:

答案 0 :(得分:1)

该平台允许您更新已关闭的机会,我只是尝试验证。你得到的错误是什么?

在步骤#5中,确保您只发送您尝试更新的属性(opportunityid和查找到项目)。因此,当您发布更新时,请不要使用您检索或创建的任何预先存在的机会对象...这样做会发送对象上的所有属性,并且平台将处理每个属性,就好像它被更改一样,即使价值没有变化。相反,只使用指定的id和项目创建一个新的机会对象,如下所示:

context.AddObject(new Opportunity() { 
    Id = idOfOpportunity,            // you may have to specify id both here...
    OpportunityId = idOfOpportunity, // ...and here, can never remember. Doesn't hurt to specify in both places.
    new_ProjectId = idOfProject
}); 
context.SaveChanges();

如果您遇到困难,您总是有一个简单的解决方法选项:从#4中获取逻辑并将其移动到创建项目时的异步插件(即使工作流也应该有效)。

相关问题