我正在使用插件,并希望根据记录状态代码值执行操作。我在网上看到你可以使用entity.FormattedValues["statuscode"]
从选项集中获取值但是在尝试时我收到一条错误,上面写着“给定的密钥不在字典中”。
我知道当插件无法找到您正在寻找的字段的更改时会发生这种情况,但我已经使用entity.Contains("statuscode")
检查了确实存在这种情况并且它已经过了那么好但仍然点击此错误。
任何人都可以帮我弄清楚它失败的原因吗?
由于
答案 0 :(得分:3)
我之前没见过entity.FormattedValues
。
我通常使用entity.Attributes
,例如entity.Attributes["statuscode"]
。
修改强>
Crm包含了包含附加信息的对象中的许多值,在这种情况下,statuscode使用OptionSetValue,因此要获得所需的值:
((OptionSetValue)entity.Attributes["statuscode"]).Value
这将返回一个数字,因为这是Crm中的基础值。
如果在Crm中打开自定义选项,通常会(某些系统字段被锁定)能够看到每个选项的标签和值。
如果您需要标签,可以根据Crm中的信息进行一些硬编码。
或者您可以按照here所述从元数据服务中检索它。
答案 1 :(得分:3)
为避免您的错误,您需要检查您要使用的集合(而不是Attributes
集合):
if (entity.FormattedValues.Contains("statuscode")){
var myStatusCode = entity.FormattedValues["statuscode"];
}
然而,虽然SDK无法确认这一点,但我怀疑FormattedValues
仅适用于数字或货币属性。 (虽然我的部分推测)。
答案 2 :(得分:0)
entity.FormattedValues仅适用于字符串显示值。
例如,您有一个选项集,其显示名称为1,2,3, 上述语句不识别这些值,因为它们是整数。如果您已在下面的链接中看到格式化值的确切定义
http://msdn.microsoft.com/en-in/library/microsoft.xrm.sdk.formattedvaluecollection.aspx
您会发现此语句仅对字符串显示值有效。如果您尝试将此语句与Integer值一起使用,则会抛出在字典异常中找不到的键。
因此,请尽量避免使用此语句来检索代码中的整数显示名称选项集。
答案 3 :(得分:0)
试试这个
string Title = (bool)entity.Attributes.Contains("title") ? entity.FormattedValues["title"].ToString() : "";
当您谈论选项集时,您有价值和标签。这会给你带来什么标签。 '?'将确保永远不会传递null值。