PDA

View Full Version : XML, ILE-COBOL und nix Ahnung



Seiten : [1] 2

geoedv
05-07-05, 16:29
Hallo,

ich hab schon versucht das Forum zu durchsuchen, hab aber nichts gefunden, was mein Problem löst und ich auch noch verstehe.

Problembeschreibung:
Wir haben eine AS/400 mit V5R1, demnächst soll auf V5R3 upgedated werden.
Für ein Projekt sollen mehrere Schnittstelle zu einem externen Programm geschaffen werden. Die Softwarefirma schlägt vor, dafür XML Daten zu verwenden und diese über TCP/IP Sockets zu tauschen.

Ich hab Daten in DB Tabellen, die in die neue Software sollen und die neue Software schickt mir Daten zurück die ich entsprechend einarbeiten soll.

Unternehmensweit programmieren wir mit ILE Cobol, also soll dies auch hier zum Einsatz kommen. Wer kann mir weiter helfen, wie dies gelöst wird? Gibt es vielleicht irgendwo Beispiele, wie so etwas gemacht wird? Offensichtlich geht das ja, nur hab ich eben nicht verstanden wie.

Vielen Dank für Eure Aufmerksamkeit dies zu lesen!

RobertMack
05-07-05, 17:09
Hallo,

da ist erst mal Einlesen angesagt ;-)

http://www.rlpforen.de/search.php?searchid=73062

Viel Erfolg,
Robert

geoedv
05-07-05, 17:53
Hallo,

erst mal Danke für die schnelle Antwort, allerdings hab ich schon gesucht. Mein Problem ist auch nicht, dass ich nicht suchen will, sondern dass ich nichts finde, was den Einstieg ermöglicht. Es gibt haufenweise Lösungen, wo das XML nicht so aussieht, wie es soll, aber ich will erst mal das Prinzip verstehen.

ILE Cobol Programm schreiben ist nicht das Problem, auch nicht ILESQL Cobol. Der Startpunkt fehlt, den Rest pfrimeln wir dann schon hin. Aber wie kommt man an einen Socket, wie stellt man fest ob überhaupt was rausgeht, so die Richtung. Ein Source Code, vielleicht mit ein paar Kommentaren, würde (glaub ich zumindest) schon helfen. Oder geht das am Ende technisch gar nicht?

Grüsse

Fuerchau
06-07-05, 08:04
Natürlich geht das technisch, ist aber in COBOL sehr aufwändig, da sämtliche benötigte Funktionen ausschließlich in "C" (bzw. Java) verfügbar sind.

In Cobol kann man C-Funktionen mittels

call procedure 'CFunktionX' using [by value | by reference] myparm ....
returning myreturn

aufrufen.
C-Funktionen sind Case-Sensitive also muss in der Quelle am Anfang
process NOMONOCASE (oder so ähnlich)
angegeben werden, damit die aufgerufenen Funktionen nicht in Großbuchstaben übersetzt werden.

Ob "by Value" oder "by reference" entscheidet sich, ob ein Wert oder eine Adresse benötigt wird. Es kann auch gemischt verwendet werden.

Alles zum Thema Socket:
http://publib.boulder.ibm.com/infocenter/iseries/v5r3/ic2924/info/rzab6/rzab6soxoverview.htm

Zum Thema XML:
http://publib.boulder.ibm.com/infocenter/iseries/v5r3/ic2924/info/rzakl/rzakltools.htm

geoedv
07-07-05, 07:16
Hallo,

Danke für die Links.

Zwischenzeitlich hab ich einen relativ angenehmen Weg für das parsen von XML Meldungen gefunden. Wir haben noch eine Maschine mit V5R3, dort gibt es das neue Kommando XML PARSE, das funzt so weit ganz gut.

Ich kann mir auch vorstellen XML Meldungen "mit der Hand" zu programmieren. Allerdings hab ich noch das QXML4PR400 gefunden, ist das ein Werkzeug mit dem XML auch erzeugt werden kann? Und gibts das überhaupt noch in V5R3?

