Anmelden

View Full Version : SBMJOB und DEC



sirdidi
22-01-14, 16:09
Hallo,

ich habe ein Problem bei einem SBMJOB mit einem Dezimalfeld.

Wenn ich das Programm mit "I" und dem Call aufrufe läuft alles normal durch.

Wenn ich das Programm mit "B" aufrufe und das mit SBMJOB übergeben wird, bekomme ich im RPGLE das im "call_cl" aufgerufen wird, einen Programmabbruch. Der Wert im aufgerufenen RPG-Programm von (dec) &AA02 ist 000 obwohl im aufrufenden CL der Wert mit 030 noch korrekt ist.

Das Feld &AA02 ist durchgängig immer mit dec 3/0 definiert.

Wie muss ich vorgehen, damit der SBMJOB so läuft wie der Call?


PGM PARM(&AA01 &AA02 &AA003 &IB)

DCL VAR(&AA01 ) TYPE(*CHAR) LEN(3)
DCL VAR(&AA02 ) TYPE(*DEC) LEN(3)
DCL VAR(&AA03 ) TYPE(*CHAR) LEN(1)
DCL VAR(&IB ) TYPE(*CHAR) LEN(1)

IF COND(&IB = 'B') THEN(DO)
SBMJOB CMD(CALL PGM(call_cl) PARM(&AA01 &AA02 +
&AA03)) JOB(TEST)
ENDDO
IF COND(&IB = 'I') THEN(CALL PGM(call_cl) +
PARM(&AA01 &AA02 &AA03))
ENDPGM

Fuerchau
22-01-14, 16:18
CALL-Parameterhandling immer das selbe Problem:

Beim internen CALL werden die Parameter als Referenz direkt übergeben.
Beim Kommando CALL (was beim SBMJOB zum Zuge kommt), werden die Variablen als Wert übergeben. Dabei werden dann Zahlen im Batchjob vom CALL in das Format Dec(15, 5) umgedreht.

Dieses Problem ist hier schon mehrfach behandelt worden.
Schreib dir für das Programm ein simples CMD für die beiden Parameter, dann kannst du das CMD frei verwenden um die korrekte Parameterübergabe sicher zu stellen.

sirdidi
24-01-14, 09:58
Sorry, wenn ich jetzt nochmal beschämend nachfrage. Aber ich krieg den CMD-Befehl mit der DEC-Variablen im CMD nicht hin. Wie muss ich das schreiben? Leider fand ich auch keine Beispiele bei denen ich mal "spicken" konnte. Wenn ich das richtig verstanden habe soll ich den CMD in eine &Variable packen und die &Variable dann beim SBM im PARM mitgeben.

Ich steh aber total auf dem Schlauch wie die CMD-Variable mit dem DEC-Parameter aussehen muss? Vielleicht könnt ihr mir da nochmal auf die Sprünge helfen.

Pikachu
24-01-14, 10:21
Anstelle des CALL PGM(...) PARM(...) im Parameter CMD() des SBMJOB mußt du deinen neuen Befehl (*) mit Schlüsselworten angeben:

SBMJOB CMD(dein Befehl mit Schlüsselworten) ...

Am besten läßt sich das alles mittels F4=Bedienerführung ausfüllen.

(*) Hier ist ein Beispiel, wie man einen eigenen Befehl erstellt. (http://www.mcpressonline.com/tips-techniques/cl/techtip-create-cl-commands-from-cl-program-source-code.html)

sirdidi
24-01-14, 11:31
Vielen, vielen Dank für den Link - das war genau das was ich gesucht und gebraucht habe. Jetzt funzt's :-)