Beispiel: Generieren mehrerer PDF-Dateien anhand mehrerer XML-Dateien

www.altova.com Dieses Kapitel drucken Vorherige Seite Eine Ebene nach oben Nächste Seite

Startseite >  Beispiele zur Konfiguration von Aufträgen >

Beispiel: Generieren mehrerer PDF-Dateien anhand mehrerer XML-Dateien

In diesem Beispiel wird gezeigt, wie Sie einen FlowForce Server-Auftrag erstellen, der mehrere XML-Dateien als Input erhält und mehrere PDF-Dateien aus Output erzeugt. Mit dem FlowForce Server-Auftrag werden sowohl MapForce Server (zum Generieren der XML-Ausgabe anhand mehrerer XML-Quelldateien) als auch StyleVision Server (zum Konvertieren der XML-Ausgabe in PDF) aufgerufen.

 

Um dieses Beispiel durchführen zu können, sollten Sie das Funktionsprinzip von MapForce-Mappings und StyleVision-Transformationen kennen. Wenn StyleVision und MapForce komplett neu für Sie sind, empfehle wir, zuerst die ersten Kapitel der "Tutorials" der MapForce- und StyleVision-Dokumentation zu lesen:

 

Schnellstart-Tutorial (MapForce)
Schnellstart-Tutorial (StyleVision)

 

Voraussetzungen

Benötigte Lizenzen: MapForce Enterprise oder Professional Edition, StyleVision Enterprise oder Professional Edition, MapForce Server oder MapForce Server Advanced Edition, StyleVision Server, FlowForce Server
FlowForce Server wird an der konfigurierten Netzwerkadresse und am konfigurierten Port ausgeführt (siehe Definieren der Netzwerkeinstellungen)
Sie haben ein FlowForce Server-Benutzerkonto mit Berechtigungen für einen der Container (standardmäßig hat jeder authentifizierte Benutzer Zugriff auf den in diesem Beispiel verwendeten Container /public).
Mit dem in diesem Beispiel erstellten Mapping-Auftrag werden mehrere PDF-Dateien erstellt. Sie benötigen daher in dem Betriebssystem, in dem FlowForce Server ausgeführt wird, Rechte, um Dateien in einem Verzeichnis zu erstellen (in diesem Beispiel wird das Verzeichnis C:\FlowForceWorkingDir verwendet).

 

Verwendete Demo-Dateien

In diesem Beispiel werden die folgenden Beispieldateien aus dem folgenden Ordner verwendet: <Dokumente>\Altova\MapForce2019\MapForceExamples.

 

MultipleInputToMultipleOutputFiles.mfd (die MapForce-Mapping-Datei)
PersonListWithGrouping.sps (die StyleVision-Transformationsdatei)
Nanonull-Branch.xml, Nanonull-HQ.xml (die XML-Quelldateien)

 

Funktionsweise des MapForce-Mappings

Das Mapping besteht, wie unten gezeigt, aus einer Quellkomponente (Altova_Hierarchical), einer Zielkomponente (PersonList) und verschiedenen zwischengeschalteten vordefinierten MapForce-Funktionen, mit denen verschiedene Strings erzeugt werden, die in die Ausgabe geschrieben werden.

 

Als Input akzeptiert das Mapping jede beliebige XML-Datei aus dem Verzeichnis <Dokumente>\Altova\MapForce2019\MapForceExamples, die mit "Nanonull-" beginnt. Dies ist in den Einstellungen der MapForce-Quellkomponente definiert (Klicken Sie dazu in MapForce mit der rechten Maustaste auf die Überschrift der unten gezeigten Komponente Altova_Hierarchical und wählen Sie im Kontextmenü den Befehl Eigenschaften). Beachten Sie, dass als "Input-Datei" Nanonull-*.xml definiert wurde, wobei das Sternchen ein Platzhalterzeichen ist. Als Input-Datei wird dadurch jede Datei, die mit "Nanonull-" beginnt und die Erweiterung .xml hat, verwendet.

fs_multiple_xml_to_pdf_01

MultipleInputToMultipleOutputFiles.mfd

