PDA

View Full Version : SBMJOB



malzusrex
20-03-15, 11:13
Hallo Gemeinde,

bin gerade mal dabei diverse CLs zu überarbeiten und habe dabei gleich mal eine Frage,
über die ich mir bisher keine Gedanken gemacht habe.
Wo oder was ist der Unterschied bei dem CMD SBMJOB?


SBMJOB JOB(MyJob) JOBD(QBATCH) RQSDTA('CALL MYPGM')

SBMJOB JOB(MyJob) JOBD(QBATCH) CMD(CALL PGM(MYPGM))


Am Ende macht er ja immer das Programm MYPGM

Gruß
Ronald

hel400
20-03-15, 12:34
Im Prinzip ist bei den Aufrufen kein Unterschied.

Im CMD kann man Befehle mit Variablen einstellen, im RQSDTA müsste der Befehl fertig aufbereitet stehen.
Weiters ist es so, dass der CMD-Parameter nicht von Anfang an dabei war, bei sehr alten Programmen ist daher immer nur der RQSDTA verwendet

Fuerchau
20-03-15, 13:02
Da gibt es schon einen Unterschied, den aber kaum jemand nutzt.
Der Parameter CMD ist vom Typ her so definiert, dass nur ein AS/400-Kommando erlaubt ist.
Bei RQSDTA kannst du alles reinschreiben.
Die Daten, CMD oder RQSDTA werden dann später in die Jobmsgqueue geschrieben.
Nun kommt es auf die RTGDTA an.
Im Subsystem wird nun auf die Leitwegeinträge geprüft, welches Programm auf Grund der RTGDTA gestartet werden soll, und siehe da, der letzte Eintrag ist meist QCMD.
QCMD liest nun die Daten aus der Jobmsgqueue und führt das Kommando aus.

Du kannst nun beliebige Leitwegeinträge definieren, z.B. CMPVAL('LSNR') PGM('PRTLSNR').
Machst du nun einen SBMJOB RQSDTA('LSNR123456') wird das Programm PRTLSNR aufgerufen. Dieses kann nun mit RCVMSG den Eintrag LSNR123456 auslesen und den Lieferschein drucken.

Aber so kompliziert macht man es ja nun nie.
Seit es den CMD-Parameter gib (V2.1) reicht ja nun mal eben ein CALL-CMD.

malzusrex
20-03-15, 23:38
Okay,
dachte mir schon das es mit "Altlasten" zu tun hat. Denke in einigen CLs sind Aufrufe von Programmen drin, die schon gute 20 Jahr auf den Buckel habe.
(Auch wenn die eigentlichen Programme schon mal über arbeitet worden sind, aber immer noch den gleichen Namen tragen)

Gruß
Ronald

BenderD
21-03-15, 06:59
... da wäre ich mal ganz, ganz vorsichtig...
wenn der OS400/Befehl CALL seine Finger dazwischen hat, fummelt der an den Parametern rum und macht aus allem, was er als numerisch erkennt gepackte 15 5 draus und alfa variablen mit 32 Byte übergibt, falls er sie als kürzer erkennt, ansonsten die Länge übergibt, die er erkennt.
Übergibt man die command strings per RQSDTA und es ist kein routing entry da, der sich das vorher schnappt, dann geht der complette string unverändert an QCMD.
Der Mechanismus mit den Routing entries wird vorrangig dafür genutzt auf den 38er Command Interpreter QCL umzuleiten, der andere Regeln für Quailifizierung hat.
Hängt die JOBQ am QCMN, dann wäre ich da sehr vorsichtig mit schrauben, solange ich da nicht exakt verstehe, wie das funktioniert.
Wenn in RQSDTA "seltsame" Bestandteile drin sind, dann wäre ich da auch sehr vorsichtig, da hängen im simplen Fall Einstellungen für die Class dran, die Prioritäten und andere Performance Schräubchen beinhalten.

D*B

hel400
21-03-15, 07:39
Ja nicht schlecht, auf welch komplizierte Arten man einen CALL absetzen kann :p

Na im ernst - über die Sache mit dem CALL und den "veränderten" Parameterwerten sind wir wohl schon alle mal d'rübergestolpert ... :D
Aber interessant zu lesen, was da ursprünglich alles hineingepackt wurde!

Ändern würde ich die (alten) Aufrufe auch nicht, es spricht ja eigentlich nichts gegen die RQSDTA-Verwendung (und wie gesagt - die beiden Varianten in der ursprünglichen Frage sind absolut gleichwertig).

Fuerchau
22-03-15, 06:33
Bzgl. des simplen CALL's hast du Recht, aber wer macht schon ausschließlich einfache Calls.