PDA

View Full Version : leidiges Thema RUNRMTCMD



schlufti
19-04-11, 16:12
Hi, ich komme einfach nicht mehr weiter.

Ich habe ein RPG, rufe ein CL auf, das macht ein SBMJOB auf ein weiteres CL, das einen RUNRMTCMD durchführt.

Dieser bleibt immer auf TIMW stehen, eine Meldung ist nirgendwo sichtbar, weder auf der iSeries, noch auf dem Windows Server.

Mache ich keinen SBMJOB sondern ein CALL auf das 2te CL, funktioniert alles. Egal, ob das RPG interaktiv oder per SBMJOB gebatched wurde. Bau ich das in den JOBSCDE ein, gehts wiederum nicht.

Alles ist im Grunde eine Kopie eines gleichen Ablaufs mit einem anderem Server. Hier klappt alles auch im Batch.

Der User/pwd ist lokaler Admin angelegt. R5V4 + CA ist installiert..

bin frustriert

schlufti
20-04-11, 14:31
hmmm, hab heute noch mal getestet. Habe vor dem RUNRMTCMD mal eine Nachricht mit der zusammengesetzten Befehlsvariable an mich selber geschickt...und siehe da. Interaktiv alles i. O., Batch haut mir irgendwelche Daten in die Variable.

Wie gesagt, nur die Aufrufart geändert, Programm ist das gleiche. Das empfängt Ordner und Berichtsname als Parameter für eine variable Aktualisierung von Daten und der Standardpfad + Variablen geben den Befehl. Das ist das Ergebnis Interaktiv vs. Batch.

Kennt jemand das Problem? Dieses RUNRMTECP ist übrigens der Programmname. komisch.


Von . . . . : xxx 20.04.11 15:14:05
C:\Programme\pfad\pfad\pfad\bin\programm.exe
"C:\pfad\pfad\Exportberichte\1.1. Fertigung\1.1.-0011
Freigabemenge Auftrag.xxx" /r /b /o /xa /u=user /pwd=kennwort

Von . . . . : xxx 20.04.11 15:16:29
C:\Programme\pfad\pfad\pfad\bin\programm.exe
"C:\pfad\pfad\Exportberichte\1.1. Fertigung
1.1.-0011 Fr\1.1.-0011 Freigabemenge Auftrag.xxx
MØcoRUNRMTECPnA" /r /b /o /xa /u=user
/pwd=kennwort

MR-BN
20-04-11, 14:45
Das Problem könnte in der Tatsache liegen, das Parameter im ONLINE anders gehandt habt werden als im BATCH.
Dieses Problem löse ich dadurch, das ich auf der letzten Stelle der Parameter einen Stern setze, den das auszuführende CL wieder entfernt. Dann wird der Parameter in der Orginallänge an BATCH weitergegeben.

Fuerchau
20-04-11, 14:56
Wieder mal das übliche Problem von Parametern im CALL-Statement.

Rufst du im CLP per CALL ein anderes Programm übergibst du ja meist Variablen oder Konstanten in der korrekten Länge.

Machst du aber einen SBMJOB mit einem CALL-CMD, kürzt der CMD-Interpreter Leerzeichen am Ende weg, wenn der Wert nicht in Hochkomma steht.
Es erfolgt ggf. sogar eine Umsetzung ein Großbuchstaben.

Du kannst den Trick von MR-BN erweitern.
Da Werte an ein Programm immer per Referenz übergeben werden, kannst du natürlich das Übergabe-Feld auch um 1 Stelle größer definieren als das Zielprogramm benötigt.
Stelle dann ein beliebiges Zeichen an die überzählige Stelle.
Der CMD-Interpreter baut dann den SBMJOB korrekt zusammen und dein Programm erhälte den vollständigen Wert ohne das zusätzliche Zeichen.

Ansonsten:
Es gibt keine unterschiedliche Behandlung von Parametern im CALL zwischen Batch und Online.
Die Regeln dafür sind immer gleich:

Aus
call mypgm parm(xxxx)
wird
CALL MYPGM PARM(XXXX)
Wobei XXXX als 32-stelliges Feld übergeben wird.

Aus
call mypgm parm('xxxx')
wird
CALL MYPGM PARM('xxxx')
Jetzt wird 'xxxx' als 4-stelliges Feld übergeben.

Pikachu
20-04-11, 15:10
CL Programming - Using the CALL Command (http://publib.boulder.ibm.com/infocenter/iadthelp/v7r0/topic/com.ibm.etools.iseries.pgmgd.doc/evfclmst80.htm)

schlufti
20-04-11, 16:03
vielen Dank, hatte den Fall einfach noch nicht, obwohl schon seit fast 20 Jahren dabei.

Hab mal die elegante Variante gewählt mit einer verkürzten Empfängervariable und läuft. Werd das aber wieder abändern, weil mir vielleich sonst noch ein Kollege irgendwann feststellt...unterschiedlich definiert, berichtige ich usw.

Allerdings verhält sich CALL und SBM CALL wirklich anders. Im Call war alles sauber, das abschneiden erfolgte nur beim SBM.

Ansonsten noch vielen Dank.

Pikachu
20-04-11, 16:23
Was auch noch geht ist ein SBMJOB auf einen selbst erstellten Befehl, welcher das gewünschte CL-Programm als Befehlsverarbeitungsprogramm hat. Dann kommen die Parameter genau so wie im eigenen Befehl definiert an das CL-Programm.

Fuerchau
20-04-11, 16:35
Dann rufe mal CALL über die Kommandozeile und nicht per Programm auf.
CALL über Kommandozeile verhält sich wie CALL im SBMJOB.

CALL im CLP wird ja definiert aufgerufen und zur Compilezeit festgelegt und verhält sich da scheinbar anders, insbesonders wenn Variablen verwendet werden.

Und was das Abändern angeht musst du das nur richtig dokumentieren.