Dieses Beispiel beschäftigt sich wieder mit Anlagen. Allerdings soll nicht ein konstantes Dokument hinzugefügt werden, sondern die Anzahl der Anlagen sowie deren Inhalt richtet sich nach den empfangenen Nutzdaten.
Zu einem Lieferschein mit einer variablen Anzahl von Artikeln sollen Anhänge gedruckt werden. Für jeden der aufgeführten Artikel soll ein Packschein mit der Artikelbezeichnung, der Liefermenge und einem Bild des Artikels gedruckt werden.
Wählen Sie in der Beispielapplikation unter Beispiel jetzt Lieferschein mit Anlagen aus. Wenn Sie auf die Schaltfläche Drucken klicken, wird der Ausdruck gestartet. Eine kurze Meldung bestätigt dies und auf Ihrem Drucker sollten zwölf Seiten gedruckt werden.
Der dem Beispiel zugrundeliegende Lieferschein hat als Besonderheit nicht nur eine variable Anzahl von Artikeln, sondern auch noch eine an die Informationsmenge der Artikel angepasste horizontale Teilung. Das ist aber für die hier vorgestellte Lösung ohne Belang.
Zum besseren Verständnis der nachfolgenden Ausführungen ist der zweite Lieferschein hier noch einmal vergrößert abgebildet:
Zur Realisation der Anforderung wird zunächst in dem Dokumentenprozess Lieferschein mit Anlagen nach den Grenzen der hier aus Gründen der Übersichlichket nur einseitigen Lieferscheine gesucht. Dies geschieht durch einfache Prüfung eines Feldwechsels mit dem Index 0002C1000, da an dieser Textstelle nur die Lieferscheinnummer steht. Die ersten beiden Ziffern des Index sind hier 00, weil die Prüfung des Feldwechsels bei eventuell mehrseitigen Lieferscheinen auf jeder Seite durchgeführt werden muß. In unserem Fall (einseitige Lieferscheine) könnte hier aber ausnahmsweise auch 01 stehen.
Der eigentliche Druck des Lieferscheins wird durch Übergabe der Lieferscheindaten an den aus einem der vorherigen Beispiele bekannten Prozess Lieferschein einzelne Seite mit variabler Tabelle veranlaßt. Dies soll hier also nicht weiter interessieren.
Die Aufgabe des Druckens der Anhänge wird mit dem zweiten Bearbeitungsschritt Artikelbild erledigt. Hier werden zunächst zwei Bedingungen ausgewertet, um die Artikelbezeichnung, die Liefermenge und die Lieferscheinnummer zu ermitteln. In der ersten Bedingung mit dem Namen Artikelbezeichnung werden mit dem Vergleichswert ' .# ([A-Z0-9]{1,8}[^ ]).*St *(#*).*' zwei Zeichenketten aufgesammelt: die Artikelbezeichnung und die Liefermenge. Die Artikelbezeichnung besteht aus bis zu acht Ziffern oder Großbuchstaben und endet mit der ersten Leerstelle. Die Liefermenge ist die erste Zahlenfolge hinter den Buchstaben 'St'.
Zum besseren Verständnis der Arbeitsweise dieses und der nachfolgenden Vergleichsmuster ist hier die Indexdatei des Beispieldatenstroms abgebildet:
[p2f] [Param]1.0;10.1.17.7;07.11.07 15:34:36 [Computer]thinkcentre.spe-gmbh.de [User]Volker [Model]P2F LaserJet 5 [Job]Sample 9 [JobNo] [File]9 [FileNo] [Hold] [Save] [UserData] [DefData] [Process]6ML_JK@.XML [0102C10000] 00123/25 [0103390000] 1704 [0103750000] Kunde GmbH [0103B10000] Z.Hd. Fr. V. Kunde 347-57897 [0104290000] Kundengasse 7 15587 [0104650000] D-48535 Kundendorf [0104A10000] Fr. M. Muster [0105190000] 09.03.2007 [0106090000] [0106450000] [0106810000] 1 SK20F1 Scart-Flachkabel St 160 0 160 [0106BD0000] Stecker auf Stecker, 21 polig belegt, 1 m [0107530000] 2 SK20HQT Scart Kabel, high quality St 230 0 230 [01078F0000] 1 x Scartstecker auf 1 x Scartstecker (21 pin), [0107BC0000] transparentes Kabel mit vergoldeten Kontakten, [0107E90000] 4 x 0.14 mm² abgeschirmt (Audio), 6 x 75 Ohm [0108160000] RG59 (Video), Länge 2 m [0108AC0000] 3 AVS1020 Video-Kabel Scart auf Cinch St 160 0 160 [0108E80000] 1 x Scartstecker auf 3 x Cinchstecker, 2 x [0109150000] 0.14 mm² abgeschirmt (Audio), 1 x 75 Ohm [0109420000] RG 59 (Video), Länge 1 m [0109D80000] 4 HC7502 AV-Kabel S-VHS/Cinch - Scart St 20 5 15 [010A140000] 4 pol. S-VHS-Stecker / 2 Cinchstecker nach [010A410000] Scartstecker, verchromte Metallstecker, vergol- [010A6E0000] dete Kontakte, High Quality, molded [Page]
Da der Feldindex für diese Bedingung mit 00????0000 wegen der vier Wildcard-Zeichen anstelle der vertikalen Position auf allen Seiten (wegen 00) alle Textstellen durchsucht, die an der horizontalen Position 0000 anfangen, wird die Bedingung für jeden Artikel des Lieferscheins erfüllt. Im obigen Beispiel der Indexdatei wird die Bedingung vier mal erfüllt, und in den Zeichenkettenpuffern stehen vier Artikelbezeichnungen ('SK20F1', 'SK20HQT', 'AVS1020', 'HC7502') und vier Liefermengen ('160', '230', '160', '20').
Die zweite Bedingung mit dem Namen Lieferscheinnummer ist vergleichsweise einfach, weil sie mit dem Vergleichsmuster '*(#####/##)' und dem fixen Feldindex 0002C10000 lediglich die aus fünf Ziffern, einem Schrägstrich und zwei weiteren Ziffern bestehende Lieferscheinnummer in einen Zeichenkettenpuffer übernimmt. Wegen des fixen Feldindex wird diese Bedingung nur einmal erfüllt.
Die eigentlichen Anhänge sind die zuvor im print2forms-System hinterlegten Artikelbilder. Die Anhänge liegen innerhalb des dafür vorgesehenen Containers in einem Subcontainer mit dem Namen Artikelbilder. Die Namen der Anhänge entsprechen hier genau den Artikelbezeichnungen. Die Artikelbilder wurden über ein Import-Gateway im Anhang-Container abgespeichert.
Im Bearbeitungsschritt Artikelbild wird über die Anhangschablone mit dem Wert \Artikelbezeichnung:1 der erste Zeichenkettenpuffer der Bedingung Artikelbezeichnung als Name des zu druckenden Anhangs ausgewählt (weil wir für die Artikelbilder als Namen die Artikelbezeichnung verwenden). Der Name des Subcontainers ist unter Zugriffspfad fest angegeben. Weil diese Bedingung im Beispielfall insgesamt vier mal erfüllt wurde, wird der Bearbeitungsschritt automatisch vier mal wiederholt und somit für jeden Artikel ein Anhang gedruckt.
Für die eigentliche Bearbeitung und das Aussehen eines Anhangs ist hier der Prozess Anlage zum Lieferschein (Artikelbilder) drucken veranwortlich, der unter Prozess im Bearbeitungsschritt Artikelbild eingetragen wird. Dieser Prozess macht nichts weiter, als jede Seite des Anhangs auf ein Blatt DIN-A4 im Hochformat zu drucken, und mit dem Formular Anlage mit Artikelbild aus dem Subcontainer Lieferschein zu versehen.
Das Formular Anlage mit Artikelbild schliesslich sorgt mit drei Textfeldern für die Ausgabe der Lieferscheinnummer, Artikelbezeichnung und Liefermenge und den Eindruck des Firmenlogos.
Das für diesen Anwendungsfall Entscheidende ist die Formulierung der Schablonen innerhalb der Textfelder. Durch die Benutzung des Fluchtsymbols '^' anstatt '\' beziehen sich die Referenzen nicht auf die Zeichenkettenpuffer, die das Formular selbst gefüllt hat, sondern auf die Zeichenkettenpuffer des übergeordneten Dokumentprozesses (der den Druckprozess aufgerufen hat, der seinerseits dieses Formular aufgerufen hat). Auf diese Weise kann auf die durch den Dokumentprozess aufgesammelte Lieferscheinnummer, Artikelbezeichnung und die Liefermenge zugegriffen werden. Die Referenzierung erfolgt über die Namen oder Nummern der Bedingungen.
Der Anhang sieht dann für den ersten Artikel wie folgt aus:
Bemerkenswert ist noch, daß in den zwei Schablonen die Zeichenkette '\x09' Verwendung findet. Der hexadezimale Code 09 bezeichnet für den Drucker ein Tabulatorzeichen. Dieses wird benutzt, um die Artikelbezeichnung und die Bestellmenge linksbündig auszurichten, was mit Leerstellen natürlich wegen der Verwendung einer Proportionalschrift (hier Arial) nicht möglich ist.
Im vorliegenden Beispiel erscheinen mit dem ersten Lieferschein insgesamt sechs Anlagen und mit dem zweiten Lieferschein erscheinen vier Anlagen.
Im print2forms-System gibt es einen Automatismus, der dafür sorgt, daß bei mehrfach erfüllten Bedingungen die zugehörigen Aktionen mehrfach ausgeführt werden. In diesem Beispiel wurde das dazu benutzt, eine von den Nutzdaten abhängige Anzahl von Anhängen zu drucken. Damit dieser Automatismus greift, müssen die eventuell mehrfach erfüllten Bedingungen am Anfang einer Bedingungsliste stehen. Dabei bestimmt die erste Bedingung in der Liste, wie oft die Aktion ausgeführt wird. Sind weitere Bedinungen vorhanden, die öfter erfüllt wurden, werden deren zusätzliche Zeichenkettenpuffer ignoriert. Wurden weitere Bedinungungen innerhalb der Liste weniger oft erfüllt (hier die Suche nach der Lieferscheinnummer), wird beim Zugriff auf die dann fehlenden Zeichenkettenpuffer immer der letzte Puffer verwendet.
Die hier vorgestellte Methode, Anhänge anzudrucken hat ihre Grenzen, wenn sich die Anzahl der Anhänge der 10.000 nähert oder sie gar übersteigt. In solchen Fällen macht es keinen Sinn, die Anhänge innerhalb des print2forms-Systems zu speichern. Die Anhänge werden dann in eigenen Datenbanken hinterlegt, auf die die Drucker dann über einen HTTP-Server zugreifen. Mit einer solchen Lösung sind dann auch die Ablageformate weitestgehend frei, weil erst beim Zugriff durch den HTTP-Server quasi gedruckt wird.