==== Platzhalter in Vordrucken =====
==== Anforderung ====
(p2f) bietet für die Nutzung von Etikettendruckern einen Mechanismus an, der die extern erzeugten Etikettendatenströme für diese Drucker als einen Vordruck mit Platzhaltern behandelt. Die Platzhalter werden während des Druckprozesses gegen die vorgefundenen Druckdaten ausgetauscht. Auf diese Weise entsteht ein Etikett in der jeweiligen Druckersprache des Etikettendruckers, ohne dass (p2f) irgendetwas über diese Druckersprache wissen muss.
Dieser Mechanismus ist die Grundlage dafür, dass praktisch jeder Etikettendrucker mit (p2f) nutzbar ist.
Im Zusammenhang mit der Erstellung von Etiketten zur Nutzung auf Etikettendruckern stellt sich aber manchmal das Problem, dass die Druckdaten die notwendigen Daten nicht, oder nicht in der richtigen Darstellung enthalten.
Für PCL-Drucker ist die Lösung dieser Anforderung in der Regel einfach, weil es möglich ist, über die Verwendung von Feldern im Formular die Daten zu beschaffen (ODBC-, %%HTTP%%- und Systemfelder) und/oder umzuformatieren. Dafür gibt es innerhalb der Platzhalter einer Ressource einen Verweis auf ein Feld des übergeordneten Formulars.
Das funktioniert, weil (p2f) %%PCL%%-Datenströme analysieren und das Seitenende erkennen kann. Es werden dann die Formular-Felder unmittelbar vor dem Seitenende generiert und eingefügt.
Etiketten sind zwar auch Seitendrucker, aber (p2f) kann den Eitkettendruckerdatenstrom nicht analysieren, weil es nicht für jeden der vielen Typen von Etikettendruckern ein eigenes Analyseprogramm mitführen kann. Somit ist das Etiketten(-)ende (meist ein besonderes Kommando) nicht erkennbar, und die Kommandos zum Einfügen von Texten oder Barcodes sind unbekannt.
\\
\\
==== Realisierung ====
Mit dem Build 5815 des (p2f)-Clients und Build 3086 des (p2f)-Gateways ((Standardmässig Bestandteil ab (p2f)-Installer Build 291. Aber auch lauffähig und nutzbar in Installationen der Installer Builds 280 und 289 bei im Oktober 2019 aktiver Subskriptionsvereinbarung.\\ \\ )) wird die Handhabung von Platzhaltern in Ressourcen erweitert. Es werden nunmehr unterschiedliche Konfigurationen von Platzhaltern unterschieden:
* Sind ein Feldindex, ein Auswahlmuster und keine Feldreferenz eingetragen, wird der Platzhalter gegen die durch diese beiden Attribute ausgewählte Zeichenkette der Druckdaten ersetzt. Das ist das bisher übliche Vorgehen und funktioniert sowohl mit %%PCL%%-Druckern als auch mit Etikettendruckern.
* Sind ein XML-Tag, ein Auswahlmuster und keine Feldreferenz eingetragen, wird der Platzhalter durch den Inhalt des %%XML%%-Tags aus den Druckdaten ersetzt. Das ist das bisher übliche Vorgehen und funktioniert sowohl mit %%PCL%%-Druckern als auch mit Etikettendruckern.
* Sind ein Feldindex, ein Auswahlmuster und eine Feldreferenz eingetragen, wird der Platzhalter einfach aus dem Vordruck entfernt. Gleichzeitig wird für das referenzierte Feld ein Eintrag für einen Treffer an der vom Platzhalter definierten Stelle mit dem durch das Auswahlmuster vorgegebenen Text erzeugt. Das funktio(-)niert nur mit %%PCL%%-Druckern.
* Sind ein %%XML%%-Tag, ein Auswahlmuster und eine Feldreferenz eingetragen, wird der Platzhalter einfach aus dem Vordruck entfernt. Gleichzeitig wird für das referenzierte Feld ein Eintrag für einen Treffer an der vom Platzhalter definierten Stelle mit dem durch das %%XML%%-Tag gekennzeichneten Text erzeugt. Das funktioniert nur mit %%PCL%%-Druckern.
Das sind die **bisher** unterstützten Konfigurationen. Zusätzlich gibt es jetzt **neu**:
* Sind weder Feldindex noch Auswahlmuster angegeben, wird die bisherige Feldreferenz als eine Schablone für Text interpretiert. Ganz ähnlich den Schablonen, die in den Feldern der Formulare genutzt werden können.\\ \\ Die einfachste Anwendung eines solchen Platzhalters ist der Druck eines konstanten Textes. Das volle Potential der Schablone besteht aber natürlich darin, dass innerhalb der Schablone auf Feldinhalte von übergeordneten Formularen oder Bedingungen des Dokumentenprozesses zugegriffen werden kann.\\ \\ Auch die Nutzung von via PJL übertragenen Metadaten (Benutzer, Host, etc) des Druckauftrags ist jetzt möglich, genauso wie der Zugriff auf Dokument- und Seitennummern.
\\
==== Anwendungsbeispiele ====
**Platzhalter in Ressource:**\\ \\
{{print2forms:tips:0079-3.png}}
Das ist der einfachste Fall, der sowohl auf %%PCL%%-Druckern als auch auf Etikettendruckern funktioniert. Die bis zu 30 Zeichen aus dem Druckdatenstrom werden gegen den Namen des Platzhalters //Strasse// ersetzt, nachdem sie zuvor in den Zeichensatz //Windows Latin 1// konvertiert wurden.
Diese Variante von Platzhaltern ist die, die in der Regel vom Import-Filter generiert wird.
\\
\\
-----
**Platzhalter in Ressource:**\\ \\
{{print2forms:tips:0079-2.png}}
**Feld im Formular:**\\ \\
{{print2forms:tips:0079-1.png}}
Dieses Beispiel fünktioniert nur mit %%PCL%%-Druckern. Die Feldreferenz im Platzhalter führt dazu, dass die bis zu 13 durch den Platzhalter gefundenen Zeichen als Treffer für das Feld //Leitcode// im Formular erzeugt werden. Der Name des Platzhalters //Leitcode// wird aus dem Vordruck entfernt.
Nachdem (!) der Vordruck ausgegeben wurde, wird die Feldliste des Formulars abgearbeitet. Dabei wird ein Barcode vom Typ //Deutsche Post Leitcode// erzeugt, dessen Inhalt und Position dem vom Platzhalter //Leitcode// der Ressource gefundenen Text entspricht. ((Dass der Platzhalter und das Feld den gleichen Namen haben, dient lediglich zur Verdeutlichung der Zusam(-)mengehörigkeit. Das ist aber keine Bedingung - es dürfen unterschiedliche Namen verwendet werden, so wie im letzten Beispiel.\\ \\ ))
Nur über diesen Mechanismus können Barcodes und variable Bilder in einen Vordruck eingedruckt werden. Diese Variante von Platzhalter wird vom Import-Filter generiert, wenn beim Import auch das Eingabefeld //Feldreferenz// ausgefüllt wird.
\\
\\
----
**Platzhalter in Ressource:**\\ \\
{{print2forms:tips:0079-4.png}}
**Feld im Formular:**\\ \\
{{print2forms:tips:0079-5.png}}
Dieses Beispiel funktionert mit %%PCL%%-Druckern und mit Etikettendruckern.
Der Platzhalter mit dem Namen //RFID// wird nicht gegen Druckdaten ersetzt. Stattdessen sorgt die Schablone //~VDA:1// dafür, dass der Text aus dem ersten Teil des Systemfeldes //VDA// des übergeordneten Formulars entnommen wird. Auch hier wird der Text vor der Ausgabe in den Zeichensatz //Windows Latin 1// konvertiert.
Das Systemfeld besorgt die für seine Ausführung notwendigen Druckdaten über seine eigene //Feldauswahl//. Die entsprechenden Felder des Platzhalters bleiben dagegen leer.
Auf diese Weise können Resultate aus ODBC-, %%HTTP%%- und Systemfeldern direkt in einen Vordruck übernommen werden. Damit sind jetzt auch für Etikettendrucker externe Daten beschaffbar und komplizierte Berechnungen oder Konvertierungen durch externe Programme sind einsetzbar.
Diese Variante von Platzhalter kann aktuell nicht vom Import-Filter generiert werden. Sie muss nach dem Import-Vorgang im Administrationsprogramm von (p2f) manuell konfiguriert werden.
\\
\\
==== Hinweise ====
* Prinzipiell ist es möglich, mit den Platzhaltern auch Steuerzeichen und Druckerkommandos in den Vordruck einzuschleusen. Da die Wirkung solcher Kommandos letztlich vom Umfeld des Vordrucks um den Platzhalter abhängig ist, ist das nur in den seltensten Fällen ohne Seiteneffekte möglich. Es wird ausdrücklich darauf hingewiesen, dass dies die Unabhängigkeit der Ressource vom Typ des Datenstroms korrumpiert, und auch die Wartbarkeit und Zukunftssicherheit einer Installation verschlechtert. ((Die SPE Sys(-)temhaus GmbH leistet für solche Fälle unabhängig vom Alter der Installation keinen Support! Es gelten die diesbezüglichen Ausführungen über die [[print2forms:supportdauer|Supportdauer]].))
* Eine Feldreferenz im Platzhalter kann nur auf 'druckende' Felder (Text-, Barcode- oder Ressourcefelder) erfolgen. Der Grund dafür ist, dass diese Felder erst nach (!) der Bearbeitung der Formular-Ressource (dem Vordruck) abgearbeitet werden. Deshalb funktionieren Feldreferenzen letztlich auch nur mit %%PCL%%-Druckern.
* Die 'nicht druckenden' Felder (ODBC-, %%HTTP%%- und Systemfelder) können prinzipiell keine Texte aus einem Platzhalter eines Vordrucks übernehmen. Das liegt daran, dass diese Felder bereits vor (!) der Bearbeitung der Formular-Ressource (dem Vordruck) ausgewertet und abgearbeitet werden.\\ \\ Soll beispielsweise in einem %%ODBC%%-Feld ein Text aus den Druckdaten genutzt werden, muss das Feld selbst in seiner Feldauswahl danach suchen. Siehe auch das dritte Beispiel oben für ein System-Anfragefeld.
\\
\\