我正在学习如何编写自定义工作流程,并试图找出存储所需的所有值的位置和格式。我注意到我可以访问Entity
和Attributes
属性中的FormattedValues
实例数据。 我如何知道何时使用哪一个?
我注意到MSDN的评论“实体格式化的值仅适用于检索操作,而不适用于更新操作。”。
为了测试我已经制作了两个foreach-blocks迭代两个集合。 Attributes
给了我65行,FormattedValues
给了我39.我可以看到,是的,FormattedValues的输出确实是格式化的。
例如,Attributes
给出输出"Microsoft.Xrm.Sdk.OptionSetValue"
,FormattedValues
给出一个包含实际值的字符串。
通常会从FormattedValues
集合中排除哪些值/属性?为什么?
答案 0 :(得分:3)
我不是100%确定这一点,但格式化的值是您将能够在表单上看到的值。在该列表中,您将能够找到带有$符号的金钱类型或选项集的标签。不应该显示文本字段,因为它已经是人类可读的。
请参阅本文以了解更多信息。我很少使用该属性列表,因为数据是字符串格式。我发现检索OprionSet标签确实很有用。
答案 1 :(得分:1)
快速检查后,属性与格式化值之间的区别似乎是前者与存储在数据库中的实际值(或者至少在获取它时 存储在那里的值),而后者用于向用户显示的内容。
我没有使用格式化的值,但除非另有证明,否则我会说实体的属性会为您提供被视字段所基于的类型值on(是 int , DateTime 等),而其格式化值是该值的呈现的字符串表示(取决于例如你指的是什么形式,什么语言等。)
按照这种逻辑,我希望格式化值的集合成为属性集的子集。此外,它应该由 String 类型的值组成,而对应方是the type conversion table的成员。
我能想到的一个不同的例子是一个名为 picky 的选项集,当前选择的选项名为“ hazaa ”,ID 1234 < / em>的。以下样本是用心写的,所以请随意纠正。它举例说明了这一点: plainValue 将是一个等于1234的整数,而 formattedValue 将是“ hazaa ”。
int plainValue = (int)entity["picky"];
String formattedValue = (String)entity.FormattedValues["picky"];
我认为归属方法更可靠,因为它会渲染实际值,而替代方法可能导致意外结果。但是,我必须补充说,它有一定的便利性。
就个人而言,我建议调查方法GetAttributeValue<T>(String),或者像每个自大的CRM开发人员一样 - 使用扩展方法拥有自己的类,并使用方法 Get&lt; T&gt;(T,String那里。这为您提供了控制感,并提供了最佳的可预测性和可读性,IMAO。