Script (Tarifwerk)

Aus Wiki - Heidler Strichcode GmbH
Zur Navigation springen Zur Suche springen
TW Script Editor.png

Scripte bilden die zentrale Stelle im Tarifwerk um Regeln für Zuschläge und Tarifwerke aufzubauen. Dies können simple Abfragen sein, wie z.B. prüfen, ob es sich um eine Inselzustellung handelt, oder aber komplexe Konstrukte, die Frachtführer- oder Kundenspezifische Anforderungen umsetzen.

Alle Scripte verwenden den Pegasus Parser, eine Eigenentwicklung der Heidler Strichcode GmbH. Die Scriptsprache basiert auf der Programmiersprache Java, was manche Dinge komplizierter machen kann, dafür aber deutlich mehr Flexibilität und Performance bietet.

Scripteditor

Der Scripteditor ist in drei Bereiche unterteilt:

Informationspanel

Das Informationspanel befindet sich links oben. Es zeigt Ihnen alle Informationen an, welche Sie für die Scriptentwicklung benötigen.

Zunächst wird Ihnen aufgelistet, welche Variablen Sie zur Verfügung haben und welchen Typ (welche Klasse) die Variablen besitzen. Im Tarifwerk erhalten Sie hier meist die Variable shipment, was der aktuellen Sendung entspricht, und eventuell die Variable packageData, was dem aktuellen Packstück entspricht.

Der Erwartete Rückgabetyp ist der Typ des Wertes, welchen Sie in diesem Script zurückgeben müssen. Im Tarifwerk wird in der Regel nur Boolean (true oder false) oder Double (Gleitkommazahl mit doppelter Präzision) erwartet.

Button-Leiste

Die Button-Leiste befindet sich rechts oben. Sie können damit zusätzliche Anpassungen und Tests vornehmen.

Importe

Der Button Importe öffnet einen Editor, in dem Sie zusätzliche Klassen (Funktionalitäten) zum aktuellen Script hinzufügen können. Über den Button Suchen können Sie die aktuell eingegebene Klasse suchen. Bei Erfolg wird Ihnen diese Klasse in der Liste darüber angezeigt.

Folgende Klassen und Interfaces sind standardmäßig Importiert und müssen nicht angegeben werden:

  • java.util.Date
  • java.text.SimpleDateFormat
  • java.util.ArrayList
  • java.util.List
  • java.util.Map
  • java.util.HashMap

Variablen

Der Variableneditor ermöglicht es Ihnen, diverse Testszenarien aufzubauen, indem Sie die Werte der gegebenen Variablen beliebig verändern können. Bei komplexeren Variablen-Typen (wie z.B. Sendung oder Packstück) wird die Variable im JSON-Format angezeigt und editiert. Es gelten die üblichen Regeln für Escape-Zeichen.

Test

Über den Button Test können Sie Ihr aktuelles Script testen. Falls ein Syntaxfehler vorhanden ist, wird Ihnen dieser mit Angabe der Zeile angezeigt. Zusätzlich können Sie, solange das Ergebnisfenster offen ist, die komplette erstellte Klasse im Ordner Tarifwerk\compile\scriptbase einsehen.

Editor

Im Editor können Sie Ihr Script implementieren. Der Editor besitzt einige Features um das Erstellen von Scripten einfacher zu machen:

  • Falls ein Script einzeilig ist und nicht mit einem Semikolon endet benötigen Sie kein return Statement. Dieses wird automatisch hinzugefügt.
  • Der Scripteditor besitzt Code-Highlighting um Variablen, Kommentare und Klassen voneinander trennen zu können
  • Der Scripteditor besitzt eingeschränkte Code-Vervollständigungs-Features. Diese aktiviert man über die Tastenkombination Strg+Leer

Zusatzfunktionen

Der Scripteditor kommt standardmäßig mit einigen zusätzlichen Funktionen. Viele dieser Funktionen entsprechen den Parserausdrücken aus dem HVS32.

Die Detailbeschreibung und Verwendung können Sie der Code-Vervollständigung (Strg+Leer) entnehmen. Oft verwendete und nützliche Funktionen sind:

  • ATrim: Entfernt alle Leerzeichen am Anfang und Ende des Strings.
  • Left: Gibt die ersten n Stellen eines String zurück.
  • Right: Gibt die letzten n Stellen eines Strings zurück.
  • DEBUG: Zeigt den Wert einer Variable in einer Message Box an. (Bitte niemals ein Script speichern was diese Funktionen enthält)
  • DateTimeFormat: Konvertiert einen String in ein Datum.
  • FormatDateTime: Konvertiert ein Datum in einen String.
  • GetListItem: Extrahiert aus einem String das n-te Element was durch ein Trennzeichen getrennt wurde.
  • LeftPad: Füllt einen String links mit der angegebenen Anzahl Stellen und Zeichen auf

 

Besonderheiten

Da der Pegasus Parser auf Java basiert, muss man einige Dinge beachten, die in anderen Scriptsprachen (wie z.B. Javascript) nicht üblich sind.

Stringvergleiche

Zahlen werden wie üblich über ein doppeltes == verglichen:

int a = 5;
if (a == 5) {
....

Strings können damit leider nicht verglichen werden. Stattdessen muss man die Methode equals() verwenden:

String a = "test";
if (a.equals("test")) {
...

Vergleiche ohne Beachtung von Groß- und Kleinschreibung geschehen über die Methode equalsIgnoreCase().

Elemente von Variablen

Elemente von Variablen (wie z.B. die Zieladress-PLZ der Sendung) werden über Getter- und Setter-Methoden gelesen und gesetzt.

Diese besitzen immer den Prefix "get" bzw. "set" und das nächste Zeichen wird als Großbuchstabe geschrieben. Bei Boolean wird "is" statt "get" verwendet. Beispiele:

shipment.getReceiverZipcode()
shipment.getShipmentWeight()
shipment.isIsle()
packageData.getPackageType()

Direktes definieren von Nicht-int Zahlen.

Wenn Sie einen double, float oder long direkt im Quelltext definieren wollen, benötigen diese nach der Zahl einen entsprechenden Suffix:

double d = 4.3d;
float f = 5.4f;
long l = 200000l;

Beispielscripte

Prüfen auf Inselzustellung

shipment.isIsle()

Es wird die entsprechende Inseltabelle für den jeweiligen Frachtführer benötigt.

Auf bestimmte Länder prüfen

final List<String> zielLaender = java.util.Arrays.asList("DE", "CH", "AT");
return zielLaender.contains(shipment.getReceiverCountry());

Die Elemente DE, CH, AT müssen durch die gewünschten Länder im ISO2 Format ersetzt werden.

Auf bestimmte Versandart prüfen

shipment.getServiceType().equals("VID")

Die Versandart ID "VID" muss durch die Gewünschte ersetzt werden. Falls mehrere Versandarten in Frage kommen, kann man auch hier eine Liste wie im Beispiel darüber erstellen.

Nachnahme-Sendung

shipment.getCodAmount() > 0d

Verpackungsart prüfen

packageData.getPackageType().equals("KT")

Die Verpackungsart sollte meist auch nur mit Packstück-Tarifwerken und -Zuschlägen definiert werden.