PDA

View Full Version : seltsames Phänomen bei SBMJOB



Seiten : [1] 2

KM
25-07-08, 08:51
Hallo,

wir haben ein Problem, wenn wir aus einem RPG-Programm heraus einen SBMJOB über QCMDEXC aufrufen. Wenn nämlich dem aufgerufenen Programm ein Parameter übergeben wird, der ein nicht-darstellbares Zeichen enthält (z.B. Hexa 0D25 = CRLF), dann erhalten wir den Fehler CPD0183: Eingebetteter Befehl CALL ist zu lang. Die Befehlslänge beträgt angeblich 20185 Stellen, was jedoch nicht stimmt. Wenn wir nur normale Zeichen (ab Hexa 40) verwenden, dann funktioniert alles problemlos. Hat schon mal jemand diesen Fehler gehabt ? Ursprünglich wollten wir den Aufruf über einen CMD machen. Das scheidet jedoch aus, da als Parameter nur max. 5000 Stellen erlaubt sind und wir mehr benötigen.

Gruß,
KM

Fuerchau
25-07-08, 09:14
Scheinbar kommt eben QCMDEXC mit CRLF nicht zurecht.
Versuche es doch mal mit diesem API:
Process Commands (QCAPCMD) API (http://publib.boulder.ibm.com/infocenter/iseries/v5r4/topic/apis/qcapcmd.htm?resultof=%22%71%63%6d%64%65%78%63%22%2 0)

Oder du musst über ein Redesign nachdenken.

kuempi von stein
25-07-08, 09:27
Eventuell hilft es auch den SBMJOB zu verändern?
Also die Parameter und den entsprechenden Auftrag nicht über die Variabel CMD laufen lassen, sondern in RQSDTA.

k.

Pikachu
25-07-08, 09:47
Wie erfolgt denn der Aufruf genau (Quelltextauszug)?
Vielleicht ist die als Befehl übergebene Zeichenkette ja wirklich zu lang?

KM
25-07-08, 10:33
@Fuerchau: Beim QCAPCMD passiert genau dasselbe. Redesign sollte nur die letzte Möglichkeit sein, da ja offenbar ein Fehler vorliegt.

@Kuempi: Der Parameter RQSDTA lässt nur maximal 3000 Zeichen zu. Das ist zu wenig.

@Pikachu: Der Befehl ist definitiv nicht zu lang. Ich kann z.B. 9999 mal 'x' an das Parameterfeld übergeben. Das funktioniert problemlos. Wenn ich aber nur einmal CRLF (also nur 2 Byte) oder ein anderes nicht-darstellbares Zeichen (z.B. Hexa 3A) einfüge, kommt der Fehler, dass die maximale Länge von 20000 für den eingebetteten Befehl überschritten wurde.

Sonst noch rigendwelche Ideen ?

Gruß,
KM

Fuerchau
25-07-08, 10:38
Nicht darstellbare Zeichen vermeiden ;)

Alternativ den Parameter Hex expandieren und per X'...' übergeben.

KM
25-07-08, 11:28
Ich wollte damit ja auch nur sagen, dass der Fehler nur vorkommt, wenn man Zeichen unter Hexa 40 verwendet. Das war ja nur ein Beispiel. Wir benötigen nun mal den CRLF. Diesen fügen wir in das Parameterfeld ja schon mit X'0D25' ein. Eine andere Möglichkeit kenne ich nicht.

KM

Pikachu
25-07-08, 11:44
Folgendes Programm übergibt einen Paramter mit besagten Zeichen und läuft hier unter V5R4. Kannst du einmal prüfen, ob es auch bei dir läuft?
D QCMD S 16384A INZ
D QCMDLEN S 15P 5 INZ(%SIZE(QCMD))
D PARM S 80A INZ
D************************************************* *********************
C EVAL PARM = 'ABCD' + X'0D25' + 'EFGH'
C EVAL QCMD = 'SBMJOB CMD(CALL PGM(SBM2) ' +
C 'PARM(''' + PARM + '''))'
C CALL 'QCMDEXC'
C PARM QCMD
C PARM QCMDLEN
C MOVE *ON *INLR

KM
25-07-08, 11:53
Bei kurzen Parameterfeldern funktioniert der Aufruf. Ändere mal die Länge von PARM auf 12000 Stellen. Bin mal gespannt was dann bei Dir passiert. Wir haben übrigens auch V5R4.

KM

Pikachu
25-07-08, 13:40
Seltsam. Bis zu einer Länge von 9988A für die Variable PARM läuft's, auch wenn diese Variable X'0D25' enthält. Ab einer Länge von 9989A für die Variable PARM läuft's nur noch, wenn das X'0D25' aus der Zuweisung entfernt oder z.B. durch X'4040' ersetzt wird. :confused: