View Full Version : Webservice über PHP aus einer COBOL Anwendung
Hallo,
vergangenen Freitag wurde folgende Aufgabenstellung an mich herangetragen:
Aus einer COBOL-Anwendung soll ein PHP mit n Parametern aufgerufen werden, das sich dann mit diesen Parametern mit einem WEB-Service verbindet und von diesem eine Antwort erhält, welche wieder in das COBOL-PGM muss.
Habe keine Erfahrung mit PHP und soll das asap lösen können. Für jeden Denkanstoss bzw. Links zu Literatur oder einfaches Beispiel wäre ich dankbar.
LG
Der Aufgabensteller gehört erschlagen ;).
PHP ist eine Scriptsprache, die auf einem Web-Server läuft.
Du müsstest also per Socket-API (und das ist schon nicht einfach) einen Web-Service aufrufen der das PHP-Script startet, das wiederum einen Web-Service aufruft und dir anschließend das Ergebnis zurückliefert.
Da wäre es gleich besser, per Socket den Web-Service direkt abzufragen.
Alternativ könnte ein vorgestartetes PHP-Script (und da weiß ich nicht, ob das überhaupt geht) auf deinem WEB-Server (auf der AS/400) auf einer DTAQ lauern, von deinem COBOL per QSNDDTAQ den Auftrag erhalten und über eine 2. DTAQ (per QRCVDTAQ) das Ergebnis zurückliefern.
Hierbei ist zu beachten, dass ggf. ja mehrere parallele Abfragen laufen könnten und somit ein Keyed-DTAQ mit z.B. JobNr. als Key zu verwenden wäre.
Ein Direktaufruf von PHP ohne eine Serverinstanz (z.B. Zend) wird wohl nicht möglich sein.
Hallo,
danke für die Antwort. Zend Server wurde bei uns auf Anordnung meiner Chefs bereits installiert und daher würde ich gerne einen Weg finden, wie ich das direkt über die AS400 handeln kann.
RobertMack
03-04-12, 12:41
Weitere Alternative: das Cobol-Programm ruft ein RPGLE-Programm auf welches den Web-Service-Request ausführt - nativ, ohne PHP, ohne Zend-Server...
HTTP API (http://www.scottklement.com/httpapi/httpapi_zip.html)
http://www.scottklement.com/presentations/Web%20Services%20from%20RPG%20with%20HTTPAPI.pdf
Weitere Alternative: das Cobol-Programm ruft ein RPGLE-Programm auf welches den Web-Service-Request ausführt - nativ, ohne PHP, ohne Zend-Server...
HTTP API (http://www.scottklement.com/httpapi/httpapi_zip.html)
http://www.scottklement.com/presentations/Web%20Services%20from%20RPG%20with%20HTTPAPI.pdf
Hallo,
das ist für mich leider der letzte Ausweg, da ich der Dinosaurierer auf der AS400 bei uns bin und meine Chefs aus der sogenannten neuen Welt stammen. Daher bevorzugen Sie bei uns die PHP Geschichte, auch wenn keiner von uns Erfahrung damit hat
Soweit ich das gesehen habe, gibt es keine Möglichkeit direkt auf den Zend-Server zuzugreifen.
Mann kann zwar mit den i5-Klassen (Zusatzlibrary) auf AS/400-Objekte zugreifen aber umgekehrt geht das nicht (ist ja auch eigentlich nicht die Absicht).
Die Dokumentation von Zend weist auf "AutoLoader" hin, mit dem man wohl PHP-Scripts direkt vorab laden kann.
In wie weit diese in eigenen Threads/Jobs laufen können ohne den Zendcore zu behindern weiß ich nicht, muss man wohl mal nachlesen.
Wenn dann das Batch-Script läuft, kannst du per i5-Funktion auf DTAQ's zugreifen und eine Kommunikation aufbauen.
Eine andere Chance sehe ich nicht.
andreaspr@aon.at
03-04-12, 12:56
Ein PHP-Script kannst du ganz einfach über die QSH aufrufen.
/usr/local/Zend/Core/bin/php -f /home/mein_script.php
Wenn du Parameter an das Script übergeben möchtest schaut das dann so aus:
/usr/local/Zend/Core/bin/php -f /home/mein_script.php "erster Wert" "das ist jetzt der zweite Wert"
In PHP sind dann diese Parameter in der globalen Variable (Array) $argv.
Einen "Returnvalue" gibt es jedoch nicht. Da musst du dann schaun, wie weiter arbeitest. Du könntest z.B. in PHP ein Cobol-Programm mit Parameter aufrufen, dass die Verarbeitung weiter führt.
Ein PHP-Script kannst du ganz einfach über die QSH aufrufen.
/usr/local/Zend/Core/bin/php -f /home/mein_script.php
Wenn du Parameter an das Script übergeben möchtest schaut das dann so aus:
/usr/local/Zend/Core/bin/php -f /home/mein_script.php "erster Wert" "das ist jetzt der zweite Wert"
In PHP sind dann diese Parameter in der globalen Variable (Array) $argv.
Einen "Returnvalue" gibt es jedoch nicht. Da musst du dann schaun, wie weiter arbeitest. Du könntest z.B. in PHP ein Cobol-Programm mit Parameter aufrufen, dass die Verarbeitung weiter führt.
Das ist dann mein größeres Problem, da ich das ganze aus einer Onlineanwendung aufrufen muss(Vertragsanlage) und ich brauche den Returnvalue für die weiter Vorgehensweise im Online-PGM für Abbruch oder weitermachen
Wenn das dann so einfach ist, geht auch die Rückgabe per STDOUT.
Per PHP gibt es sicherlich die Möglichkeit, auf STDOUT was auszugeben (Echo o.ä.).
STDOUT kann per OVRDBF in eine PF umgeleitet werden, diese kann man dann natürlich einlsen.
Das ist dann mein größeres Problem, da ich das ganze aus einer Onlineanwendung aufrufen muss(Vertragsanlage) und ich brauche den Returnvalue für die weiter Vorgehensweise im Online-PGM für Abbruch oder weitermachen
Das geht ja um viele Ecken. Wie sollen denn die genauen Aufrufwege sein?