2012-09-24 21 views
5

के गुण प्राप्त करें मैं कैसे देख सकता हूं कि वीबी स्क्रिप्ट में तत्वों का क्या गुण है? उदाहरण:वीबी तत्व

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 

मैं एक वीबीस्क्रिप्ट एपीआई के साथ एक उपकरण का उपयोग करता हूं। उस एपीआई में मैं उस उपकरण से (उपयोगकर्ता परिभाषित) विशेषताओं को पढ़ सकता हूं। लेकिन स्क्रिप्ट चलाने के दौरान मुझे एक त्रुटि मिलती है जो मुझे बताती है कि यह उस उपयोगकर्ता परिभाषित विशेषता का नाम नहीं जानता है। लेकिन मैं इसे उपकरण में उपयोग करता हूं। अब मैं यह जानना चाहता हूं कि उपयोगकर्ता द्वारा परिभाषित विशेषताओं का नाम विशिष्ट रूप से नामित किया गया है या नहीं, यह देखने के लिए उपरोक्त सरणी में कौन से गुण उपलब्ध हैं।

+0

आप प्रतिबिंब की तरह लेकिन सादे पुराने VBscript के लिए कुछ करने के लिए देख रहे हैं? यदि हां, मुझे डर है कि यह संभव नहीं है। हो सकता है कि हम आपको वैकल्पिक तरीके से ढूंढने में मदद करें, अगर आप समझते हैं कि आप ऐसा क्यों करना चाहते हैं: यह है कि आपकी 'सूची' ऑब्जेक्ट में आपके WriteListElements() विधि के कॉल के बीच समान प्रकार नहीं होगा और इस प्रकार आप इसे नहीं जान सकते प्रकार? – mbarthelemy

+0

मैंने सवाल अपडेट किया। –

+0

यदि आपके पास पावरशेल है, तो आप वहां ऑब्जेक्ट का एक उदाहरण बना सकते हैं और उसके सदस्यों को प्राप्त करने के लिए 'gm' का उपयोग कर सकते हैं: http://stackoverflow.com/questions/668321/how-to-use-powershell-get-member- cmdlet – bytebuster

उत्तर

0

क्या आप इस तरह की एक स्क्रिप्ट से गुणों की सूची प्राप्त कर पाएंगे?

http://www.vbsedit.com/scripts/misc/wmi/scr_1332.asp

और, आप तो eval() का उपयोग करें या इन गुणों के मूल्यों को प्राप्त करने के लिए निष्पादित कर सकते हैं।

2

वास्तव में संभव नहीं है। वीबीस्क्रिप्ट रनटाइम में केवल मूलभूत जानकारी उपलब्ध है। आदर्श रूप से आप एक एडाप्टर बना सकते हैं जो आपके टूल की ऑब्जेक्ट्स को मानक डिक्शनरी ऑब्जेक्ट्स में अनुवाद करता है और कीज़ को फिर से चलाता है। यदि यह संभव नहीं है, तो आप अपने सदस्यों को आमंत्रित करने से पहले प्रत्येक ऑब्जेक्ट के लिए टाइप नाम देख सकते हैं। उदाहरण:

<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

यह आसान है - एक छद्म प्रतिबिंब का उपयोग करें:

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