tjuice
I'm new here

Aufruf von FS Beanshell Scripten aus anderen Beanshell Scripten

Hallo Zusammen,

gibt es in FirstSpirit eigentlich die Möglichkeit Beanshell Scripte aus anderen Beanshell Scripten aufzurufen?

Muß ich dafür über die ScriptEngine gehen um die Executables auszulesen?!?

Falls ja, hätte jemand ein Beispiel, wie das Ganze funktioniert?

Vielen Dank schon mal!

Thomas Pannek

14 Replies

Hallo zusammen,

ich nehme das Beispiel hier mal auf und habe selber eine Frage.

Wie kann ich eigene Parameter in meine Executable Klasse einbringen?

z.B. würde ich gerne  an dieser Stelle data.get("st_text"); "st_text" nicht fest in den Quellcode schreiben.

Oder

String meintext = params.get("begruessungstext");

import de.espirit.firstspirit.access.GuiScriptContext;

public class MyExecutable implements Executable {

....

public Object execute(final Map<String, Object> params, final Writer _out, final Writer _err) throws ExecutionException {
     final Object contextArg = params.get("context");
     if (contextArg instanceof GuiScriptContext) {
          final GuiScriptContext context = (GuiScriptContext) contextArg;
          final Data data = context.showGui();
          if (data != null) {
               data.get("st_text");
               // todo
          } else {
               // user clicked cancel
          }
     }
}

Dazu würde ich dann im beanshell Script folgendes schreiben wollen

import java.util.HashMap;

import java.util.HashMap;

import java.util.Map;

import java.lang.String;

import java.lang.Object;

Map<java.lang.String,java.lang.Object> map = new HashMap<java.lang.String,java.lang.Object>();

map.put("context",context);

map.put("begruessungstext","HelloWorld");

map.put("datafiled","st_text");

#! executable-class

MyExecutable.execute(map);

Das geht aber so nicht.

Was mache ich da falsch?


0 Kudos

Das ist jetzt ein Beanshell-Skript , d.h. die letzten beiden Zeilen ersetzen durch Beanshell-Code (new MyExecutable().execute(map);) dann sollte es funktionieren.

Peter
0 Kudos

Danke hat mir weiter geholfen.

Aber der 1.Fehler war schon weiter oben.

Das ersetzt

Map<java.lang.String,java.lang.Object> map = new HashMap<java.lang.String,java.lang.Object>();

map.put("context",context);

map.put("begruessungstext","HelloWorld");

map.put("datafiled","st_text");

mit

Map map = new HashMap();

importObject( map );

put("context", context);

put("begruessungstext", "HelloWorld")

(new MyExecutable().execute(map);)

und dann geht es.

Danke

0 Kudos
fadtke
I'm new here

Hi,

es ist wahrscheinlich nicht mehr aktuell, aber was spricht gegen diese Variante?:

TemplateStoreRoot templateStore = ((UserService)context.getUserService()).getTemplateStore();

Map map = new HashMap();

map.put("context", context);

templateStore.getScripts().getScriptByName("__ref_name__").getExecutable(context.getProject().getTemplateSets().get(0)).execute(map);

Beste Grüße

Ich bestätige der Post  von "Marcel Fadtke" als Anwort, weil ich die gleiche Struktur getestet habe, und ich konnte von einem Skript ein weiteres Skript oder mehrere Skripte starten.

0 Kudos