zplCore.comzplCore.com

05Ausdrücke

Ausdrücke berechnen den Inhalt eines Elements aus dem Datensatz: Felder, Funktionen, Operatoren, Variablen, Bezüge auf andere Elemente und Übersetzungen. Sie gelten gleich im Label-Modell, in der Datenbindung, in Druckaufträgen, in zplCore Server und im zplCore Designer.

Ausdrücke

Vollständige Referenz: jede Funktion mit Parametern und Beispielen, Kulturen und Zahlen-/Datumsformate, leere Werte, Auftragsvariablen und Rezepte auf der Seite Ausdrücke: Funktionen, Formate, Kulturen. Ausdrücke mit eigenen Daten testen im Expression-Builder.

Felder als [Name] oder [Kunde.Adresse.Ort], Elementnamen ([TextItem1]), Literale, Operatoren + - * / % (+ verkettet Text), = <> < <= > >=, and/or/not. Variablen LABEL_INDEX, LABEL_NUMBER und eigene.

var label = new Label();
label.Expressions.Variables["SHIFT"] = "B";
label.Expressions.Functions["Euro"] = args => $"{ExpressionEngine.Num(args[0]):0.00} €";

label.Add(new TextItem { Expression = "Euro([Price] * 1.2) + \" / Schicht \" + SHIFT" });
label.Add(new TextItem { Y = 8, Expression = "Format(AddDays(Today(), 30), \"dd.MM.yyyy\")" });
label.Add(new TextItem { Y = 16, Expression = "Gs1CheckDigit(\"95060001343\")" });

var engine = new ExpressionEngine();
string s = engine.EvaluateToString("PadLeft(Str(42), 6, \"0\")");   // "000042"

Typen, eigene Funktionen und Variablen

Ausdrücke dürfen öffentliche Member registrierter Typen aufrufen (AddTypeReference) – alles andere bleibt gesperrt. SetCustomFunction/SetCustomVariable sind die verkettbaren Gegenstücke zu Functions[…]/Variables[…].

var label = new Label();
label.Expressions
    .AddTypeReference(typeof(Math))                 // Math.Max(1, [Qty]) …
    .AddTypeReference<DateTime>()                   // DateTime.Now.AddDays(3)
    .SetCustomVariable("WERK", "Graz")
    .SetCustomFunction("Kg", args => $"{ExpressionEngine.Num(args[0]):0.0} kg");

label.Add(new TextItem { Expression = "\"Werk \" + WERK + \": \" + Kg([Weight])" });
label.Add(new TextItem { Y = 8, Expression = "Math.Max(1, [Qty]) + \" Stk\"" });
label.Add(new TextItem { Y = 16, Expression = "DateTime.Now.AddDays(3).ToString(\"dd.MM.\")" });
// nicht registrierte Typen sind gesperrt → FormatException

Element-Referenzen & Mehrsprachigkeit

Ausdrücke und Tabellenzellen greifen mit [Items.Name] bzw. [Items.Name.Text] auf den Text anderer Elemente zu (auch vorwärts; Zirkelbezüge ergeben ""). Mehrsprachige Vorlagen: Label.Strings (per AddString), Label.Culture und Platzhalter {t:key}; Auflösung de-CH → de → "" → Schlüssel; pro Druckauftrag mit LabelBinding.WithCulture.

var label = new Label(LabelUnit.Dots, 400, 200)
    .Add(new TextItem { Name = "Total", Expression = "\"Summe: \" + [Items.Price.Text]" })
    .Add(new TextItem { Name = "Price", Y = 50, Expression = "Format(2 * 21, \"0.00\", \"de-DE\")" })
    .Add(new TableItem { Y = 100, ColumnWidths = [200], RowHeights = [30], Cells = [["[Items.Total]"]] });
var l = new Label(LabelUnit.Dots, 400, 200) { Culture = "de-CH" }
    .AddString("", "weight", "Weight")      // Fallback
    .AddString("de", "weight", "Gewicht")   // de-CH → de → "" → Schlüssel
    .AddString("fr", "weight", "Poids");
l.Add(new TextItem { Text = "{t:weight}: 5 kg" });
string de = l.ToZpl();                                                          // Gewicht: 5 kg
string fr = l.For<Dictionary<string, object?>>().WithCulture("fr-FR").ToZpl([new()]); // Poids: 5 kg

Kulturen & Formatierung

DataFieldFormat formatiert mit TextItem.CultureName (z. B. "de-DE"; ohne: invariant mit Format, aktuelle Kultur ohne Format). Jede kulturabhängige Formatierung von zplCore – gebundene Felder, Zahltexte, Tabellenzellen, Ausdrücke, Uhrzeitfelder – druckt auf jedem Betriebssystem gleich: Datumswerte verwenden den Standardkalender der Kultur aus einer festen Tabelle (ExpressionEngine.StandardCalendar: ar-SA Umm al-Qura, th thailändisch-buddhistisch, persisch für fa, ps, ckb-IR, lrc, mzn, uz-Arab; alle anderen gregorianisch), und Sonder-Leerzeichen wie das schmale geschützte Leerzeichen in den Tausendergruppen von fr-FR oder in 2:30 PM werden zu normalen Leerzeichen. Details: Kulturen in der Ausdrucks-Referenz.

zplCore.com – unabhängige Implementierung auf Basis der öffentlichen ZPL-II-Spezifikation. Barcode-Encoder teilweise abgeleitet von BWIPP/bwip-js (MIT) und zint (BSD-3); Roboto Condensed (OFL) und DejaVu-Schriften unter ihren eigenen Lizenzen – siehe THIRD-PARTY-NOTICES.md. ZPL und Zebra sind Marken von Zebra Technologies.

Zebra, ZPL, ZPL II, EPL und Link-OS sind Marken bzw. eingetragene Marken von Zebra Technologies Corp. QR Code ist eine eingetragene Marke der DENSO WAVE INCORPORATED. GS1, GS1 DataBar, GS1 Digital Link, EPC und EPCglobal sind Marken der GS1 AISBL. ESC/POS ist eine eingetragene Marke der Seiko Epson Corporation, Intelligent Mail eine eingetragene Marke des United States Postal Service und Mailmark eine eingetragene Marke der Royal Mail Group Ltd. Weitere genannte Produkt- und Firmennamen sowie Logos sind Marken bzw. eingetragene Marken ihrer jeweiligen Inhaber. Wir verwenden diese Namen nur, um Kompatibilität mit Dateiformaten, Druckersprachen und Standards zu beschreiben. zplCore.com ist ein unabhängiges Produkt und wird von diesen Unternehmen weder unterstützt noch gesponsert oder zertifiziert; Compliance-Pakete sind Vorprüfungen, keine Zertifizierungen.