Private Function AddDynamicEntityPropertyToTreeNode(ByVal node As TreeNode, ByVal [property] As [Property]) As TreeNode
If TypeOf [property] Is CrmBooleanProperty Then
Dim p = CType([property], CrmBooleanProperty)
Dim value = CType(p.Value, CrmBoolean)
node = AddDynamicEntityPropertyValueToTreeNode(node, value)
ElseIf TypeOf [property] Is CrmDateTimeProperty Then
Dim p = CType([property], CrmDateTimeProperty)
Dim value = CType(p.Value, CrmDateTime)
node = AddDynamicEntityPropertyValueToTreeNode(node, value)
ElseIf TypeOf [property] Is CrmDecimalProperty Then
Dim p = CType([property], CrmDecimalProperty)
Dim value = CType(p.Value, CrmDecimal)
node = AddDynamicEntityPropertyValueToTreeNode(node, value)
ElseIf TypeOf [property] Is CrmFloatProperty Then
Dim p = CType([property], CrmFloatProperty)
Dim value = CType(p.Value, CrmFloat)
node = AddDynamicEntityPropertyValueToTreeNode(node, value)
ElseIf TypeOf [property] Is CrmMoneyProperty Then
Dim p = CType([property], CrmMoneyProperty)
Dim value = CType(p.Value, CrmMoney)
node = AddDynamicEntityPropertyValueToTreeNode(node, value)
ElseIf TypeOf [property] Is CrmNumberProperty Then
Dim p = CType([property], CrmNumberProperty)
Dim value = CType(p.Value, CrmNumber)
node = AddDynamicEntityPropertyValueToTreeNode(node, value)
ElseIf TypeOf [property] Is CustomerProperty Then
Dim p = CType([property], CustomerProperty)
Dim value = CType(p.Value, Customer)
node = AddDynamicEntityPropertyValueToTreeNode(node, value)
ElseIf TypeOf [property] Is EntityNameReferenceProperty Then
Dim p = CType([property], EntityNameReferenceProperty)
Dim value = CType(p.Value, EntityNameReference)
node = AddDynamicEntityPropertyValueToTreeNode(node, value)
ElseIf TypeOf [property] Is KeyProperty Then
Dim p = CType([property], KeyProperty)
Dim value = CType(p.Value, Key)
node = AddDynamicEntityPropertyValueToTreeNode(node, value)
ElseIf TypeOf [property] Is LookupProperty Then
Dim p = CType([property], LookupProperty)
Dim value = CType(p.Value, Lookup)
node = AddDynamicEntityPropertyValueToTreeNode(node, value)
ElseIf TypeOf [property] Is OwnerProperty Then
Dim p = CType([property], OwnerProperty)
Dim value = CType(p.Value, Owner)
node = AddDynamicEntityPropertyValueToTreeNode(node, value)
ElseIf TypeOf [property] Is PicklistProperty Then
Dim p = CType([property], PicklistProperty)
Dim value = CType(p.Value, Picklist)
node = AddDynamicEntityPropertyValueToTreeNode(node, value)
ElseIf TypeOf [property] Is StateProperty Then
Dim p = CType([property], StateProperty)
Dim value = CType(p.Value, String)
node = AddDynamicEntityPropertyValueToTreeNode(node, value)
ElseIf TypeOf [property] Is StatusProperty Then
Dim p = CType([property], StatusProperty)
Dim value = CType(p.Value, Status)
node = AddDynamicEntityPropertyValueToTreeNode(node, value)
ElseIf TypeOf [property] Is StringProperty Then
Dim p = CType([property], StringProperty)
Dim value = CType(p.Value, String)
node = AddDynamicEntityPropertyValueToTreeNode(node, value)
ElseIf TypeOf [property] Is UniqueIdentifierProperty Then
Dim p = CType([property], UniqueIdentifierProperty)
Dim value = CType(p.Value, UniqueIdentifier)
node = AddDynamicEntityPropertyValueToTreeNode(node, value)
Else
Throw New ArgumentException("Property type is not supported.", "property") End If
Return node
End Function
Private Function AddDynamicEntityPropertyValueToTreeNode(ByVal node As TreeNode, ByVal value As Object) As TreeNode
' Create a list of DynamicEntityProperty
Dim values As New BindingList(Of DynamicEntityProperty)
' Check this is not a string or a value type (i.e. this is a reference type)
If Not (TypeOf value Is String) And Not (Type.GetType(value.GetType.AssemblyQualifiedName).IsValueType) Then
' Use reflection to get the public instance properties and their values from each property of DynamicEntity.value
For Each propertyInfo In Type.GetType(value.GetType.AssemblyQualifiedName).GetProperties(Reflection.BindingFlags.Public Or Reflection.BindingFlags.Instance)
' Check that the property can be read.
If propertyInfo.CanRead Then
Try
values.Add(New DynamicEntityProperty(propertyInfo.Name, GetString(propertyInfo.GetValue(value, Nothing))))
Catch ex As Exception
' An unknown error occured, so ignore it and do nothing
End Try
End If
Next
Else
values.Add(New DynamicEntityProperty("Value", value.ToString)) End If
' Add the list to the TreeNode.Tag property
node.Tag = values
Return node
End Function
Private Function GetString(ByVal value As Object) As String
If value Is Nothing Then
Return String.Empty
Else
If TypeOf value Is Guid Then
Return CType(value, Guid).ToString
ElseIf TypeOf value Is Boolean Then
Return value.ToString
ElseIf TypeOf value Is Integer Then
Return value.ToString
ElseIf TypeOf value Is Date Then
Return value.ToString
ElseIf TypeOf value Is String Then
Return value.ToString
Else
Return String.Empty
End If
End If
End Function