PDA

View Full Version : Webservice über PHP aus einer COBOL Anwendung



Seiten : [1] 2 3 4 5 6

nico1964
03-04-12, 10:32
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

Fuerchau
03-04-12, 11:28
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.

nico1964
03-04-12, 11:33
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

nico1964
03-04-12, 12:51
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

Fuerchau
03-04-12, 12:52
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.

nico1964
03-04-12, 13:01
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

Fuerchau
03-04-12, 13:03
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.

Pikachu
03-04-12, 13:28
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?