0

我需要检查插件触发时是否赢得了机会,然后再执行任何代码。据我了解,您不能在 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
}

这会引发错误“给定的键不在字典中”。我用谷歌搜索,似乎找不到解决方案。谁能解释我需要在这里做什么?

提前致谢。

4

1 回答 1

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
}
于 2013-01-12T21:38:43.767 回答