在C#中获取状态代码文本

时间:2012-09-13 13:00:05

标签: plugins dynamics-crm-2011

我正在使用插件,并希望根据记录状态代码值执行操作。我在网上看到你可以使用entity.FormattedValues["statuscode"]从选项集中获取值但是在尝试时我收到一条错误,上面写着“给定的密钥不在字典中”。

我知道当插件无法找到您正在寻找的字段的更改时会发生这种情况,但我已经使用entity.Contains("statuscode")检查了确实存在这种情况并且它已经过了那么好但仍然点击此错误。

任何人都可以帮我弄清楚它失败的原因吗?

由于

4 个答案:

答案 0 :(得分:3)

我之前没见过entity.FormattedValues

我通常使用entity.Attributes,例如entity.Attributes["statuscode"]

MSDN


修改

Crm包含了包含附加信息的对象中的许多值,在这种情况下,statuscode使用OptionSetValue,因此要获得所需的值:

((OptionSetValue)entity.Attributes["statuscode"]).Value

这将返回一个数字,因为这是Crm中的基础值。

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

enter image description here

如果您需要标签,可以根据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值。