Do's and Don'ts
Importieren von Klassen
FIRSTspirit- oder Java-Klassen sollten aus Performance-Gründen immer im Header eines Skripts importiert werden.
Beispiel:
//!Beanshell
// Schlecht
if (myVar instanceof java.lang.String) {
print("its a string!");
}
//!Beanshell
// Gut!
import java.lang.String;
if (myVar instanceof String) {
print("its a string!");
}
Beim Scripting mit BeanShell gibt es einige wenige Regeln, an die sich ein Vorlagenentwickler halten sollte, um Skripte wartungsarm und effizient zu gestalten.
Sperren von Objekten (Locking)
Das Setzen von Sperren (Locks) sollte immer nach folgendem Schema erfolgen:
//!Beanshell
import de.espirit.firstspirit.access.store.LockException;
try {
elm.setLock(true, false);
try {
...
elm.save("some comment", false);
} catch (Exception e) {
// catch handling
} finally {
elm.setLock(false, false);
}
} catch (LockException e) {
// Element locked, catch handling
}
Nur damit ist ein sicheres Entfernen der Sperre garantiert.
Iteration über die Kinder eines Elementes
Es kommt häufig vor, dass man über alle Kinder eines bestimmten Elementes (z.B. Ordner) iterieren möchte.
Wichtig ist dabei zu beachten, dass die Liste (insbesondere wenn rekursive alle Kinder betrachtet werden) sehr lang sein kann und daher immer mit Iteratoren (niemals mit Arrays oder kompletten Listen) gearbeitet werden sollte.
Hier ein Code-Beispiel für die korrekte Iteration über die Kinder eines Elementes im Baum, wobei die Kinder nach einer bestimmten Klasse (hier "MyClass") gefiltert werden.
//!Beanshell
// ..Ermittlung der Variable folder...
for (elem : folder.getChildren(MyClass.class, true).iterator()) {
print(elm.getSomeValue(...));
}
Logausgaben
Die Ausgabe eines Ausdrucks oder einer Variablen erfolgt in BeanShell über das Kommando "print()":
//!Beanshell
// Schlecht
print()
Diese Ausgabe sollte durch eine differenzierte Ausgabe über die drei Logging-Methoden:
- logInfo
- logError
- logDebug
ersetzt werden. Die Log-Methoden stehen im jeweiligen Skript-Kontext zur Verfügung.
Beispiel:
//!Beanshell
// gut
context.logDebug(...)
Der Vorteil ist: die Protokollierung von Skripten kann auf einfache Art beeinflusst werden. So kann für Skripte beispielsweise eine "erweiterte Protokollierung" im FIRSTspirit-JAVAclient aktiviert werden (Checkbox im Menü "Extras"/"Erweiterte Protokollierung" aktivieren – siehe Abbildung).
Bestimmte Informationen werden nur in der "erweiterten Protokollierung" angezeigt bzw. ausgegeben und können zum Debugging eines Skripts genutzt werden. Ist das nicht mehr erwünscht, kann die Protokollierung einfach wieder deaktiviert werden.