View Full Version : API QWDRJOBD
Andreas Herzfeldt
25-05-07, 12:30
Nein, der Array aus dem API wird ja in das Feld &PARM zurückgegeben und hier ist es dann egal welche Positiion ich CHGVAR%SST ..... auslese, die Fehlermeldung im DUMP ist immer *NICHT ADRESSIERBAR !
Andreas
Ich denke es liegt nicht am %SUBSTRING(&PARM 74 2), sondern am CHGVAR VAR(&RJOBPTY) VALUE(irgendwas). Wahrscheinlich ist &RJOBPTY nicht adressierbar. Kannst du bitte einmal den Aufruf des CMD hier reinschreiben?
Andreas Herzfeldt
25-05-07, 12:49
PARM KWD(JOBD) TYPE(*CHAR) LEN(10) RTNVAL(*NO) +
RSTD(*NO) MIN(0) CHOICE(ZEICHENWERT) +
PROMPT('Jobbeschreibung')
PARM KWD(RJOBD) TYPE(*CHAR) LEN(10) RTNVAL(*YES) +
RSTD(*NO) MIN(0) CHOICE(*VALUES) +
PROMPT('Return JOBD (10)')
PARM KWD(RJOBDL) TYPE(*CHAR) LEN(10) RTNVAL(*YES) +
RSTD(*NO) MIN(0) CHOICE(*VALUES) +
PROMPT('Return JOBD Bibl. (10)')
PARM KWD(RJOBQ) TYPE(*CHAR) LEN(10) RTNVAL(*YES) +
RSTD(*NO) MIN(0) CHOICE(*VALUES) +
PROMPT('Return JOBQ (10)')
PARM KWD(RJOBQL) TYPE(*CHAR) LEN(10) RTNVAL(*YES) +
RSTD(*NO) MIN(0) CHOICE(*VALUES) +
PROMPT('Return JOBQ Bibl. (10)')
PARM KWD(RJOBDU) TYPE(*CHAR) LEN(10) RTNVAL(*YES) +
RSTD(*NO) MIN(0) CHOICE(*VALUES) +
PROMPT('Return JOBD User (10)')
PARM KWD(RJOBPTY) TYPE(*CHAR) LEN(2) RTNVAL(*YES) +
RSTD(*NO) MIN(0) CHOICE(*VALUES) +
PROMPT('Return JOBQ JOBPTY (02)')
PARM KWD(RJOBHLD) TYPE(*CHAR) LEN(10) +
RTNVAL(*YES) RSTD(*NO) MIN(0) +
CHOICE(*VALUES) PROMPT('Return JOBQ +
JOBHLD (10)')
PARM KWD(RJOBOUTQ) TYPE(*CHAR) LEN(10) +
RTNVAL(*YES) RSTD(*NO) MIN(0) +
CHOICE(*VALUES) PROMPT('Return JOBQ +
OUTQ (10)')
PARM KWD(RJOBOUTQL) TYPE(*CHAR) LEN(10) +
RTNVAL(*YES) RSTD(*NO) MIN(0) +
CHOICE(*VALUES) PROMPT('Return JOBQ OUTQ +
Bibl.(10)') PARM KWD(RJOBOPTY) TYPE(*CHAR) LEN(2) +
RTNVAL(*YES) RSTD(*NO) MIN(0) +
CHOICE(*VALUES) PROMPT('Return JOBQ +
OUTQPTY (02)')
PARM KWD(RJOBPDEV) TYPE(*CHAR) LEN(10) +
RTNVAL(*YES) RSTD(*NO) MIN(0) +
CHOICE(*VALUES) PROMPT('Return JOBQ +
Printer (10)')
und hier der CL-Aufruf
PGM PARM(&JOBD &RJOBD &RJOBDL &RJOBDU &RJOBQ +
&RJOBQL &RJOBPTY &RJOBHLD &RJOBOUTQ +
&RJOBOUTQL &RJOBOPTY &RJOBPDEV)
DCL VAR(&RJOBD) TYPE(*CHAR) LEN(10)
DCL VAR(&RJOBDL) TYPE(*CHAR) LEN(10)
DCL VAR(&RJOBDU) TYPE(*CHAR) LEN(10)
DCL VAR(&RJOBQ) TYPE(*CHAR) LEN(10)
DCL VAR(&RJOBQL) TYPE(*CHAR) LEN(10)
DCL VAR(&RJOBPTY) TYPE(*CHAR) LEN(2)
DCL VAR(&RJOBHLD) TYPE(*CHAR) LEN(10)
DCL VAR(&RJOBOUTQ) TYPE(*CHAR) LEN(10)
DCL VAR(&RJOBOUTQL) TYPE(*CHAR) LEN(10)
DCL VAR(&RJOBOPTY) TYPE(*CHAR) LEN(2)
DCL VAR(&RJOBPDEV) TYPE(*CHAR) LEN(10)
Und wenn Du mal bei dem Googlehupf nach QWDJRJOBD suchst, findes Du auch zum Format JOBD0100 die Parametrierung !
Andreas
Und wie genau wird dieser Befehl aufgerufen? Wird auch für den Parameter RJOBPTY beim Aufruf dieses Befehls ein entsprechend großer Speicherbereich mitgegeben, um den Rückgabewert zu empfangen?
Sieh mal hier, das dürfte genau dieses Problem (http://www.systeminetwork.com/isnetforums/archive/index.php?t-40498.html) sein.
Andreas Herzfeldt
29-05-07, 06:48
Mit dem MONMSG der MCH3601 bekomme ich zwar den Fehler nicht mehr, aber das Programm bringt jetzt gar keine Werte mehr zurück ! Ich werde mal den IBM-SW Ta befragen !
Danke !!
Andreas
Wie nimmst du die Werte denn entgegen?
Das Problem ist, dass in CLP NULL-Adressen nicht verarbeitet werden können.
Wenn du bei einem CMD mit RTNVAL nicht alle Variablen angibst, wird an Stelle der nicht angegebenen Variablen ein NULL-Pointer übergeben.
Beim Zugriff darauf stirbt eben CLP.
Umgehung:
Rufe aus dem CLP ein ILERPG auf, dieses ruft das API auf und übergibt die Werte, deren Adresse ungleich *NULL ist:
if %addr(RJOBD) <> *null;
RJOBD = APIRJOBD;
endif;
usw.