PDA

View Full Version : RPGLE Parameter *NOPASS



XMan
20-12-13, 09:11
Guten Morgen Forum!

Irgendwie steh ich auf dem Schlauch.

Derzeit wird ein RPGLE Programm konventionel mit *ENTRY PLIST mit einem Parameter aufgerufen.
Dieser Parameter ist eine definierte Datenstruktur.
Nun sollte ich noch 2 weitere Parameter mit der Option *NOPASS dazu geben.
Nur leider weiß ich derzeit nicht wie ich das hinkriege.
C *ENTRY PLIST
C PARM Calendar

wenn ich nun diese Definition einbinde und die *ENTRY deaktiviere dann habe ich keinen Inhalt im Feld Calendar

D PVDATMOD PR EXTPGM('PVDATMOD')
D Calendar likeDs(Calendar)
D pi_Definiton 10A Const Options(*NOPASS)
D po_RN 10A Options(*NOPASS)

Was ist hier falsch bzw. wie kann ich das lösen?

Danke!

Fuerchau
20-12-13, 09:16
Bei "*Entry Plist" gibt es die Option *NOPASS nicht.
Es reicht hier einfach die Zusatzparameter anzufügen.
Per "if %addr(myParm) = *null" bzw. %parms() kannst du feststellen, ob der Parameter übergeben wurde.

Ansonsten musst du *entry plist mittels Prototyp (PR) und Interface (PI) ersetzen.
Was dich allerdings nicht der Abfrage auf NULL bzw. %parms() enthebt.

XMan
20-12-13, 09:21
OK, Danke Fuerchau, das werde ich gleich mal testen.

Fuerchau
20-12-13, 09:50
Beim Aufruf von HLL-Programmen (RPG/ILERPG/COBOL usw.) gibt es keine nennenswerte Prüfung über die Anzahl der Aufrufparameter.
Per DSPPGM wird die Anzahl ja angezeigt.
Bei CLP ist diese immer Fix (per N - N) definiert.
Bei den HLL's steht da immer "0 - 255".
D.h., dass du zwischen keinen und 255 Parameter übergeben kannst, also auch durchaus mehr als benötigt.
Erst zur Laufzeit kannst du die tatsächliche Anzahl der Parameter prüfen (bei OPM's über die SDS, ansonsten per %parms()) und per %addr(Parm).