2

我正在使用插件并希望根据记录状态码值执行操作。我在网上看到你可以用来entity.FormattedValues["statuscode"]从选项集中获取值,但是当我尝试它时,我得到一个错误,说“字典中不存在给定的键”。

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

谁能帮我弄清楚为什么它失败了?

谢谢

4

4 回答 4

3

我没见过entity.FormattedValues以前的。

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

MSDN


编辑

Crm 将许多值包装在包含附加信息的对象中,在这种情况下,状态码使用 OptionSetValue,因此要获取您需要的值:

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

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

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

在此处输入图像描述

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

或者您可以从这里描述的元数据服务中检索它。

于 2012-09-13T19:05:59.080 回答
3

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

if (entity.FormattedValues.Contains("statuscode")){
    var myStatusCode = entity.FormattedValues["statuscode"];
}

但是,尽管 SDK 无法确认这一点,但我怀疑FormattedValues它只存在于数字或货币属性中。(不过我的部分猜测)。

于 2012-09-14T08:22:40.017 回答
0

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

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

http://msdn.microsoft.com/en-in/library/microsoft.xrm.sdk.formattedvaluecollection.aspx

你会发现这个语句只对字符串显示值有效。如果您尝试将此语句与整数值一起使用,它将抛出在字典异常中找不到键。

因此,请尽量避免使用此语句来检索代码中的整数显示名称选项集。

于 2013-04-28T13:05:31.710 回答
0

试试这个

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

当您谈论选项集时,您有价值和标签。这会给你的是标签。“?” 将确保永远不会传递空值。

于 2015-04-14T15:03:43.947 回答