Questions & Answers

oboeck
I'm new here

ExecutableToolbarItem soll Executable aus anderem Modul aufrufen

Hallo zusammen,

mich wรผrde es interessieren wie man in einem ExecutableToolbarItem-Plugin eine Executable aus einem anderen Modul aufruft.

Anwendungsfall:

Das FS Modul WebControlling

http://www.e-spirit.com/odfs52/dokumentation/zusaetzliche-dokumentation/firstspirit-webcontrolling/

liefert 6 Beanshell Scripte mit, diese kรถnnen รผber das Kontextmenรผ aufgerufen werden.

In diesen Beanshell Scripten liegt eigentlich nur der Aufruf einer Executable Klasse.

#!executable-class

WebControllingEnableEtExecutable

Ich will aber das Skript nicht รผber das Kontextmenรผ ausfรผhren sondern dafรผr einen eigenen Button in der Toolbar erzeugen.

Am den SourceCode des WebControlling Moduls kann ich das ja schlecht einbauen. Deswegen wรผrde ich ein eigenes Modul bauen mit einem JavaClientEditorialToolbarItemsPlugin als einzigstem Inhalt welches dann die in dem Beanshell Script liegende Executable anstรถรŸt.

Aber ist es so einfach wie ich mit das vorstelle?

.....

.....       

/**

* Define an executable toolbar item. When this item is clicked, the method {@code execute(ToolbarContext context)} is

* called.

*/

private static class ExampleExecutableToolbarItem implements ExecutableToolbarItem {

        @Override

        public void execute(@NotNull final ToolbarContext context) {

             EnableEtExecutable executable = new EnableEtExecutable();

             executable.execute();

        }

.......

.....

Eigentlich mรผsste ich ja noch die Klasse importieren oder nicht?

import de.espirit.pm.modules.etracker.exec.EnableEtExecutable;

Vielleicht hat jemand das oder sowas in der Art schon einmal umgesetzt und kann mir einen Tipp geben?

Danke und GrรผรŸe

Olli

0 Kudos
3 Replies
mbergmann
Crownpeak employee

Hallo Olli,

das wird so einfach nicht funktionieren, weil der ToolbarContext ein sehr viel "schmaleres" Interface ist als der GuiScriptContext und in der Hierarchie auch "daneben" liegt.

Das Executable des Moduls darf ja davon ausgehen, einen GuiScriptContext zu bekommen (eben weil es als Kontextmenรผscript eingebunden bzw. dazu gedacht ist). Auf welchen ggf. in der Hierarchie hรถher gelegenen Kontext dort intern tatsรคchlich gecastet wird und welche Methoden dann auch wirklich aufgerufen werden, weiรŸ ich nicht.

Mit einigen Umwegen (=einem GuiScriptContext, den man selber implementiert usw.) wรผrde man es wahrscheinlich zwar hinbekommen, es wรคre aber eine recht "wackelige" Geschichte, d.h. es kann passieren dass es nach dem nรคchsten Update schon nicht mehr geht wenn das WebControllingEnableEtExecutable geรคndert wird (was ja erlaubt wรคre). AuรŸer Du implementierst den GuiSciptContext wirklich komplett - wenn das รผberhaupt mรถglich ist...

Viele GrรผรŸe

Michael

0 Kudos

Hallo Olli,

Michael hat Recht. Theoretisch kann man sich den GuiScriptContext selbst implementieren, aber ob Du in dem Kontext des ToolbarItems an alle Informationen kommst, sieht man erst, wenn man es implementiert und ausprobiert.

Was spricht eigentlich dagegen, die Logik des Executables in eine externe Klasse auszulagern und diese dann im Executable und dem ToolbarItem zu verwenden?

Man kรถnnte diese externe Klasse in ein eigenes Jar packen und in beiden Modulen verwenden.

รœbrigens, das mit dem Impotieren klappt nur dann, wenn der Java-Compiler die Klasse statisch linken kann. Das bedeutet ja, du musst die Executable irgendwie lokal als Java-Klasse vorliegen haben. Einfach so mit importieren wird das nicht klappen. Da mรผsste man schon so etwas (verbotenes) wie Class.forName("..."); machen...

Und schlieรŸlich mรผsste man strenggenommen auf Ebene der module.xml einen dependency-Tag definieren, um anzuzeigen, dass man ohne das andere Modul nicht installiert werden kann...

Aus diesem Grund: Externe Klasse und eigenes Jar is the way to go...

GrรผรŸe Marian

0 Kudos

Hallo zusammen und Danke fรผr eure Rรผckmeldung.

Meine Einschรคtzung ist dass das ganze dann doch zu aufwรคndig und teuer ist, nur das der Redakteur das ganze รผber ein Button ausfรผhren kann.

@Marian, dennoch wรผrde es mich interessieren welche "Executables" ich deiner Meinung nach in eine externe Klasse auslagern soll? Die des WebControllingExecutables? Darauf habe ich doch gar keinen Zugriff.

GrรผรŸe

Olli

0 Kudos

Type a product name