Iterate Properties of a VBScript Class Object
I was trying to implement a VBScript class in order to efficiently pass multiple pieces of information across scripts and hit a wall when I found that there is no built in method to iterate over the object's properties.
I found a functional answer here http://stackoverflow.com/questions/12569931/get-properties-of-vb-element shared by Emet M. and thought that there may be others who might benefit from this. I made a couple minor changes in order to contain the pseudo-reflective stuff in the class.
Here is a small example, hope this helps!
class person
' sample class containing pseudo-reflection properties and methods
' wonky but genius. inspiration found here http://stackoverflow.com/questions/12569931/get-properties-of-vb-element
' create internal class variables
private s_firstName ' the person's first name
private s_lastName ' the person's last name
private s_phoneNumber ' the person's phone number
' initialize event
private sub class_initialize
firstName = ""
lastName = ""
phoneNumber = ""
end sub
' terminate event
' private sub class_terminate
'
' end sub
' pseudo-reflection property.
public property get propertyNames
propertyNames = Array( "firstName", "lastName", "phoneNumber" )
end property
' pseudo-reflection count property
public property get propertyCount
propertyCount = UBound(propertyNames) + 1
end property
' pseudo-reflection valueGet method
public function valueGet(propertyName)
valueGet = Eval(propertyName)
end function
' firstName property
public property get firstName
firstName = s_firstName
end property
public property let firstName(value)
s_firstName = value
end property
' lastName property
public property get lastName
lastName = s_lastName
end property
public property let lastName(value)
s_lastName = value
end property
' phoneNumber property
public property get phoneNumber
phoneNumber = s_phoneNumber
end property
public property let phoneNumber(value)
s_phoneNumber = value
end property
end class
' you can iterate the properties of the object using the propertyNames array property
' example for WScript
dim genius
set genius = new person
genius.firstName = "Joe"
genius.lastName = "Smith"
genius.phoneNumber = "123-456-7890"
for each propertyName in genius.propertyNames
message = message & propertyName & ": " & genius.valueGet(propertyName) & vbnewline
next
WScript.Echo genius.propertyCount & " properties:"
WScript.Echo message
Hi dbattaglia,
Thanks for sharing your example! Stack Overflow is a great knowledge base.
By the way, TestComplete has built-in methods aqObject.GetProperties and aqObject.GetFields to iterate over an object's properties. They should work for VBScript classes too. GetProperties returns properties defined as "Property Get/Let/Set Something" and GetFields returns public fields defined as "Public Something".
In your example, you can use:
Dim props
Set props = aqObject.GetProperties(genius) While props.HasNext Set prop = props.Next Log.Message prop.Name & ": " & aqConvert.VarToStr(prop.Value) ' & " (" & prop.Category & ")" WendHope this helps too!