C# CRM插件错误字典中不存在给定的密钥
我开发了一个CRM插件,它在创建案例实体时被触发。案例与另一个自定义实体具有N:1关系。简而言之,当自定义实体的“new_casesign”字段设置为1时,插件将生成分配给案例所有者的任务 然而,问题是“new_casesign”字段是新添加的,因此大多数自定义实体记录尚未设置此字段,这导致插件出错为“字典中不存在给定的键”。如果自定义字段有值,那么就没有问题 处理这种情况的最佳方法是什么?我尝试了customEntity.Attributes.Contains(“new_casesassign”),类似于下面的代码,但没有成功:C# CRM插件错误字典中不存在给定的密钥,c#,plugins,crm,C#,Plugins,Crm,我开发了一个CRM插件,它在创建案例实体时被触发。案例与另一个自定义实体具有N:1关系。简而言之,当自定义实体的“new_casesign”字段设置为1时,插件将生成分配给案例所有者的任务 然而,问题是“new_casesign”字段是新添加的,因此大多数自定义实体记录尚未设置此字段,这导致插件出错为“字典中不存在给定的键”。如果自定义字段有值,那么就没有问题 处理这种情况的最佳方法是什么?我尝试了customEntity.Attributes.Contains(“new_casesassign
var new_CaseAssign = customEntity.Attributes["new_CaseAssign"];
if ((customEntity.Attributes.Contains("new_CaseAssign")) && (bool)new_CaseAssign)
{
activityEntity.Attributes.Add("ownerid", incident.Attributes["ownerid"]);
}
else
{ //something else
}
如有任何建议,我们将不胜感激。非常感谢。线路:
var new_CaseAssign = customEntity.Attributes["new_CaseAssign"];
可能是导致异常的原因。您可以将代码重写为:
bool new_CaseAssign = false;
if (customEntity.Attributes.Contains("new_CaseAssign"))
new_CaseAssign = (bool) customEntity.Attributes["new_CaseAssign"];
if (new_CaseAssign) {
activityEntity.Attributes.Add("ownerid", incident.Attributes["ownerid"]);
}
else { //something else
}
因此,在尝试访问密钥之前,首先检查包含。Loating的答案部分正确,事实上,您是在检查是否存在之前访问属性的。通常,我还会在强制转换之前检查属性it是否为null 第二个错误是字段名,您使用的是后期绑定样式,这意味着您需要使用逻辑名称而不是架构名称,因此字段名是
new\u casesign
(全部小写)而不是new\u casesign
if((customEntity.Attributes.Contains(“new\u casesassign”))和&customEntity.Attributes[“new\u casesassign”!=null)
{
if((bool)customEntity.Attributes[“new_casesassign”])
{
activityEntity.Attributes.Add(“ownerid”,incident.Attributes[“ownerid]”);
}
}
其他的
{//还有别的吗
}
如果属性是字典
,则!=null
测试是无意义的。。。但在我的回答中,对(bool)
的演员阵容也是如此。如果您要测试!=空
那么您最好将其更改为is bool
。字典是字典