3 messages in org.openoffice.fr.progRE: [prog] Re: [dev-fr] Appeler une m...
FromSent OnAttachments
Jean-Baptiste FaureMar 3, 2009 10:34 am 
Bernard MarcellyMar 3, 2009 12:27 pm 
ALLART PhilippeMar 4, 2009 5:19 am 
Actions with this message:
Paste this link in email or IM:
Paste this link in email or IM:
Atom feed for this thread
Paste this URL into your reader:
Subject:RE: [prog] Re: [dev-fr] Appeler une macro depuis Java [resolu]Actions...
From:ALLART Philippe (pall@cudl-lille.fr)
Date:Mar 4, 2009 5:19:43 am
List:org.openoffice.fr.prog

Merci Bernard,

mais je n'ai pas su faire marcher comme ça. En fait l'application java crée un
nouveau document à partir d'un modèle, et je n'ai pas trouvé comment récupérer
le nom du document courant. En fait, il n'en a pas encore.

Et j'ai vu aussi que le dispatcher fonctionne en mode asynchrone, ce qui
pourrait poser encore d'autres problèmes.

J'ai trouvé une autre façon de faire, inspirée d'un exemple qui consistait à
lancer XRay: http://www.oooforum.org/forum/viewtopic.phtml?t=23333

Donc voici mon implémentation, qui marche très bien, finalement:

-------------------------------- public Object executeCommand(String strCmdName) throws FusionException { if (!this.macroAllowed) { // cette propriété est initialisée à partir d'une variable
d'environnement this.log("executeCommande: excécution des macros non autorisée"); return (Object)null; }

try { XScriptProviderSupplier xScriptPS =
(XScriptProviderSupplier)UnoRuntime.queryInterface(XScriptProviderSupplier.class,
this.aDoc); XScriptProvider xScriptProvider = xScriptPS.getScriptProvider(); XScript xScript = xScriptProvider.getScript("vnd.sun.star.script:" +
strCmdName);

short[][] aOutParamIndex = new short[1][1]; Object[][] aOutParam = new Object[1][1]; return xScript.invoke(new Object[0], aOutParamIndex, aOutParam);

} catch (ScriptFrameworkErrorException e) { this.log("executeMacro - Commande <"+strCmdName+"> non exécutable:
"+e.getMessage()); } catch (Exception e) { throw new RuntimeException(e); } return (Object)null; }

--------------------------------

Et on l'utilise comme ça: monDocument.executeCommand("Standard.Fusion.End?language=Basic&location=document");

(ou "location=application" si la macro est installé sur le poste).

Et pas besoin de connaître le nom du document courant :-).

Bien sûr, ça fait un gros trou de sécurité côté serveur. Mais ça se gère.

Bien cordialement et encore merci pour vos réponses.

Ph.

-----Message d'origine----- De : Bernard Marcelly [mailto:marc@club-internet.fr] Envoyé : mardi 3 mars 2009 21:29 À : pr@fr.openoffice.org Objet : Re: [prog] Re: [dev-fr] Appeler une macro depuis Java (oui, encore :-)

Bonsoir,

Message de Jean-Baptiste Faure date 2009-03-03 19:34 :

Le 03.03.2009 17:40, ALLART Philippe a écrit :

bonjour,

j'ai besoin d'apppeler une macro basic depuis une application java.

La macro n'ai jamais exécutée. Elle se trouve dans le document courant Depuis l'application Java, je l'appelle avec le nom
"macro:///Standard.Module1.StartFusion".

Cette séquence "macro:///Standard.Module1.StartFusion" appelle une macro qui se trouve dans la bibliothèque Standard de "Mes Macros".

Pour appeler une macro dans un document déjà chargé, il faut ajouter le nom court de ce document: "macro://NomDuDocument/Standard.Module1.StartFusion"

Le nom court est le nom sans l'extension.

Bernard