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