Entity.Attributes 和 Entity.FormattedValues 有什么区别?

What's the difference between Entity.Attributes and Entity.FormattedValues?

我正在学习如何编写自定义工作流,并试图弄清楚我需要的所有值都存储在何处以及以何种格式存储。我注意到我可以在 AttributesFormattedValues 属性中访问 Entity 实例数据。 我怎么知道什么时候使用哪个?

我注意到MSDN的评论"Entity formatted values are only available on a retrieve operation, not on an update operation.".

为了测试,我做了两个 foreach-blocks 遍历两个 collection。 Attributes 给我 65 行,FormattedValues 给我 39 行。我可以看到,是的,FormattedValues 的输出确实是格式化的。 例如,Attributes 给出输出 "Microsoft.Xrm.Sdk.OptionSetValue"FormattedValues 给出一个具有实际值的字符串。

哪些 values/attributes 通常被排除在 FormattedValues collection 之外,为什么?

我对此不是 100% 确定,但格式化值是您将能够在表单上看到的值。在该列表中,您将能够找到带有 $ 符号或选项集标签的货币类型。不应显示文本字段,因为它已经是人类可读的。

https://community.dynamics.com/crm/b/crmmitchmilam/archive/2013/04/18/crm-sdk-nugget-entity-formattedvalues-property.aspx

请参阅本文以了解更多信息。我很少使用该属性列表,因为数据是字符串格式。我发现检索 OprionSet 标签非常有用。

快速检查后发现 属性 格式化值 之间的区别在于前者与实际值存储在数据库中的值(或者至少是 在获取它时存储在那里的值),而后者服务于向用户显示的内容。

我没有使用过格式化值,但在证明不是这样之前,我会说实体的 属性 将为您提供 typed 被视为字段所基于的值(即 intDateTime 等),而其 格式值 是该值的呈现的字符串化表示(取决于例如您指的是什么形式,什么语言等)

按照这个逻辑,我希望 格式化值集 属性集 的子集。此外,它应该仅由 String 类型的值组成,而对应的是 the type conversion table.

的成员

我能想到的差异示例是一个名为 picky 的选项集,当前选择的选项名为“hazaa”,并且1234 的 ID。以下示例是用心写的,请随时更正。不过,它举例说明了这一点:plainValue 将是一个等于 1234 的整数,而 formattedValue 将是“hazaa".

int plainValue = (int)entity["picky"];
String formattedValue = (String)entity.FormattedValues["picky"];

我想说归因方法更可靠,因为它会呈现实际值,而替代方法可能会导致意外结果。但是,它有一定的便利性,我必须补充一下。

就我个人而言,我建议研究方法 GetAttributeValue<T>(String) 或者,就像每个自大的 CRM 开发人员一样 - 拥有自己的 class 扩展方法并使用方法 在那里获取(T,String)。这为您提供了控制感,并提供了最佳的可预测性和可读性,IMAO。