Anmelden

View Full Version : Parameterübergabe CL/RPG



mott
07-12-05, 09:33
Hallo!

Ich habe folgendes Problem: Wenn ich in einem CL-Programm ein RPG-Programm mit einem CALL aufrufe, funktioniert das RPG-Programm. Wenn ich das RPG-Programm aber mit einem SBMJOB aufrufe, dann bricht das RPG-Programm mit einem Dezimaldatenfehler ab. An das RPG-Programm werden mehrere Parameter übergeben. Das RPG Programm hat dann ein Problem mit den Parametervariablen (=Dezimaldatenfehler).

CL-Programm (MGLBIC02)

PGM
DCLF FILE(MGLBIB02)
RTVJOBA JOB(&B1WSID)
/*=======================*/
START: SNDRCVF RCDFMT(MGLBIB00)
IF COND(&IN03 = '1') THEN(RETURN)
/*=======================*/
SBMJOB CMD(CALL PGM(MGLBIR02) PARM(&B1JAHR &B1ZTAG +
&B1ZMON &B1ZJAR &B1BTRG)) JOB(BIOARGE)
JOBD(QBATCH)
/*=======================*/
ENDE: ENDPGM

RPG-Code (MGLBIR02)


D P_Jahr S 4 0
D P_ZahlTag S 2 0
D P_ZahlMonat S 2 0
D P_ZahlJahr S 4 0
D P_Betrag S 6 2
:
:
C *ENTRY PLIST
C PARM P_Jahr
C PARM P_ZahlTag
C PARM P_ZahlMonat
C PARM P_ZahlJahr
C PARM P_Betrag

Was mir noch aufgefallen ist: Wenn ich das Jobprotokoll des Batchjobs ansehe, dann steht da folgendes (man beachte die Parameter):


CALL PGM(MGLBIR02) PARM(2065 31 12 2005 1,21)

Hat jemand eine Erklärung dafür, dass das RPG-Programm mit dem direkt CALL-Befehl funktioniert und mit SBMJOB fehlschlägt?`

Vielen Dank im Voraus für etwaige Antworten!
Michi

Fuerchau
07-12-05, 09:44
Beim Direkt-Call werden die Adressen der Variablen übergeben.
Beim SBMJOB müssen die Variablen als Text übergeben werden. Sind diese dann nicht in Hochkommata interpretiert der Befehl CALL die Parameter:
- Zeichenvariablen in der angegebenen Länge, mindestens jedoch 32 Zeichen
- Numerische Werte immer im Format Packed 15,5
Du musst also die Parameter korrekt aufbereiten (Als Zeichen) in Hochkomma !

Rincewind
08-12-05, 13:09
Oder du übergibst die Werte in Hex (wenn es immer dieselben Sind)

Gruß
Rince

Fuerchau
08-12-05, 13:31
Das scheint wohl eher nicht der Fall zu sein ;)
Siehe SNDRCVF im CLP.

BenderD
09-12-05, 09:06
Hallo,

als Objekt zur Beschreibung von Parametern sind auf der AS400 Commands vorgesehen. Wenn man einen eigenen Command erstellt und als CPP das aufzurufende Programm festlegt, kann man den exakten Typ jedes Parameters überschreiben.
The /38 Way to hell war: den kompletten Aufruf in einen String reinbasteln und beim SBMJOB in RQSDTA übergeben.

mfg

Dieter Bender


Beim Direkt-Call werden die Adressen der Variablen übergeben.
Beim SBMJOB müssen die Variablen als Text übergeben werden. Sind diese dann nicht in Hochkommata interpretiert der Befehl CALL die Parameter:
- Zeichenvariablen in der angegebenen Länge, mindestens jedoch 32 Zeichen
- Numerische Werte immer im Format Packed 15,5
Du musst also die Parameter korrekt aufbereiten (Als Zeichen) in Hochkomma !