我有一些代码使用C#在CRM插件来检索查找值。 这很简单,阅读查找的GUID,然后表现出来异常。
//Get ParentCaseID
Guid HeaderId = ((EntityReference)entity["new_LookupTransactionHeader"]).Id;
throw new InvalidPluginExecutionException(HeaderId.ToString());
在这段代码我只是想从查找的GUID,但是当我运行该插件我得到的错误是这样的。
给定的关键是不存在的字典
代码应该是自explenatory:
if(entity.Contains("new_LookupTransactionHeader")){
Guid HeaderId = ((EntityReference)entity["new_LookupTransactionHeader"]).Id;
throw new InvalidPluginExecutionException(HeaderId.ToString());
}
else
{
throw new InvalidPluginExecutionException("There is no value in field new_LookupTransactionHeader.");
}
使用entity["attribute"]
索引访问底层的Attribute
属性其是AttributeCollection对象,它的行为就像Dictionary<string, object>
。
在这种情况下,字典中不包含你的关键new_LookupTransactionHeader
-这可能是因为你质疑从CRM中的数据,该值是null
的CRM,在这种情况下,CRM省略从字典中(即使你特别要求它的价值一个ColumnSet
)。
如果该键存在于字典试图访问它之前,您可以可以检查,如entity.Attributes.HasKey("new_LookupTransactionHeader")
你也可以使用entity.GetAttributeValue<EntityReference>("new_LookupTransactionHeader")
这将返回null
如果该键犯规存在(而不是抛出异常。
Guid HeaderId;
if (entity.Attributes.Contains("new_LookupTransactionHeader"))
{
Guid HeaderId= ((EntityReference)entity["new_LookupTransactionHeader"]).Id;
}
剩下的可以自己添加,如果包含返回false,它不存在