Verbesserung der C#-Script-Performance

Dies ist eine weitere, gerne übersehene Funktion: Sie können Skripte zu Ihren Projekten hinzufügen und dabei Ihre bevorzugte Sprache verwenden. Schon seit einigen Versionen unterstützt List & Label auch C#-Skripte. Allerdings eignete sich die Performance zwar für komplexe, seltenere Berechnungen, aber nicht wirklich für die Verwendung auf einer Viele-Zeilen-Basis. In List & Label 26 konnten wir die Performance jetzt deutlich steigern – was die Verwendung von Skripten endlich auch in Tabellen sehr gut nutzbar macht.

List & Label unterstützt C#-Script

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:

MethodeVerwendungszweck
EvalWertet eine vollständige List & Label-Formel aus, basierend auf den angegebenen Feldern und Variablen zum Zeitpunkt der Auswertung.
VariableGibt den Wert einer Variablen an.
FieldGibt den Wert eines Feldes an.
SetVarSetzt eine Variable im Report, die später mit GetVar() außerhalb des Skripts abgerufen werden kann.
GetVarRuft 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.

Empfohlene Artikel

Schreibe einen Kommentar