Anmelden

View Full Version : Parameterübergabe



tarkusch
15-11-12, 19:42
Hallo,

habe mir da ein kleines Programm geschrieben, das mir in einem Sfl bestimmte Werte aus einem Artikelstamm anzeigt.

Leider hat der Pf keinen eindeutigen Key.

Kann ich eigentlich die ganze Datenstruktur vom Pf als Parameter übergeben lassen oder kann mir jemand einen stupser in die richtige Richtung geben?

Gruß

Tarki

Fuerchau
15-11-12, 20:04
Meist liegen die Keys bei einer solchen PF in einer LF.
Schau mal per DSPDBR nach, welche Keys (LF's) denn vorhanden sind und such dir den passenden aus.

Eine Datenstruktur als Parameter macht nur zwischen HLL-Programmen, also RPG, ILERPG und COBOL sinn.
Mit CLP wirds da schon problematisch.

Es ist aber immer besser, die Parameter qualifiziert zu definieren, schließlich kannst du bis zu 256 definieren.

tarkusch
15-11-12, 20:14
Die Parameter werden/sollten zwischen 2 ILERPG-Programmen hin und her übertragen werden.

Mit Parameter qualifiziert definieren ist alle Felder einzeln anführen gemeint oder?

Gruß

Tarki

Fuerchau
15-11-12, 20:17
Zwischen 2 ILE's ist sowas durchaus üblich.

tarkusch
15-11-12, 20:26
sorry, aber wie definiert man eine solche Datenstruktur die den ganzen PF beinhalten soll?

Dank im Voraus

holgerscherer
16-11-12, 00:40
Eine Datenstruktur als Parameter macht nur zwischen HLL-Programmen, also RPG, ILERPG und COBOL sinn.
Mit CLP wirds da schon problematisch.

Ach, mit der LDA und normalen Data areas kann man da die tollsten Tricks zaubern. Da sind auch 5000-Zeichen-Bereiche kein Thema mehr.

Ok, reden wir nicht über Stil und Performance :)

-h

B.Hauser
16-11-12, 06:15
sorry, aber wie definiert man eine solche Datenstruktur die den ganzen PF beinhalten soll?

Dank im Voraus

Warum willst Du eine komplette physische Datei übertragen?
In dem aufgerufenen Programm musst Du die Datei sowie so irgendwie lesen und verarbeiten.

Wenn Du die Datei mit native I/O lesen weißt Du wie die Datei heißt und aufgebaut ist, da Du das in den F-Bestimmungen hinterlegst. Falls die Datei mit dem gleichen Aufbau mehrfach vorhanden ist, entweder mit unterschieldichen Namen oder in unterschiedlichen Bibliotheken, kannst Du über das Schlüssel-Wort EXTFILE(Variable) die Datei zur Laufzeit setzen und user controlled (Schlüssel-Wort USRCTL und OpCode OPEN) öffnen. In diesem Fall genügt es, wenn Du den Datei (und ggf. Bibliotheksnamen) als Parameter an das Programm übergibst.

Wenn es sich um unterschiedliche Dateien mit unterschiedlichem Aufbau handelt, wird das Ganze kompliziert, da Du dann nur noch mit dynamischem embedded SQL arbeiten kannst.

Wenn Du jedoch nur einen kompletten Datensatz übertragen willst, kannst Du ein Template für eine externe Datenstruktur definieren und den Parameter im Prototyp über LikeDS definieren:

Prototyp-Definition

D RefDSMyFile E DS ExtName(MyFile) Template

D MyPgm PR ExtPgm('MyPGM')
D ParmKey 10I 0 const
D ParmDSFile LikeDS(RefDSMyFile)

Programm


/Include QPROLESRC,MyProto
D MyDS DS LikeDS(RefDSMyFile) inz
/Free
MyPgm(10: MyDS);
If MyDS.Fld1 > *Zeros;
//........
EndIf;


Birgitta