PDA

View Full Version : DSPF-Name als Variable nutzen



hh-mi
08-09-06, 08:31
Hallo,
ich möchte folgendes lösen und stoße dabei auf ein Problem.
Name des DSPF bekannt, Recordnamen nicht. Name der die DSPF nutzenden PGM nicht bekannt. Über eine Funktion sollen die Records der DSPF angezeigt werden (ähnlich der strsda 3 - Funktion - aber eben variabel). Was habe ich gemacht:
Screen für Name des DsPF und LIB: OKAY. Anschließendes DSPFD *members in einen outfile: ok. Rpg programm zum Auslesen dieses Outfiles und anzeige der Recordnamen in einem SFL: ok. Und nun kommt es: ich wähle einen (oder mehrere) Record(s) aus und möchte diesen Namen als Variable an ein RPG? CL? PGM übergeben. Nur: bei dem DCLF-cmd (oder im RPG in der F-Zeile) sind keine Variablen erlaubt. Am einfachsten wäre ja der strsda 3 cmd incl variablen.
So stehe ich also da in meinem Hemd .. hat jemand einen Tipp? Vielleicht bin ich ja auch auf dem so genannten Holzwege und es gibt eine viel einfachere oder gänzliche andere Lösung.
Dank im Voraus

kuempi von stein
08-09-06, 09:04
moin moin,

OVRDSPF vor Programmcall wäre vermutlich eine Lösung.

k.

Fuerchau
08-09-06, 10:07
Variable Formatnamen sind im ILE/RPG und CLP leider nicht möglich !

Hintergrund:
Die Kommunikation zwischen Programm und Datei funktioniert über E/A-Puffer, auf die man in RPG/CLP keinen Zugriff hat.

Zur Compile-Zeit werden die Variablen für die E/A's deklariert (I-/O-Bestimmung). Durch diese Deklaration wird der Pufferaufbau definiert (siehe auch DSPFFD).

Alle Variablen der E/A's sind sog. Single-Variablen !
Durch Deklaration eines Namens in einer DS wird erst dann der Bezug zu dieser DS hergestellt. Dabei kann es bei numerischen Variablen sogar zu Typumwandlung kommen (P->S, S->P).

Zum Zeitpunkt des READ/EXFMT(I) wird das Satzformat geprüft und durch generierte Move's aus dem Puffer in die Variablen übertragen.
Zum Zeitpunkt des WRITE/EXFMT(O) wird durch Angabe des Formatnamens der Pufferaufbau ausgewählt und der Compiler kann an dieser Stelle die Move's aus den Variablen zum E/A-Puffer generieren.
Deshalb ist beim WRITE/EXFMT der Formatname erforderlich, beim READ kann der Dateiname verwendet werden.

Ist dann zur Laufzeit ein Satzformat nicht bekannt kommt es beim READ ggf. zu Laufzeitfehlern.

Anders sieht es dann in COBOL/C++ aus, da hier beim READ/WRITE mit den Puffern direkt gearbeitet werden kann.

BenderD
08-09-06, 10:38
Hallo,

wie Baldur bereits angemerkt hat, muss das Format zur Compiletime bekannt sein, da bleibt dann eigentlich nur generieren, sprich ein entsprechendes Zugriffsmodul generieren und aufrufen, das kann man sich dann auch wegspeichern und bei Wiederholung direkt aufrufen (auf LVLCHK achten!).

mfg

Dieter Bender


Hallo,
ich möchte folgendes lösen und stoße dabei auf ein Problem.
Name des DSPF bekannt, Recordnamen nicht. Name der die DSPF nutzenden PGM nicht bekannt. Über eine Funktion sollen die Records der DSPF angezeigt werden (ähnlich der strsda 3 - Funktion - aber eben variabel). Was habe ich gemacht:
Screen für Name des DsPF und LIB: OKAY. Anschließendes DSPFD *members in einen outfile: ok. Rpg programm zum Auslesen dieses Outfiles und anzeige der Recordnamen in einem SFL: ok. Und nun kommt es: ich wähle einen (oder mehrere) Record(s) aus und möchte diesen Namen als Variable an ein RPG? CL? PGM übergeben. Nur: bei dem DCLF-cmd (oder im RPG in der F-Zeile) sind keine Variablen erlaubt. Am einfachsten wäre ja der strsda 3 cmd incl variablen.
So stehe ich also da in meinem Hemd .. hat jemand einen Tipp? Vielleicht bin ich ja auch auf dem so genannten Holzwege und es gibt eine viel einfachere oder gänzliche andere Lösung.
Dank im Voraus

Fuerchau
08-09-06, 10:41
Wie wärs da mit COBOL oder C++ ?
Den LVLCHK kann man per OVRDSPF wegbekommen.