===== 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 (p2f) beschafft werden. Eine Methode zur Informationsgewinnung ist die Anfrage von Web-Servern, auf die mit Schlüsselinformation, die im Druckdatenstrom gefunden wurde, zugegriffen wird. {{ print2forms:tips:0056-3.png?130}}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 ==== {{print2forms:tips:0056-1.png }}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: ''(sp)%%http://localhost/p2fTest.php?Line=3%%(sp)'' 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 (p2f)-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. \\ \\ \\ ==== Ablauf ==== Mit der Referenz auf dieses Formulars im ausgewählten Druckprozess werden zuerst die //Feldauswahl//en der einzelnen Felder ausgewertet. Wie in dem nachfolgenden Auszug aus der Ablaufverfolgung des (p2f)-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 6 2015…27 Access (2189) 6 2015…27 Access (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. \\ \\ {{print2forms:tips:0056-2.png?300 }}\\ \\ ==== 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 [[print2forms:tips:tip54|ODBC-Anfragefeld]] - mit einer einzigen Anfrage mehrere Antworten zu bekommen.