Search the FirstSpirit Knowledge Base
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
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?
Das ist jetzt ein Beanshell-Skript , d.h. die letzten beiden Zeilen ersetzen durch Beanshell-Code (new MyExecutable().execute(map);) dann sollte es funktionieren.
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
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.