PDA

View Full Version : JobQ und Parameter



camouflage
11-02-16, 12:28
Vermutlich wurde das Thema auch schon behandelt - suchen danach hat nix gebracht.

Ich hab da einen seltsamen Fall:
Wenn ich ein CL mit x Parameter aufrufe, erhalte ich interaktiv ein richtiges Ergebnis und in der Jobq ein Anderes. Namentlich geht es darum einen Pfad mit einem Dok-Namen zusammenzusetzen um danach einen CpyToImpf durchzuführen.

Kennt jemand diese Macke?

Zum Verständnis, die Parameteraufrufe sind völlig identisch, nur einmal mit Submit und das andere mal ein direkter Call.

Fuerchau
11-02-16, 13:12
Das Problem hatten wir wirklich schon des öfteren.
Stichwort Parameter im CALL-Kommando.
Die Parameter müssen in der Länge übergeben werden, die dein Programm erwartet.
Im Dialog ist das leicht, da gibst du die Werte in Hochkomma an.
Beim SBMJOB übergibst du den CALL, aber deine Parameter mit Sicherheit nicht in Hochkomma.
Dadurch entfernt der Commandprozessor überzählige Leerzeichen und übergibt halt weinger an das Programm.
Im Speicher steht aber halt hinter den Parametern irgendein Schrott den nun dein Programm im Zugriff hat.
Lösung:
Übergib deine Parameter in Hochkomma!
Achtung, beim SBMJOB ist eine Verdopplung erforderlich da der CALL selber ja auch in Hochkomma steht.

Pikachu
11-02-16, 14:48
Wie wärs mit einem selbst erstellten Befehl (CMD), um die Werte durch den SBMJOB in genau der benötigten Länge als Parameter ans CL-Programm weiterzugeben?

Fuerchau
11-02-16, 15:15
ich galube das ist wohl zu einfach.

B.Hauser
11-02-16, 15:40
Command klappt
... genauso wie wenn das CL-Programm, prüft ob es interaktiv aufgerufen wurde.
Beim interaktiven Aufruf macht es nichts anderes als sich selber zu submitten.
Beim Submit werden dann die Parameter als Variablen überegeben.

Birgitta

Fuerchau
11-02-16, 16:48
Und genau das ist ja der Fehler!
Beim "SBMJOB ... CMD(CALL MYPGM PARM(&F1))" wird der Inhalt von &1 an den CMD-Prozessor übergeben und dieser entfernt Leerzeichen am Ende wenn eben keine Hochkomas in der Variablen sind!
Nur wenn der Parameter kürzer als 32 ist wird bis 32 mit Leerzeichen aufgefüllt.
Wem das mit den Hochkommas zu viel ist, der nimmt einfach die Variable 1 Byte länger, setzt an die letzte Stelle ein "X". Der CMD-Prozessor packt das selber in Hochkomma und verdoppelt vorkommende Hochkomma.
Da das empfangende Programm 1 Zeichen weniger erwartet ist das "X" unsichtbar.

camouflage
11-02-16, 17:40
Wem das mit den Hochkommas zu viel ist, der nimmt einfach die Variable 1 Byte länger, setzt an die letzte Stelle ein "X". Der CMD-Prozessor packt das selber in Hochkomma und verdoppelt vorkommende Hochkomma.
Da das empfangende Programm 1 Zeichen weniger erwartet ist das "X" unsichtbar.

Und genau so hab ich's gemacht und funktioniert. Selbst die Doku darüber hab ich nicht vergessen, falls mal einer das nicht gleich schnallt. Danke.