2012-09-24 30 views
5

¿Cómo puedo ver qué propiedades tiene un elemento en un script VB? Ejemplo:Obtener propiedades del elemento VB

Dim list : Set list = CreateObject("Scripting.Dictionary") 
' ... Fill List ... 
WriteListElements list 
... 

Sub WriteListElements (list) 
    Dim e, le 
    For Each e In list 
     Set le = list(e)     ' what properties does le have? 
     le.name_of_user_defined_attribut ' I want to access a property but dont know the exact name 
    Next 
End Sub 

Utilizo una herramienta con una API de VBScript. En esa API, puedo leer los atributos (definidos por el usuario) de esa herramienta. Pero mientras ejecuto el script me sale un error que me dice que no sabe el nombre de ese usuario definido attribut. Pero lo uso en la herramienta. Ahora me gustaría saber qué atributos están disponibles en la matriz de arriba para ver si los atributos definidos por el usuario tienen un nombre específico.

+0

¿Usted está buscando algo así como la reflexión, pero para el viejo y simple VBScript? Si es así, me temo que no es posible. Tal vez podamos ayudarle a encontrar una forma alternativa, si explica exactamente por qué quiere hacer eso: ¿es que su objeto 'lista' nunca tendrá el mismo tipo entre las llamadas a su método WriteListElements() y por lo tanto no puede conocer su ¿tipo? – mbarthelemy

+0

He actualizado la pregunta. –

+0

Si tiene PowerShell, puede crear una instancia del objeto allí y luego usar 'gm' para obtener sus miembros: http://stackoverflow.com/questions/668321/how-to-use-powershell-get-member- cmdlet – bytebuster

Respuesta

2

No es realmente posible. Solo la información de tipo muy básico está disponible en el tiempo de ejecución de VBScript. Idealmente, podría crear un adaptador que traduzca los objetos de su herramienta a objetos estándar del Diccionario e itere las Teclas. Si eso no es posible, lo mejor que puede hacer es verificar el nombre del tipo para cada objeto antes de invocar a sus miembros. Ejemplo:

<html> 
<body> 

<script type="text/vbscript"> 

    Class Human 
     Private m_name 

     Public Property Get Name 
      Name = m_name 
     End Property 

     Public Property Let Name(newName) 
      m_name = newName 
     End Property 
    End Class 

    Dim joe 
    Set joe = new Human 
    joe.Name = "Joe Coder" 

    Dim list 
    Set list = CreateObject("Scripting.Dictionary") 
    list.Add "a", 5 
    list.Add "b", joe 
    list.Add "c", "apples" 

    WriteListElements list 

    Sub WriteListElements (list) 
     Dim e 
     For Each e In list 
      If (TypeName(list.Item(e)) = "Human") Then 
       document.write("We have found a Human: " &_ 
        "<b>" & list.Item(e).Name & "</b>") 
      End If 
     Next 
    End Sub 

</script> 

</body> 
</html> 
1
Dim list : Set list = CreateObject("Scripting.Dictionary") 
' ... Fill List ... 
WriteListElements list 
... 

Sub WriteListElements (list) 
    Dim e, le  
    For Each e In list 
     Set le = e.Items     
     Response.Write le(name_of_user_defined_attribut) 
    Next 
End Sub 
0

Es fácil - utilizar un pseudo reflexión:

class Developer 

     Public reflection 
    '============================= 
    'Private properties 
     private mId 

     private mFirstName 
     private mLastName 

     private sub Class_Initialize() 
     reflection = Array("Id","FirstName","LastName") 
     end sub 

     private sub Class_Terminate() 
     end sub 

    '============================= 
    'public properties 

     public property get Id() 
      Id = mId 
     end property 

     public property let Id(val) 
      mId = val 
     end property 


     public property get FirstName() 
      FirstName = mFirstName 
     end property 

     public property let FirstName(val) 
      mFirstName = val 
     end property 

     public property get LastName() 
      LastName = mLastName 
     end property 

     public property let LastName(val) 
      mLastName = val 
     end property 

    end class 


    For each property in obj.reflection 
    document.write(property) 
    document.write(Eval ("obj." & property)) 
    Next 
Cuestiones relacionadas