Anmelden

View Full Version : qrcvdtaq



K_Tippi
21-03-11, 16:11
Hi, ich habe mich noch fast gar nicht mit dtaq's bwschäftigt und suche eine Lösung für ein Problem.

Innerhalb eines RPG Programms (keine Quelle vorhanden) wird eine dtaq gelesen. In dieser stehen Informationen wenn von einem exteren Server Daten übergeben wurden.
Mein Problem ist nun, dass ich die Infos Brauche bevor das RPG Programm weiter läuft.
Ich müsste die dtaq also auslesen, meine Verarbeitung machen und wieder schreiben. soweit so gut. Nur wie garantiere ich dass ich die dtaq vor dem RPG auslese? :-(
Ich hatte daran gedacht mir ein CL Programm QRCVDTAQ zu schreiben und in die LIBL vor QSYS zu bringen. Nur wie mache ich das mit den variablen Parameterlängen.
Stehe etwas auf dem Schlauch.

Danke im voraus.


Klaus

Fuerchau
21-03-11, 17:09
Eine DTAQ vor einem anderen Programm auszulesen ist leider nicht möglich.
Ein QRCVDTAQ arbeitet nach FIFO, d.h., das 1. Programm bekommt den 1. Satz, das 2. Programm bekommt den 2. Satz usw.

Du kannst da ggf. nur über eine 2. DTAQ was machen. Also, der externe Server muss in die neue DTAQ schreiben aus der du liest und die Daten dann an die originäre DTAQ weiterleitest (QSNDDTAQ).

Vielleicht kannst du die DTAQ für das Programm auch irgendwo parametrieren, dann kannst du diesem die neue unterjubeln und brauchst den Server nicht anzupassen.

Das QRCVDTAQ zu ersetzen ist insoweit schwierig, da dieses ja dann von allen anderen Programmen auch aufgerufen wird. Davon ist abzuraten.

K_Tippi
22-03-11, 07:11
Danke für den Hinweis,
mein Gedanke war,
RPG setzt call qrcvdtaq ab (call nicht API)-> wird von gleichnamigem Programm in eigener Libl abgefangen, -> dieses setzt explizit call qsys/qrcvdtaq ab-> und gibt das Resultat an das erste RPG zurück.

die JOBD und LIBL kann ich explizit beeinflussen. Ich kann also dafür sorgen, dass nur dieses Programm eine eigene Libl hat.
Nur stellt sich mir die Frage, wie mache ich das mit variabler Parameter Länge.

Klaus

Fuerchau
22-03-11, 08:01
Da QRCVDTAQ in der QSYS ist, musst du ja deine Lib per CHGSYSLIBL an den Anfang setzen.
Beim Call werden nur Adressen übergeben, du kannst also deine Variablen auf das Maximum deklarieren.

Wenn du an Stelle eines CLP's ein RPGLE verwendest, kannst du per %Parms() die Anzahl der übergebenen Parameter ermitteln um so Fehler auszuschließen, ausserdem gibt es dann keinen Aufruffehler für nicht passende Anzahl Parameter.
RPG/LE lässt sich immer mit einer variablen Anzahl Parameter aufrufen im Gegensatz zu CLP.

K_Tippi
22-03-11, 13:08
Hallo Fuerchau,
danke für den Tipp,
werde es mit ILE-RPG machen.
Das CL bekomme ich mit rtvclsrc, kann also einen chghsyslibl einbauen.
Klaus