我需要检查插件在执行任何代码之前是否已赢得机会。据我了解,您无法在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搜索,似乎无法找到解决方案。谁能解释我在这里需要做什么?
先谢谢。
答案 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
}