编程语言
首页 > 编程语言> > c# – Entity.Attributes和Entity.FormattedValues之间有什么区别?

c# – Entity.Attributes和Entity.FormattedValues之间有什么区别?

作者:互联网

我正在学习如何编写自定义工作流程,并试图找出存储所需的所有值的位置和格式.我注意到我可以在Attributes和FormattedValues属性中访问Entity实例数据.我怎么知道何时使用哪一个?

我注意到MSDN的评论“实体格式化的值仅适用于检索操作,而不适用于更新操作.”

为了测试我已经在两个集合中迭代了两个foreach-blocks.属性给了我65行,FormattedValues给了我39.我可以看到,是的,FormattedValues的输出确实是格式化的.
例如,在Attributes给出输出“Microsoft.Xrm.Sdk.OptionSetValue”的地方,FormattedValues给了一个包含实际值的字符串.

通常从FormattedValues集合中排除哪些值/属性,为什么?

解决方法:

在快速检查之后,看起来属性和格式化值之间的区别在于前者与存储在DB中的实际值(或者至少是在获取它时存储在那里的值).提供给用户显示的内容.

我没有使用格式化的值,但除非另有证明,否则我会说实体的属性将为您提供被认为的字段所基于的类型值(即int,DateTime等),而其格式化的值是渲染,该值的字符串表示(取决于您所指的是什么形式,什么语言等)

通过这种逻辑,我希望格式化的值集合成为属性集的子集.此外,它应该由String类型的值组成,而对应的是the type conversion table的成员.

我能想到的一个不同的例子是一个名为picky的选项集,当前选择的选项名为“hazaa”,ID为1234.下面的示例是由心脏编写的,因此可以随意纠正.它举例说明了这一点:plainValue将是一个等于1234的整数,而formattedValue将是“hazaa”.

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

我会说,归属方法更可靠,因为它会提供实际值,而替代方案可能导致意外结果.但是,我必须补充说,它有一定的便利性.

就个人而言,我建议调查方法GetAttributeValue<T>(String),或者像每个自大的CRM开发人员一样 – 使用扩展方法拥有自己的类,并使用方法Get< T>(T,String).这为您提供了控制感,并提供了最佳的可预测性和可读性,IMAO.

标签:c,attributes,dynamics-crm-2013
来源: https://codeday.me/bug/20190624/1275765.html