HTTP-Anfragefeld

Anforderung

Sind bei der Aufbereitung von Druckausgaben Informationen notwendig, die nicht im Druckdatenstrom selbst zu finden sind, können diese Informationen eventuell aus externen Quellen von print2forms beschafft werden. Eine Methode zur Informationsgewinnung ist die Anfrage von Web-Servern, auf die mit Schlüsselinformation, die im Druckdatenstrom gefunden wurde, zugegriffen wird.

Für diesen Zweck gibt es seit geraumer Zeit in den Formularen das HTTP-Anfragefeld. Die Idee dahinter ist, an einen Web-Server eine Anfrage zu stellen, die dieser dann mit den gewünschten Informationen beantwortet. So etwas bietet sich beispielsweise immer dann an, wenn die Druckdaten aus einer Web-Applikation stammen und die gesuchten Daten sowieso auf dem Web-Server stehen, oder wenn ein DMS über eine Web-Schnittstelle verfügt und so abgefragt werden kann.

Als Beispiel für den Einsatz eines HTTP-Anfragefelds wird eine - zugegeben nicht wirklich realitätsnahe - Anwendung betrachtet, die aber alle wesentlichen Einsatzmöglichkeiten des HTTP-Anfragefeldes zeigt.

Auf einen Druckdokument (siehe Abbildung rechts) befinden sich fünf Zeilen, deren Inhalt als Parameter an den Web-Server übergeben werden sollen. Die Antwort des Web-Servers soll dann anstelle der fünf Zeilen ausgegeben werden.

Realisierung

Die hier realisierte Anwendung des HTTP-Anfragefelds besteht darin, jede der fünf Zeilen zu erkennen, die Zeilennummer als Parameter für die Anfrage zu extrahieren und dann die Anfrage mit dem Parameter an den Web-Server zu übermitteln. Die fünf Antworten des Web-Servers werden dabei in einer Trefferliste aufgesammelt.

Diese Trefferliste wird im zweiten Schritt durch ein Textfeld abgearbeitet, das ebenfalls die fünf Zeilen erkennt, und dann die entsprechende Antwort aus dem HTTP-Anfragefeld anstatt des bisherigen Inhalts der Zeile ausgibt.

Formular

Im Formular wird zunächst mit dem HTTP-Anfragefeld WebServer die gewünschte Information beschafft. Von seiner Feldauswahl her ist das Feld so definiert, dass es mehrfach gefunden werden kann. In diesem Beispiel wird es fünfmal getriggert, weil unter Feldindex / Bedingung ein entsprechend grosser Suchbereich angegeben ist und in den Druckdaten dann auch Zeile 1 bis Zeile 5 gefunden werden. Die Nummer der jeweiligen Zeile wird dabei mit dem regulären Ausdruck aufgenommen und in einem Puffer unter dem Namen des Feldes zur Verfügung gestellt.

In der Schablone für die Zusammenstellung der URL zur Abfrage des Web-Servers werden die gefundenen Zeilennummern mittels der Referenz \WebServer:1 als Parameter eingebaut. Im Beispiel hier wird ein lokaler Web-Server angesprochen, auf dem ein PHP-Skript mit dem Namen p2fTest.php abgelegt ist, das einen Parameter mit dem Namen Line akzeptiert. Eine so erzeugte URL lautet beispielsweise für Zeile 3 vollständig:

 http://localhost/p2fTest.php?Line=3 

Vom Skript wird angenommen, dass es für jede Anfrage zwei Ergebnisse liefert.

Das Textfeld Ausgabe schliesslich ist so definiert, dass es an exakt denselben fünf Zeilen getriggert wird, sodass eine 1:1 Entsprechung zum HTTP-Anfragefeld entsteht.

Es werden somit insgesamt fünf Texte ausgegeben, die durch die Schablone des Feldes vorgegeben sind. Im ersten Teil der Schablone wird das erste Ergebnis der HTTP-Anfrage eingesetzt, gefolgt von einem konstanten Text, gefolgt vom zweiten Ergebnis der HTTP-Anfrage.

Skript

Um das Beispiel einfach und überschaubar zu halten, ist das eingesetzte PHP-Skript trivial. Der übergebene Parameter mit dem Namen Line wird geprüft und ausgelesen. Als Rückgabewert des Skriptes dient eine Zeichenkette, die über das Kommando echo einfach ausgegeben wird.

Um vom print2forms-System richtig interpretiert werden zu können, darf die Zeichenkette bis zu zehn Teilketten enthalten, die durch einen Carriage Return (Hexadezimal 0x0D) voneinander getrennt werden. Diese Teilketten können dann durch :1 bis :0 in Schablonen referenziert werden. Hier werden zwei Teilketten erzeugt: der Text Aufruf mit Parameter: 4 und ein Text, der die Hälfte des übergebenen Parameters repräsentiert.

<?php
  $Liste = get_defined_vars();
 
  if (isset($Liste["_GET"]["Line"])) 
    echo "Aufruf mit Parameter: " . $Liste ["_GET"] ["Line"] . "\r" .  // Erstes Ergebnis
         $Liste ["_GET"] ["Line"] / 2 . "\r";                          // Zweites Ergebnis
  else 
    echo "Falscher oder kein Parameter\r\r"
