CRM 2011 Online C#检查机会是否获胜

时间:2013-01-11 18:19:12

标签: c# plugins dynamics-crm-2011

我需要检查插件在执行任何代码之前是否已赢得机会。据我了解,您无法在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
}

这会抛出错误'给定的密钥不在字典中'。我用Google搜索,似乎无法找到解决方案。谁能解释我在这里需要做什么?

先谢谢。

1 个答案:

答案 0 :(得分:2)

(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
}