Die Zielkomponente PersonList generiert laut Konfiguration auf Basis des Dateinamens der XML-Quellkomponente Dateinamen dynamisch. Dies wird durch Rechtsklick auf die Schaltfläche Datei/String im oberen Bereich der Komponente und Auswahl der Menüoption Über das Mapping bereitgestellte dynamische Dateinamen verwenden definiert. Die Verbindung zum Node "Datei <dynamisch>" bedeutet, dass für jeden Wert in der Quellkomponente eine neue Datei erstellt wird. Die Funktion remove-folder dient dazu, nur den Dateinamen (ohne den Ordner) aus dem Quellpfad abzurufen. Dieser wird anschließend als Wert an die oberste concat-Funktion, die einen String wie Persons-<Quelldateiname> erstellt, übergeben.

 

Die zweite concat-Funktion erstellt einen String wie Generated by Altova... gefolgt vom vollständigen Pfad zur Mapping-Datei. Das Ergebnis wird als Kommentar in die XML-Zieldatei geschrieben.

 

Die dritte concat-Funktion erstellt mit Hilfe der count -Funktion einen String, der angibt, wie viele Personendatensätze aus der Quellkomponente gemappt wurden. Auch dieses Ergebnis wird als Kommentar in die XML-Zieldatei geschrieben.

 

Über die Verbindung zum Ziel-Node Person werden die Personendaten schließlich aus der Quell- in die Zielkomponente kopiert. Für jedes zu mappende Child-Element von Person gibt es eine eigene Verbindung.

 

Außerdem wurde die Zielkomponente so konfiguriert, dass sie die generierte Ausgabe für jede XML-generierte Datei in PDF konvertiert. Klicken Sie mit der rechten Maustaste auf die Überschrift der Zielkomponente, wählen Sie Eigenschaften und Sie sehen, dass im Textfeld StyleVision Power StyleSheet-Datei ein relativer Pfad zu einem StyleVision .sps Stylesheet definiert ist. Mit Hilfe dieser Datei erfolgt die eigentliche Konvertierung von XML in PDF (Beschreibung siehe unten).

 

Um direkt in MapForce eine Vorschau auf die Ausgabe dieses Mappings zu sehen, klicken Sie auf das Register Ausgabe unterhalb des Mapping-Bereichs. Um eine Vorschau auf das PDF-Ergebnis der StyleVision-Transformation zu sehen, klicken Sie auf das Register PDF. Sie werden sehen, dass im Fenster "Ausgabe" mehrere XML- (bzw. PDF)-Dateien generiert werden, z.B.:

fs_multiple_xml_to_pdf_02

 

Zu diesem Zeitpunkt sollten Sie eine der beiden XML-Ausgabedateien auf der Festplatte speichern (da MapForce standardmäßig temporäre Dateien generiert). Die Datei wird als Beispieldatei (XML-Arbeitsdatei) verwendet, wenn Sie das StyleVision Power Stylesheet in StyleVision öffnen und testen möchten (siehe nächster Abschnitt). Um eine Ausgabedatei zu speichern, klicken Sie zuerst auf das Register Ausgabe und anschließend im Menü Ausgabe auf Ausgabedatei speichern.

 

Funktionsweise der StyleVision-Transformation

Starten Sie StyleVision und öffnen Sie die Transformationsdatei PersonListWithGrouping.sps. Wie bereits erwähnt, befindet sich diese Datei im selben Verzeichnis wir das oben erläuterte MapForce-Mapping und wird von der MapForce-Zielkomponente referenziert.

fs_multiple_xml_to_pdf_03

PersonListWithGrouping.sps

Im oben gezeigten StyleVision .sps-Stylesheet wird anhand einer einzigen XML-Quelldatei ein PDF-Dokument erstellt. Das PDF-Dokument besteht aus einer Überschrift ("h2"), einem Einführungsabsatz, einer dynamisch befüllten Tabelle und einem Absatz am Ende. Die Überschrift und der Einführungsabsatz enthalten statischen Text, während die Tabelle und der Endabsatz aus den Nodes der XML-Quelldatei befüllt werden, wie Sie an den umschließenden Tags sehen.

 

So zeigen Sie direkt in StyleVision eine Vorschau auf diese Transformation an:

 

1.Klicken Sie im Fenster Design-Übersicht neben Arbeits-XML auf fs_stylevision_browse.