?>


Ablauf

Mit der Referenz auf dieses Formulars im ausgewählten Druckprozess werden zuerst die Feldauswahlen der einzelnen Felder ausgewertet. Wie in dem nachfolgenden Auszug aus der Ablaufverfolgung des print2forms-Clients gut zu erkennen, werden für das HTTP-Anfragefeld fünf Treffer registriert und die Zeilennummern in die Trefferliste übernommen. Für das Textfeld werden ebenfalls Treffer auf den gleichen fünf Zeilen registriert.

Sind die Druckdaten ausgewertet und der Druckprozess ist am Ende der Seite angekommen, wird das Formular gedruckt. Dazu wird als erstes das HTTP-Anfragefeld bearbeitet (einfach weil es als erstes gelistet ist) und es werden nacheinander fünf Anfragen an den Web-Server übertragen, die dieser mit den vom PHP-Skript gelieferten Antworten quittiert.

…
0 2015…27  Request <PRC/R4Y1DUH.XML>
6 2015…27  Access <PRC/R4Y1DUH.XML> (2189)
6 2015…27  Access <OVL/R4Y10_G.XML> (2502)
6 2015…27  Page 1 State 1
6 2015…27  Pattern 1 'WebServer': '0101D10000' ' +Zeile (#+)'
6 2015…27  Pattern 2 'Ausgabe': '0101D10000' ' +Zeile #+'
6 2015…27  Match 1 'WebServer' 01D10000: \1='1' 
6 2015…27  Match 2 'Ausgabe' 01D10000: 
6 2015…27  Match 1 'WebServer' 02490000: \1='2' 
6 2015…27  Match 2 'Ausgabe' 02490000: 
6 2015…27  Match 1 'WebServer' 02C10000: \1='3' 
6 2015…27  Match 2 'Ausgabe' 02C10000: 
6 2015…27  Match 1 'WebServer' 03390000: \1='4' 
6 2015…27  Match 2 'Ausgabe' 03390000: 
6 2015…27  Match 1 'WebServer' 03B10000: \1='5' 
6 2015…27  Match 2 'Ausgabe' 03B10000: 
6 2015…27  HTTP Request 'WebServer': 'http://localhost/p2fTest.php?Line=1' (36)
6 2015…27  HTTP Response header 'WebServer': 'HTTP/1.1 200 OK  Date: Fri, 12 Jun 2015 09:28:14 GMT  Server: Apache/2.4.3 …
6 2015…27  HTTP Response data 'WebServer': 'Aufruf mit Parameter: 1|0.5||||||||' (28)
6 2015…27  HTTP Request 'WebServer': 'http://localhost/p2fTest.php?Line=2' (36)
6 2015…27  HTTP Response header 'WebServer': 'HTTP/1.1 200 OK  Date: Fri, 12 Jun 2015 09:28:14 GMT  Server: Apache/2.4.3 …
6 2015…27  HTTP Response data 'WebServer': 'Aufruf mit Parameter: 2|1||||||||' (26)
6 2015…27  HTTP Request 'WebServer': 'http://localhost/p2fTest.php?Line=3' (36)
6 2015…27  HTTP Response header 'WebServer': 'HTTP/1.1 200 OK  Date: Fri, 12 Jun 2015 09:28:14 GMT  Server: Apache/2.4.3 …
6 2015…27  HTTP Response data 'WebServer': 'Aufruf mit Parameter: 3|1.5||||||||' (28)
6 2015…27  HTTP Request 'WebServer': 'http://localhost/p2fTest.php?Line=4' (36)
6 2015…27  HTTP Response header 'WebServer': 'HTTP/1.1 200 OK  Date: Fri, 12 Jun 2015 09:28:14 GMT  Server: Apache/2.4.3 …
6 2015…27  HTTP Response data 'WebServer': 'Aufruf mit Parameter: 4|2||||||||' (26)
6 2015…27  HTTP Request 'WebServer': 'http://localhost/p2fTest.php?Line=5' (36)
6 2015…27  HTTP Response header 'WebServer': 'HTTP/1.1 200 OK  Date: Fri, 12 Jun 2015 09:28:14 GMT  Server: Apache/2.4.3 …
6 2015…27  HTTP Response data 'WebServer': 'Aufruf mit Parameter: 5|2.5||||||||' (28)
6 2015…27  Page 2 State 1
…


Als letztes wird das Textfeld insgesamt fünfmal abgearbeitet. Dabei werden die in der Schablone die beiden Ergebnisse der jeweiligen HTTP-Anfrage ausgegeben. Es erscheint die links unten abgebildete Druckausgabe.



Hinweise

  • Das HTTP-Anfragefeld liefert immer nur genau eine Antwort. Diese kann bis zu zehn Teilzeichenketten enthalten. Es gibt aber keine Möglichkeit - ähnlich wie beim ODBC-Anfragefeld - mit einer einzigen Anfrage mehrere Antworten zu bekommen.