Dass es sich um eine Opt-in Funktion handelt, mag wohl ein Grund sein, warum viele Leute die Scripting-Funktion übersehen. Aus Sicherheitsgründen haben wir uns entschieden, die Verfügbarkeit standardmäßig auf false zu setzen. Um die Funktion einzuschalten, müssen Sie nur die Option LL_OPTION_SCRIPTENGINE_ENABLED (Index 276) auf 1 setzen. Wie Sie dabei genau vorgehen müssen, zeige ich Ihnen exemplarisch am Beispielbericht „Bestellliste mit Scripting“ in der Demoanwendung. Der Bericht zeigt die Bestellnummer, das Bestell- und Lieferdatum sowie eine skriptgesteuerte Berechnung der Anzahl der Arbeitstage zwischen diesen beiden Dati an.
Die letzte Spalte im Bericht lautet:
ScriptVal ("CSharpScript", LoadFile$ (ProjectPath$() + "WorkingDays.cs"))
Übersetzt heißt das: Lade das Skript WorkingDays.cs aus dem Projektpfad und gib seinen Wert zurück. Wenden wir uns also dem Skript zu. Der entscheidende Teil ist die Main()-Methode:
static void Main() { var workDayCalc = new WorkingDaysCalculator(); WScript.Result = workDayCalc.Calculate(Report.Field("Orders.OrderDate"), Report.Field("Orders.ShippedDate")); }
Der WorkingDaysCalculator ist nur eine einfache Klasse, um die Arbeitstage auf eine recht primitive Weise zu berechnen. Der interessantere Teil ist die Verwendung des Report-Objekts, das dynamisch hinzugefügt wird. Es beinhaltet ein paar Methoden:
Methode | Verwendungszweck |
---|---|
Eval | Wertet eine vollständige List & Label-Formel aus, basierend auf den angegebenen Feldern und Variablen zum Zeitpunkt der Auswertung. |
Variable | Gibt den Wert einer Variablen an. |
Field | Gibt den Wert eines Feldes an. |
SetVar | Setzt eine Variable im Report, die später mit GetVar() außerhalb des Skripts abgerufen werden kann. |
GetVar | Ruft eine Variable aus dem Report ab, die zuvor mit SetVar() außerhalb des Skripts gesetzt wurde. |
Mit diesen Methoden können Sie einfach mit dem Bericht und Ihren Daten interagieren. Und wie oben gezeigt, können Sie einen Wert für die Funktion ScriptVal zurückgeben, indem Sie WScript.Result setzen.
Zusätzlich gibt es auch die Möglichkeit, Ihre Skripte zu debuggen. Dazu müssen Sie nur die Zeile
<!--#pragma debugmode-->
ganz am Anfang des Skripts einfügen. Dadurch wird automatisch der folgende Code am Anfang der Main()-Methode eingefügt:
System.Diagnostics.Debugger.Launch(); if (System.Diagnostics.Debugger.IsAttached) { System.Diagnostics.Debugger.Break(); }
Dieser startet einen geeigneten Debugger, hängt ihn an den Prozess an und stoppt die Ausführung für das Debugging, bevor irgendein Teil des eigentlichen Codes ausgeführt wird.
Ich freue mich darauf, dieses stark unterschätzte Feature in Zukunft öfters angewendet zu sehen.