Was mir außerdem noch fehlt, ist der Weg vom Socket zu einer IFS Datei oder irgendein anderes Objekt an welches ich heran komme.

Ist dort vielleicht Cobol das falsche Werkzeug, kann man da auch mit CL rumfuchteln?

Für Mitleser: Die Process Option heisst PROCESS NOMONOPRC.

Grüsse Bernd

Fuerchau
07-07-05, 10:22
Für das IFS gibt es ganz normale C-Funktionen wie open(), read(), write() und close() mit ein paar Zusatzfunktionen für CCSID-Behandlung.
Für die Socket-Programmierung verwende den obigen Link, das hat mit IFS nichts zu tun.

COBOL ist nicht ganz so elegant wie ILERPG, da durch die ANSI-Norm die Syntax für Funktionen eben (s.o.) eingschrängt ist. In ILERPG sähe obiger "call procedure" so aus:

/free
ReturnWert = Funktion(Par1:Par2:.....);
/end-free

Wobei eben Funktionen auch in komplexeren Formeln verwendet werden können. By Value/Reference wird durch eine Prozedur-Deklaration (Prototype) bestimmt, die es in COBOL leider nicht gibt.

ILERPG ist in der Hinsicht der Integration von Funktionen/Prozeduren um ein vielfaches einfacher als COBOL.

CLP kannst du da vergessen !

Sockets zu verwenden ist nicht das eigentliche Problem, sondern die Kommunikationsvereinbarung zwischen Sender und Empfänger (Autorisierung, Formate, Fehlerbehandlung, Recovery usw.). Da ist es doch häufiger schon besser, die XML-Dateien im IFS zu erstellen und dann Standards wie FTP zu verwenden.

lois
07-07-05, 20:24
Hallo geoedv,

vielleicht habe ich irgend etwas nicht verstanden. Deshalb kurz meine Nachfrage,
du hast zwei AS/400 und du möchtest Daten von der einen auf die andere AS/400 schicken. Oder sind die externen Daten auf anderen Server? Besteht eine LAN Verbindung? Sollen dabei ganze Daten oder nur einzelne Sätze übergeben werden? Soll alles automatisch ablaufen, oder wird es immer wieder angestossen/abgeholt?

Ein Socket funktioniert etwas anderst, beide Seiten werden für eine
Socketverbindung mittels Routinen eingerichtet und dann werden die Daten auf diesem Weg übergeben. Ohne Datei, nur über Routinen. Ist nicht unbedingt sehr kompliziert aber ich würde dafür auf jedenfall C oder ähnliches bevorzugen. Die HLL-Sprachen sind dafür fast zu schwerfällig.



Gruss lois

geoedv
08-07-05, 08:14
Hallo,

ich hab mehrere AS/400 (Gott sei Dank auch schon eine mit V5R3 zum testen). Die Daten sollen aber von eine PC Applikation auf die AS/400 geschickt werden. Alle Maschinen hängen im selben LAN.

Aber: Ich soll/kann kein C verwenden, weil ich erstens davon nicht viel Ahnung habe und zweitens das keine im Unternehmen unterstütze Programmiersprache ist.


Bitte auch keine Tipps mit RPG posten, denn davon hab ich noch viel weniger Ahnung wie von C.

Bernd

B.Hauser
08-07-05, 09:10
Hallo Bernd,

hast Du Dir das folgende White Paper schon mal angeschaut?
Mapping data from XML documents to DB2 UDB for iSeries using ILE COBOL (http://www-1.ibm.com/servers/enable/site/education/ibo/record.html?xmlcobol)

Birgitta

lois
08-07-05, 09:22
Hallo Bernd,


wie wäre es, du ordnest dir den IFS der AS/400 dem PC zu und stellst dort deine Daten ab. Danach könntest du die Daten einfach rüberkopieren?
Oder du sendest mit FTP die Daten zur AS/400?
Falls der PC eine feste Adresse hat, könntest du auch mit dem AS/400 FTP die Daten abholen?
Gruss Lois