You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@groovy.apache.org by Merlin Beedell <MB...@cryoserver.com> on 2017/11/16 15:48:21 UTC
Getting Methods/Properties of objects under "Scriptom"
I am trying to analyse a large chunk of emails in Outlook. I thought that I could re-write my VBA script using Groovy with "scriptom" to access the COM objects - and indeed it works. Yippee! So I can send an email and query the folder tree etc.
However, I am a curious person, and sometime would like to "query" the methods and properties of an Object - and the "listMnP (Object)" [see below] works nicely for Java objects.
This often helps when I am trying to match the documentation that I can find on Google, to the various objects that I am accessing.
However, I get a "Can't map name to dispid: metaClass" error - which is probably quite understandable. Is it possible to query the Methods and Properties of a dynamic object in any way?
org.codehaus.groovy.scriptom.Scriptom.inApartment {
def OutApp = new org.codehaus.groovy.scriptom.ActiveXObject("Outlook.Application")
def myNameSpace = OutApp.GetNameSpace("MAPI")
println myNameSpace.Folders.Count
def myFolder = myNameSpace.Folders.GetFirst()
println myFolder.name
listMnP myFolder /// this should cause the object "myFolder" to list its Methods and Properties - but it errors.
def OutMail = OutApp.CreateItem(0)
OutMail.to = "an email address!!"
OutMail.CC = ""
OutMail.BCC = ""
OutMail.Subject = "This is the Subject line"
OutMail.Body = "Hi there"
OutMail.Send()
OutMail = null
OutApp = null
}
///////////////////// end ////////////////
void listMnP (def thing) {
println " >> Methods of ${thing.class} >>"
thing.metaClass.methods.each { method ->
println "$method.name -> $method.parameterTypes"
}
println " >> Properties >>"
thing.metaClass.properties.each { prop ->
print "$prop.name -> "
try {println thing[prop.name]} catch (Exception e) {println "-NoValue-"}
}
try {println "Class Loader: ${thing.class.classLoader}"} catch (e) {println "No Class Loader"}
}
================== When run the "List Methods and Properties" function is not effective ===============
PS C:\opt\groovy\OutlookScripts> groovy .\scanMailbox.groovy
3
Online Archive - MBeedell@cryoserver.com
>> Methods of class org.codehaus.groovy.scriptom.ActiveXObject >>
Caught: com.jacob.com.ComFailException: Can't map name to dispid: metaClass
com.jacob.com.ComFailException: Can't map name to dispid: metaClass
at com.jacob.com.Dispatch.invokev(Native Method)
at com.jacob.com.Dispatch.invokev(Dispatch.java:858)
at com.jacob.com.Dispatch.get(Dispatch.java:1258)
at com.jacob.activeX.ActiveXComponent.getProperty(ActiveXComponent.java:171)
at scanMailbox.listMnP(scanMailbox.groovy:61)
at scanMailbox$_run_closure2.doCall(scanMailbox.groovy:45)
at scanMailbox$_run_closure2.doCall(scanMailbox.groovy)
at scanMailbox.run(scanMailbox.groovy:37)
Merlin Beedell