fs_multiple_xml_to_pdf_04

2.Wählen Sie den Befehl XML-Arbeitsdatei zuweisen und navigieren Sie zu der zuvor über MapForce gespeicherten XML-Ausgabedatei (siehe vorheriger Abschnitt).

 

Beachten Sie, dass der Name oder Ursprung der XML-Quelldatei für das .sps Stylesheet keine Rolle spielt; das Stylesheet verarbeitet lediglich die als Input bereitgestellte XML-Datei (sofern diese dem angegebenen XML-Schema entspricht) und erstellt anhand dieser Datei eine PDF-Datei. Um diesen Vorgang zu automatisieren, damit mehrere PDF-Dateien generiert werden, muss das Stylesheet, wie unten beschrieben, auf FlowForce Server bereitgestellt werden.

 

Bereitstellen der Dateien auf FlowForce Server

Bisher wurde die Funktionsweise und der Zweck des MapForce-Mappings und der StyleVision-Transformation, die in diesem Beispiel verwendet werden, erläutert. Nähere Informationen zum Erstellen von MapForce-Mappings und StyleVision Stylesheets finden Sie in der Dokumentation zu diesen Produkten (https://www.altova.com/de/documentation.html).

 

Damit der Vorgang automatisiert werden kann, müssen beide Dateien nun auf FlowForce Server bereitgestellt werden. Wie im Abschnitt "Voraussetzungen" oben angegeben, muss FlowForce Server lizenziert und gestartet sein und sowohl MapForce Server als auch StyleVision Server müssen lizenziert und unter FlowForce Server-Verwaltung ausgeführt werden. Unter Windows können Sie mit dem Befehl verifylicense den Lizenzstatus der einzelnen Server-Produkte überprüfen. Auf anderen Betriebssystemen schlägt die Auftragsausführung mit der entsprechenden Log-Meldung fehl, wenn die Lizenz nicht gefunden wird oder ungültig ist.

 

So stellen Sie das StyleVision Stylesheet auf FlowForce Server bereit:

 

1.Klicken Sie im Menü Datei auf In FlowForce bereitstellen.
2.Wenn die Meldung erscheint, dass die Design-Datei im PXF-Format (Portable XML Form) gespeichert wird, klicken Sie auf OK.

fs_multiple_xml_to_pdf_06

3.Wenn Sie aufgefordert werden, die Dateien, die in das bereitgestellte Paket inkludiert werden sollen, auszuwählen, behalten Sie die Standardeinstellungen unverändert bei. In diesem Beispiel wird zwar nur PDF generiert wird, doch sparen Sie später Zeit, wenn Sie sich entschließen, zusätzliche Formate wie HTML und RTF zu generieren.

fs_multiple_xml_to_pdf_07

4.Wenn Sie dazu aufgefordert werden, füllen Sie die Verbindungsinformationen für FlowForce Web Server aus. Aus Gründen der Einfachheit wird die Transformation in der Abbildung unten über einfaches HTTP auf dem lokalen Rechner auf Port 8082 bereitgestellt. Sie können auch einen entfernten Server definieren und die Dateien über eine SSL-verschlüsselte Verbindung bereitstellen, vorausgesetzt FlowForce Web Server wurde so konfiguriert, dass es solche Verbindungen zulässt (siehe Definieren der Netzwerkeinstellungen). Die Werte Benutzer und Passwort wurden in diesem Fall für das FlowForce root-Konto angegeben; es kann jedoch auch jedes andere FlowForce-Benutzerkonto verwendet werden, vorausgesetzt es hat die Berechtigung, Daten in den angegebenen Ordner zu schreiben. Das Kontrollkästchen Web Browser zur Erstellung eines neuen Auftrags öffnen wurde absichtlich deaktiviert, da das Erstellen und Konfigurieren des Auftrags weiter unten als separater Schritt beschrieben werden.

fs_multiple_xml_to_pdf_08

 

So stellen Sie das MapForce-Mapping auf FlowForce Server bereit:

 

Klicken Sie im Menü Datei auf Auf FlowForce Server bereitstellen. Füllen Sie die Verbindungsinformationen aus, wie oben für StyleVision beschrieben.

fs_multiple_xml_to_pdf_05

Nachdem die Dateien erfolgreich bereitgestellt wurden, scheinen die entsprechenden Einträge im angegebenen FlowForce Container (in diesem Fall in "/public") auf, wenn Sie sich auf FlowForce Server anmelden:

fs_multiple_xml_to_pdf_09

Beachten Sie, dass es sich bei den obigen Einträgen noch nicht um Aufträge handelt, sondern um FlowForce-Funktionen, anhand welcher die eigentlichen Aufträge erst, wie unten beschrieben, erstellt werden müssen.

 

Erstellen und Konfigurieren des FlowForce-Auftrags

Jetzt, da das MapForce-Mapping und die StyleVision-Transformation auf FlowForce Server bereitgestellt wurden, können anhand dieser Funktionen die erforderlichen Aufträge erstellt werden. Gehen Sie dazu folgendermaßen vor:

 

1.Navigieren Sie zum FlowForce Container /public und klicken Sie auf die zuvor bereitgestellte Funktion MultipleInputToMultipleOutputFiles.mapping. Beachten Sie, dass die Quellkomponente des ganz am Anfang dieses Beispiels beschriebenen MapForce-Mappings nun zu einem Input-Parameter der FlowForce-Funktion geworden ist. Er hat einen Standardwert, nämlich den Pfad zu den vom Mapping verarbeiteten XML-Instanzdateien. Dieser Wert kann später, falls erforderlich, außer Kraft gesetzt werden. Der Parameter "Working-directory" wurde von FlowForce automatisch hinzugefügt; seine Aufgabe wird in den nächsten Schritten erklärt.

fs_multiple_xml_to_pdf_10

2.Klicken Sie auf Auftrag erstellen.
3.Geben Sie einen Namen und optional eine Beschreibung für den Auftrag ein.
4.Konfigurieren Sie den Bereich "Ausführungsschritte" des Auftrags, wie unten gezeigt.

fs_multiple_xml_to_pdf_11

5.Aktivieren Sie unter "Dienst" das Kontrollkästchen "Diesen Auftrag über HTTP...zur Verfügung stellen..." und geben Sie den Namen des Webservice ein, der den Auftrag bei Bedarf starten soll. Wenn Sie den Auftrag lieber als geplanten Auftrag ausführen möchten oder als Datei-Trigger ausführen lassen möchten, definieren Sie die entsprechenden Trigger (siehe Verwalten von Triggern).

fs_multiple_xml_to_pdf_12

6.Geben Sie unter "Anmeldeinformationen" den Benutzernamen und das Passwort des Betriebssystem-Benutzerkontos ein (der Auftrag wird als dieser Benutzer ausgeführt). Dieses Passwort ist nicht mit dem der FlowForce Web-Verwaltungsschnittstelle zu verwechseln (siehe auch Funktionsweise von Anmeldeinformationen).

fs_multiple_xml_to_pdf_13

7.Klicken Sie auf Speichern.

 

 

Um die Funktionsweise des Auftrags zu verstehen, werfen wir einen genaueren Blick auf den Abschnitt "Ausführungsschritte" des Auftrags. Mit dem ersten Ausführungsschritt wird das zuvor bereitgestellte Mapping aufgerufen. Mit dem zweiten Parameter wird das Arbeitsverzeichnis definiert. Ein Arbeitsverzeichnis (oder Working-directory) ist ein Parameter, der von Ausführungsschritten benötigt wird, wenn für den Auftrag ein Ordner benötigt wird, in dem Input-Dateien entpackt oder Output-Dateien gespeichert werden. Anhand des Arbeitsverzeichnisses werden in FlowForce Server auch alle relativen Pfade, die während der Ausführung von Schritten vorkommen, aufgelöst. Wenn Sie nach einem Arbeitsverzeichnis gefragt werden, sollten Sie einen gültigen Pfad auf dem Betriebssystem, auf dem FlowForce ausgeführt wird, angeben. Falls bei Erstellung des Schritts kein Arbeitsverzeichnis angegeben wird, verwendet FlowForce Server ein temporäres Verzeichnis. In diesem Beispiel ist das Arbeitsverzeichnis "C:\FlowForceWorkingDir".

 

Die durch den ersten Ausführungsschritt zurückgegebene Ausgabe stellt die vom Mapping zurückgegebenen Daten dar. Sie wurde explizit output genannt, um sie in einem nachfolgenden Schritt referenzieren zu können.

 

Der zweite Schritt des Auftrags ist ein "for-each"-Schritt. Beachten Sie, wie im "for-each"-Schritt die vom ersten Schritt zurückgegebenen Daten (d.h. die vom Mapping zurückgegebene Ausgabe) mit Hilfe des FlowForce-Ausdrucks results(output) aufgerufen werden. Dabei ruft der Ausdruck die Funktion results() auf, die als Argument die vom vorherigen Schritt zurückgegebene Ausgabe erhält, siehe auch Schrittergebnisfunktionen. Eine Einführung in FlowForce-Ausdrücke finden Sie unter Arbeiten mit FlowForce-Ausdrücken.

 

Der "for-each"-Schritt besteht aus zwei kleineren Ausführungsschritten:

 

1.Im ersten Schritt wird die vordefinierte Funktion /system/compute aufgerufen, um die Mapping-Ausgabe in eine tatsächliche (generisch file genannte) Datei zu konvertieren. Beachten Sie, dass das Ergebnis des Ausdrucks results(output) einen Stream und keine Datei darstellt. Wenn mit dem Mapping (wie in diesem Fall) mehrere Ausgaben erzeugt werden, stellt die Mapping-Ausgabe eine Sequenz von Streams dar. Aus diesem Grund wird der aktuelle Stream (der iterierte Stream) mit Hilfe einer FlowForce-Ausdrucksfunktion (as-file) in eine Datei konvertiert.
2.Im zweiten Schritt wird für jeden iterierten Stream die zuvor bereitgestellte StyleVision-Transformation aufgerufen. Bei jeder Iteration wird StyleVision Server aufgerufen, eine XML-Datei als Input bereitgestellt und eine PDF-Datei als Ausgabe zurückgegeben. Der FlowForce-Ausdruck {filename(file)}.pdf erstellt den eigentlichen PDF-Dateinamen auf der Festplatte. Diese Operation erfolgt in dem durch den Parameter "Working-directory" definierten Arbeitsverzeichnis.

 

Anmerkung:In diesem Beispiel wird im Schritt, in dem das Mapping ausgeführt wird, und im Schritt, in dem die StyleVision-Transformation ausgeführt wird, dasselbe Arbeitsverzeichnis verwendet. In einigen Fällen müssen eventuell separate Arbeitsverzeichnisse definiert werden, damit es zu keinen Dateinamenskonflikten und Auftragsausführungsfehlern kommt.

 

Ausführung des Auftrags

Dieser Auftrag wurde als Webservice erstellt, daher können Sie ihn bei Bedarf durch Klicken auf einen Link im Browser ausführen. Geben Sie dazu in die Browser-Adressleiste die folgende URL ein: http://localhost:4646/service/. Passen Sie die URL entsprechend an, wenn Sie einen anderen Host und Port für FlowForce Server konfiguriert haben (siehe Definieren der Netzwerkeinstellungen).

fs_multiple_xml_to_pdf_14

 

Klicken Sie auf den Webservice-Link, um den Auftrag (in diesem Fall, "GenerateMultiplePDFs") auszuführen. Nach Fertigstellung des Auftrags stehen die dabei generierten PDF-Dateien im Arbeitsverzeichnis C:\FlowForceWorkingDir zur Verfügung. Beachten Sie, dass in diesem Auftrag aus Gründen der Einfachheit keine Fehlerbehandlung verwendet wurde. Im Browser wird auch bei erfolgreicher Ausführung die Meldung "Cannot output the job" angezeigt (dies wird erwartet, da mit dem Auftrag PDF-Dateien erzeugt werden, die nicht im Browser angezeigt werden können). Sollte der Auftrag aus irgendeinem Grund nicht ausgeführt werden können, wird im Browser die Meldung "Service execution failed" angezeigt. Überprüfen Sie in diesem Fall das Fehlerprotokoll des Auftrags, um zu sehen, welcher Schritt fehlgeschlagen ist und warum er fehlgeschlagen ist: Siehe Anzeige des Auftrags-Logs.


© 2019 Altova GmbH