Plugins 获取C中的状态代码文本#

Plugins 获取C中的状态代码文本#,plugins,dynamics-crm-2011,Plugins,Dynamics Crm 2011,我正在使用一个插件,希望根据records statuscode值执行一个操作。我在网上看到,您可以使用entity.FormattedValues[“statuscode”]从选项集获取值,但尝试时,我收到一个错误消息:“字典中不存在给定的键” 我知道,当插件找不到您要查找的字段的更改时,可能会发生这种情况,但我已经使用entity.Contains(“statuscode”)检查了是否存在这种情况,它通过了罚款,但仍然会出现此错误 有人能帮我弄清楚为什么它失败了吗 谢谢我以前没有见过实体.F

我正在使用一个插件,希望根据records statuscode值执行一个操作。我在网上看到,您可以使用
entity.FormattedValues[“statuscode”]
从选项集获取值,但尝试时,我收到一个错误消息:“字典中不存在给定的键”

我知道,当插件找不到您要查找的字段的更改时,可能会发生这种情况,但我已经使用
entity.Contains(“statuscode”)
检查了是否存在这种情况,它通过了罚款,但仍然会出现此错误

有人能帮我弄清楚为什么它失败了吗


谢谢

我以前没有见过
实体.FormattedValues

我通常使用
实体.Attributes
,例如
实体.Attributes[“statuscode”]


编辑

Crm将许多值包装在包含附加信息的对象中,在本例中,statuscode使用OptionSetValue,因此要获取所需的值,您需要:

((OptionSetValue)entity.Attributes["statuscode"]).Value
这将返回一个数字,因为这是Crm中的基础值

如果在Crm中打开自定义选项,通常(某些系统字段被锁定)可以看到每个选项的标签和值

如果您需要标签,您可以根据Crm中的信息进行硬编码


或者,您可以从元数据服务中检索它,如下所述

为避免错误,您需要检查希望使用的集合(而不是
属性
集合):


但是,尽管SDK未能确认这一点,我怀疑
FormattedValues
仅存在于数字或货币属性中。(但部分推测取决于我的部分)。

entity.FormattedValues仅适用于字符串显示值

例如,您有一个显示名称为1、2、3、, 上面的语句无法识别这些值,因为它们是整数。如果您在下面的链接中看到了格式化值的确切定义

您将发现此语句仅对字符串显示值有效。若您尝试将此语句与整数值一起使用,它将抛出字典异常中找不到的键

因此,在代码中检索整数显示名称optionset时,请尽量避免使用此语句。

尝试此操作

string Title = (bool)entity.Attributes.Contains("title") ? entity.FormattedValues["title"].ToString() : "";

当你们谈论选项集时,你们有值和标签。这会给你一个标签将确保从不传递null值

我以前见过FormattedValues用于获取选项集值,但我自己并不经常使用它。当我尝试使用entity.Attributes[“statuscode”]时,它只返回“Microsoft.Xrm.Sdk.OptionSetValue”@JamesWood,我相信OP位于状态代码后面的文本,而不是底层整数。不过,我以前只在货币字段中使用过此属性。SDK的信息很少,但我怀疑它只对数字和货币属性有效。我最初是在状态码的文本标签之后,但是我可以处理该值。谢谢你们两位的帮助。情况似乎就是这样,我刚刚尝试了你的代码,虽然错误消失了,但它没有获取值。谢谢你的帮助
string Title = (bool)entity.Attributes.Contains("title") ? entity.FormattedValues["title"].ToString() : "";