crm 2011 有什么方法可以在不强制转换的情况下始终如一地获取属性的字符串值?

crm 2011 Any way to consistently get string value of attribute without casting?

我想遍历实体的属性集,并为每个属性获取文本值。我可以通过获取属性类型和显式转换来做到这一点,但是有没有办法不管类型如何做到这一点?类似于 this method...

我认为如果不测试和处理实体上可能的特定字段类型,您将无法简单地获取文本值,因为某些字段类型具有您需要的更复杂的值决定你想从这个领域获得什么价值。我 运行 遇到了同样的情况,最终构建了一个函数来为我完成繁重的工作。基本上我做了一个关于属性类型的案例声明,并根据业务需要得到了我想要的值,这是我使用的函数的一个例子:

  Private Function GetAttributeValue(ByRef pEntity As Entity, ByRef pAttr As KeyValuePair(Of String, Object)) As String
  Dim lstrValue As String = String.Empty
  Select Case pAttr.Value.GetType
     Case GetType(OptionSetValue)
        lstrValue = String.Format("{0} - {1}", CType(pAttr.Value, OptionSetValue).Value.ToString(), pEntity.FormattedValues(pAttr.Key))
     Case GetType(EntityReference)
        lstrValue = CType(pAttr.Value, EntityReference).Id.ToString()
        '... could also get the Name value from the EntityReference
     Case GetType(Money)
        lstrValue = CType(pAttr.Value, Money).Value.ToString()
     Case GetType(Date)
        lstrValue = CType(pAttr.Value, Date).ToString("MM/dd/yy hh:mm:ss")
     Case GetType(Guid)
        lstrValue = CType(pAttr.Value, Guid).ToString()
     Case Else
        '... assume a string and just return the attribute value, or do some other handling
  End Select
  Return lstrValue
End Function

一旦我有了这个函数,我就可以遍历我正在处理的实体的属性,并得到一些文本值来表示每个字段的值,而不管字段类型如何。需要注意的一件事,在我的示例中,我使用 .FormattedValues() 获取 OptionSet 字段的字符串值,我相信您只能在您的实体填充了 Id 唯一标识符字段时使用它.

可以使用Entityclass的方法GetFormattedAttributeValue

示例:

Entity myAccount = service.Retrieve("account", accountId, new ColumnSet(true));
string createdOn = myAccount.GetFormattedAttributeValue("createdon");