Entity.Attributes 和 Entity.FormattedValues 有什么区别?
What's the difference between Entity.Attributes and Entity.FormattedValues?
我正在学习如何编写自定义工作流,并试图弄清楚我需要的所有值都存储在何处以及以何种格式存储。我注意到我可以在 Attributes
和 FormattedValues
属性中访问 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% 确定,但格式化值是您将能够在表单上看到的值。在该列表中,您将能够找到带有 $ 符号或选项集标签的货币类型。不应显示文本字段,因为它已经是人类可读的。
请参阅本文以了解更多信息。我很少使用该属性列表,因为数据是字符串格式。我发现检索 OprionSet 标签非常有用。
快速检查后发现 属性 和 格式化值 之间的区别在于前者与实际值存储在数据库中的值(或者至少是 在获取它时存储在那里的值),而后者服务于向用户显示的内容。
我没有使用过格式化值,但在证明不是这样之前,我会说实体的 属性 将为您提供 typed 被视为字段所基于的值(即 int、DateTime 等),而其 格式值 是该值的呈现的字符串化表示(取决于例如您指的是什么形式,什么语言等)
按照这个逻辑,我希望 格式化值集 是 属性集 的子集。此外,它应该仅由 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。
我正在学习如何编写自定义工作流,并试图弄清楚我需要的所有值都存储在何处以及以何种格式存储。我注意到我可以在 Attributes
和 FormattedValues
属性中访问 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% 确定,但格式化值是您将能够在表单上看到的值。在该列表中,您将能够找到带有 $ 符号或选项集标签的货币类型。不应显示文本字段,因为它已经是人类可读的。
请参阅本文以了解更多信息。我很少使用该属性列表,因为数据是字符串格式。我发现检索 OprionSet 标签非常有用。
快速检查后发现 属性 和 格式化值 之间的区别在于前者与实际值存储在数据库中的值(或者至少是 在获取它时存储在那里的值),而后者服务于向用户显示的内容。
我没有使用过格式化值,但在证明不是这样之前,我会说实体的 属性 将为您提供 typed 被视为字段所基于的值(即 int、DateTime 等),而其 格式值 是该值的呈现的字符串化表示(取决于例如您指的是什么形式,什么语言等)
按照这个逻辑,我希望 格式化值集 是 属性集 的子集。此外,它应该仅由 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 扩展方法并使用方法 在那里获取