2017-08-30 7 views
0

La méthode getType est supposée retourner un objet qui représente le type de l'élément passe dans la méthode:retourne réflexion de type com.sun.star.uno.XInterface pour tous les objets

var serviceManager = new ActiveXObject('com.sun.star.ServiceManager'); 
var desktop = serviceManager.createInstance("com.sun.star.frame.Desktop"); 
var document = desktop.loadComponentFromURL("private:factory/swriter", "_blank", 0, []); 
var coreReflection = serviceManager.createInstance("com.sun.star.reflection.CoreReflection"); 

// should return a type representing the com.sun.star.frame.Desktop type 
var classInfo = coreReflection.getType(desktop); 

Cependant, le classInfo semble toujours contenir le type com.sun.star.uno.XInterface:

// outputs com.sun.star.uno.XInterface 
WScript.Echo(classInfo.getName()); 

même si je passe dans d'autres objets, la sortie est le même:

classInfo = coreReflection.getType(document); 
WScript.Echo(classInfo.getName()); 

Comment puis-je connaître le type actuel?

(posté au ask.libreoffice)

+0

Ces questions sont très probablement mieux posées sur les listes de diffusion des développeurs LibreOffice. Très probablement la seule personne qui peut répondre à de telles questions et donner des conseils sur la façon de mettre en œuvre un bon pont uno est Stephan Bergmann qui est un développeur LibreOffice payé. – moggi

+0

@moggi Je ne suis pas (encore) intéressé par la mise en place d'un pont uno; Je suis intéressé à utiliser [le pont d'automatisation existant] (https://wiki.openoffice.org/wiki/Documentation/DevGuide/ProUNO/Bridge/Automation_Bridge); mais merci beaucoup quand même. –

+0

même dans ce cas, Stephan et la liste de diffusion pourraient être la meilleure approche. Par exemple. com.sun.star.frame.Desktop est un service et pas un type mais seul Stephan ou peut-être Michael connaîtrait les détails pour lesquels getType renvoie XInterface au lieu de l'une des autres interfaces. – moggi

Répondre

0

Je crois que vous êtes à la recherche du « nom de mise en œuvre » plutôt que le « nom du type d'interface. »

Le code suivant adapté de XrayTool donne le message com.sun.star.comp.framework.Desktop (comp ici perhaps be ignored).

WScript.Echo(desktop.ImplementationName) 

Il existe également une bonne approche qui n'est cependant disponible que pour Basic.

obj = createUnoService("com.sun.star.frame.Desktop") 
MsgBox obj.DBG_Properties 

Cela produira un long message, en commençant avec Properties of object "com.sun.star.frame.Desktop". Enfin, n'oubliez pas de supportsService, bien que cela ne soit peut-être pas aussi pertinent pour votre cas d'utilisation particulier. Lors de l'écriture de macros, la méthode préférée consiste à vérifier si un objet particulier prend en charge un service plutôt que de vérifier le type de l'objet.