CRM 2011在线c#检查是否有机会获胜

本文关键字:机会 获胜 是否 检查 2011 在线 CRM | 更新日期: 2023-09-27 17:52:50

在执行任何代码之前,我需要检查当插件着火时是否有机会获胜。根据我的理解,你不能在CRM在线部署中使用机会赢得的插件消息。

下面是我的代码片段:

//Get the target entity
Entity entity = (Entity)context.InputParameters["Target"];
OptionSetValue entityStatusCode =
(OptionSetValue)entity.Attributes["statuscode"];
if (entityStatusCode.Value == 3)
    {
//Code to execute if opportunity won
}

这会抛出错误'给定的键不在字典中'。我用谷歌搜索了一下,似乎找不到解决办法。有人能解释一下我需要做什么吗?

CRM 2011在线c#检查是否有机会获胜

(OptionSetValue)entity.Attributes["statuscode"];

我猜是那一行给了你错误。

当一个插件触发时,默认情况下它只给你在调用插件的事件中被改变的属性。

换句话说,如果你更新了一个机会名称,一个插件被触发,但是属性包将只包含name属性。

所以这里的statuscode没有被传入,因此代码失败,因为,正如异常所说,它不在字典中。

至于如何修复它,有点取决于你为什么需要检查是否赢得了机会。但是最简单的(但不一定是最有效的)方法是回叫CRM来获取这些值。

var entity = service.Retrieve(Target.LogicalName, Target.Id, new ColumnSet(true));
var entityStatusCode = (OptionSetValue)entity.Attributes["statuscode"];
if (entityStatusCode.Value == 3)
{
    //Code to execute if opportunity won
}