PDA

View Full Version : Call ILERPG mit Parameterübergabe aus OPM-Programm heraus



bie-dro
17-02-21, 11:31
Liebe Community,

ich möchte aus einem OPM RPG-Programm heraus ein neues ILERPG-Programm aufrufen und Parameter übergeben. Komischerweise werden die Werte im aufzurufenden Programm nicht empfangen. Wenn ich im Debugger schaue, dann haben die Parameter-Werte nur ein "?". Wenn ich das Programm aber von der Befehlszeile aufrufe, dann funktioniert es.

Das aufzurufende Programm ist komplett in *FREE geschrieben.
Hier einige Statements des Programmes:

Ctl-Opt
Actgrp(*new)
BndDir('*LIBL/MYBNDD')
DftActGrp(*no)
Main(Main);
.
.
.
Dcl-PR Main Extpgm;
Parameter1 zoned(1);
Parameter2 zoned(5);
Parameter3 zoned(3);
End-PR;

Dcl-Proc Main;

// Programm-Interface
Dcl-PI Main;
Parameter1 zoned(1);
Parameter2 zoned(5);
Parameter3 zoned(3);
End-PI;
.
.
.
End-Proc;



Und das OPM-Programm, welches das andere PGM aufruft, sieht so aus:


.
.
.

d myNewPgm pr extpgm('MYNEWPGM')
d parameter1 1 0
d parameter2 5 0
d parameter3 3 0

.
.
.

parameter1 = 1;
parameter2 = 1304;
parameter3 = 0;

myNewPgm(parameter1:parameter2:parameter3);

.
.
.



Beim Aufruf des neuen Programms über die Befehlszeile, muss ich auch unbedingt diese Schreibweise einhalten, damit es funktioniert:

call mynewpgm parm('1' '01304' '000')

Ich bin Neuling auf dem ILE-Gebiet. Das ist mein erstes ILE-Programm an das ich Parameter übergeben möchte. Habe zwar schon Prozeduren mit Parameterübergabe geschrieben - das funktioniert auch wunderbar.

Was mache ich falsch?

Schöne Grüße
Artur Janzen

prsbrc
17-02-21, 11:36
Hallo und schönen nachmittag
Versuche mal anstatt ZONED die Felder PACKED zu definieren.

Fuerchau
17-02-21, 11:49
Ob zoned oder gepackt macht dafür erstmal keinen Unterscheid, aber wichtig zu wissen:

Der Command CALL interpretiert Zahlenargumente grundsätzlich als 15p 5 also packed(15:5).
Zoned sind Zeichenfelder, die auf Ziffern beschränkt sind, daher der CMD Call mit Hochkomma.

Für Programmaufrufe kann man i.Ü. auch eigene CMD's schreiben.
Dabei werden dann die Übergabewerte korrekt an das Programm übergeben, da die Definition die Konvertierung vorschreibt.

hel400
17-02-21, 12:31
Meiner Meinung nach ist der Fehler klar ersichtlich.
Im aufrufenden Pgm sind die Parameter alle gepackt, im aufgerufenen aber explizit gezont - daher kommt dann Müll an.

bie-dro
17-02-21, 12:54
Ja, ihr hattet Recht. Das war's. Ich habe im neuen Programm die Felder als "packed" definiert und jetzt klappt es.

Wusste gar nicht, dass die Felder im alten Programm als packed definiert werden, wenn ich nichts angebe. Habe jetzt aber ein P angegeben, damit man das auf den ersten Blick ersieht.

Danke für eure Hilfe.

Gruß
Artur Janzen

bie-dro
17-02-21, 13:39
Eine Frage habe ich aber noch. Wie soll ich das neue Programm jetzt über die Befehlszeile starten? Ich würde es gerne auch so testen können und einfach mit ein paar Parametern füttern. Aber wie ich die Parameter auch eingebe, ob mit Hochkomma oder ohne, ich bekomme immer eine Fehlermeldung.

B.Hauser
17-02-21, 13:50
Gepackte parameter müssen beim Aufruf über Befehlszeile in hex angegeben werden. x'12345F' (entspricht der Übergabe eines gepackten numerischen Wertes mit 5 Ziffern (Definition Packed(3))

Ansonsten hilft nur der Aufruf aus einem anderen Programm.

bie-dro
17-02-21, 13:58
Hm, das ist mir dann aber doch zu umständlich. Wahrscheinlich werde ich dann lieber die Parameterfelder wieder auf ZONED umstellen und dann aber auch im Aufruf-Programm ZONED-Felder daraus machen.

Danke trotzdem für den Hinweis mit den hex-Werten.

Gruß
Artur Janzen

Fuerchau
17-02-21, 15:32
Packed(3) sind aber nur 3 Ziffern. Man gibt die Zffern und nicht die Bytes an;-).