XML-Daten verarbeiten
Anforderung
Beim Einsatz von Standardsoftware (z.B. Microsoft Dynamics NAV) kommt immer wieder die Frage auf, ob print2forms nicht direkt XML-Dateien verarbeiten kann. Die Schwierigkeit dabei ist zum einen, daß XML-Dateien für gewöhnlich nicht gedruckt, sondern lediglich in irgendwelchen Verzeichnissen abgelegt werden.
Hinzu kommt, daß XML eine sehr dynamische Strukturierung der Daten erlaubt. Einzelne Tags können existieren oder auch nicht, Tags können leer sein, Tags können beliebig gruppiert werden und die Reihenfolge ist im Prinzip beliebig.
Realisierung
Daß die XML-Daten nur als Datei angeliefert werden, ist für print2forms kein Problem, weil mit dem Monitor-Gateway eine Komponente existiert, die genau für diese Anforderung eingesetzt werden kann. Ein Monitor-Gateway überwacht bis zu 250 Verzeichnisse, deren Namen mit denen von Clients oder Gateways übereinstimmen. Wird nun in eines der überwachten Verzeichnisse eine Datei kopiert, wird diese so bald als möglich an den zugehörigen Client oder an das zugehörige Gateway übertragen.
Der Zeitpunkt der Übertragung hängt davon ab, ob die kopierte Datei bereits vollständig ist (vom Erzeuger geschlossen) und ob der Client oder das Gateway verfügbar ist. Verfügbar heist hier, der Client oder das Gateway ist gestartet und mit keiner anderen Aufgabe beschäftigt.
Die Erkennung der einzelnen XML-Tags wurde in print2forms bisher durch entsprechend formulierte reguläre Ausdrücke realisiert, ist aber mit dem p2fClient Build 5788 und dem p2fGate Build 3065 radikal vereinfacht worden. Jetzt kann statt einem Feldindex einfach ein Tag-Name angegeben werden, auf dessen Inhalt sich die entsprechende Aktion von print2forms beziehen soll.
XML-Daten
Sollen XML-Dateien als Eingangsdatenstrom für print2forms genutzt werden, sind ein paar Randbedingungen einzuhalten, da ansonsten der print2forms-Client oder -Gateway die Daten nicht korrekt auswerten kann:
XML-Tags dürfen in
print2forms keine mehrzeilige Inhalte haben. Solche Tags können aktuell nicht von
print2forms ausgewertet werden.
print2forms erfordert eineindeutige Tag-Namen. Das bedeutet insbesondere, daß in Gruppen nicht wieder die gleichen Tag-Namen auftauchen dürfen, wie auf der übergeordneten Ebene. Es ist auch nicht zulässig, Tags die zur Gruppierung dienen, den gleichen Namen zu geben wie Tags mit Werten. Gleichnamige Tags in Wiederholungsgruppen sind allerdings zulässig.
Die Daten können mit entsprechenden Tags beliebig gruppiert werden. Diese Gruppierung ist aber für
print2forms ohne Bedeutung. Lediglich im Falle von Wiederholungsgruppen ist die Gruppierung relevant, wird aber nicht vom Client oder Gateway ausgewertet, sondern in einem vorgeschalteten Prozess des Monitor-Gateways berücksichtigt. (siehe
XML-Daten für Etiketten)
Das Encoding der
XML-Datei wird aktuell nicht ausgewertet. Dateien mit entsprechender
BOM werden als Unicode interpretiert, alle anderen als
ISO-8859-1.
Eine eventuell in der
XML-Datei enthaltene Referenz auf eine
DTD wird nicht ausgewertet.
Ein einfaches Beispiel für eine durch print2forms zu bearbeitende XML-Datei:
<?xml version="1.0" encoding="iso-8859-1"?>
<Address>
<CompanyName>Muster GmbH</CompanyName>
<CompanyAddress>Hauptstrasse 21</CompanyAddress>
<CompanyPostCode>23456</CompanyPostCode>
<CompanyCity>Musterstadt</CompanyCity>
<ReferenceNo>28.0941</ReferenceNo>
<OrderNo>AB160333</OrderNo>
</Address>
XML-Daten in einer Ressource
|
Bei den print2forms-Ressourcen können XML-Tags im Rahmen der Definition von Vorlagen zum Einsatz kommen. Vorlagen werden in der Regel mit dem Import-Filter erstellt, der zu diesem Zweck ebenfalls entsprechend erweitert wurde (siehe XML-Daten in Ressourcen).
Um einem Platzhalter innerhalb der Vorlage XML-Daten zuzuweisen, wird jetzt einfach der Name des Tags unter Feldindex / Tag angegeben.
Damit man noch die Möglichkeit hat, selbst zu entscheiden, ob man den gesamten Inhalt des Tags oder nur einen Teil davon verwenden möchte, kann unter Auswahlmuster noch ein regulärer Ausdruck angegeben werden, der auf den Inhalt des Tags angewendet wird. Dabei wird wie üblich nur der erste Puffer statt des Platzhalters in die Vorlage übernommen. Wird kein Auswahlmuster angegeben, wird automatisch (.*) angenommen.
|
Ganz analog erfolgt die Verwendung von XML-Daten innerhalb von Feldern eines Formulars. Der Name des Tags wird einfach unter Feldindex / Bedingung / Tag angegeben. Das Vergleichsmuster bestimmt, welcher Teil des Inhals des Tags Beachtung finden soll.
Im Gegensatz zum Einsatz von XML-Daten innerhalb von Vorlagen können innerhalb des regulären Ausdrucks allerdings alle zehn Puffer angesprochen und verwendet werden.
|
Bei der Nutzung von XML-Daten in Formularen gibt es noch einen weiteren Einsatzzweck, nämlich innerhalb der Bedingungen zum Einbinden von untergeordneten Formularen.
Auch hier wird der Name des Tags wird einfach unter Feldindex / Bedingung / Tag angegeben. Das Vergleichsmuster bestimmt, welcher Teil des Inhals des Tags Beachtung finden soll.
Ein Sonderfall ist der, daß nur getestet werden soll, ob ein bestimmtes Tag innerhalb der Nutzdaten überhaupt vorkommt. Für einen solchen Test wird unter Vergleichsmuster kein Wert eingegeben.
Mit der Einstellung unter Vergleich kann dann ausgewählt werden, ob das Tag vorkommen muß (Einstellung ist gleich) oder aber nicht vorkommen darf (Einstellung ist ungleich).
|
XML-Daten in einem Prozess
Innerhalb von Prozessen können XML-Tags innerhalb der Bearbeitungsschritte eines Dokumentenprozesses verwendet werden, um die Bedingungen für die Ausführung des Bearbeitungsschritts zu formulieren.
Unter Feldindex / Tag wird einfach der Name des zu prüfenden Tags eingegeben. Damit man noch die Möglichkeit hat, selbst zu entscheiden, ob man den gesamten Inhalt des Tags oder nur einen Teil davon verwenden möchte, kann unter Vergleichswert noch ein regulärer Ausdruck angegeben werden, der auf den Inhalt des Tags angewendet wird. Die dabei aufgesammelten Puffer können wie üblich unter dem Namen der Bedingung in Formularen ausgewertet werden.
Im Beispiel links ist nur die erste Bedingung wirklich eine Bedingung. Da unter Verknüpfung nichts angegeben ist, werden die Angaben unter CompanyAddress lediglich ausgewertet, um später auf die Puffer des regulären Ausdrucks zugreifen zu können.
|
|
Hinweise
Für den Import von Vorlagen gibt es weitere Informationen unter
XML-Daten in Ressourcen. Dort wird erklärt, wie
XML-Daten mit Platzhaltern innerhalb der Ressource verknüpft werden können.
Für die Bearbeitung von Wiederholungsgruppen innerhalb der
XML-Datei (z.B. für Listen oder für Etikettenbögen) gibt es weitere Informationen unter
XML-Daten in Etiketten. Dort wird erklärt, wie
XML-Daten im Vorfeld aufbereitet werden, um die Wiederholungsgruppen bearbeiten zu können.
Intern werden die
XML-Daten nicht mit den für deren Verarbeitung bereitgestellten Funktionen der Laufzeitumgebung bearbeitet und es wird auch kein
DOM erzeugt. Damit
print2forms auf sehr große
XML-Dateien bearbeiten kann, so wie sie etwa für Batch-Jobs typisch sind, wird die
XML-Datei zeilenweise interpretiert und textuell (mit regulären Ausdrücken) ausgewertet. Das hat auch den Vorteil, daß der Druck unmittelbar beginnen kann, selbst wenn noch nicht die ganze Datei analysiert ist.