PDA

View Full Version : Parameter bei SBMRMTCMD



hoersterp
25-11-09, 13:56
Hallo,

ich rufe von unserer Verwaltungsmaschine ein Programm via SBMRMTCMD auf unserer Lagermaschine auf.
Dies Programm enthält Parameter und soll dann wieder mit SBMRMTCMD ein Programm mit Parametern auf unserer Verwaltungsmaschine aufrufen.
Also das remote Programm ruft ein weiteres remotes Programm auf, was maschinenmäßig zurückverzweigt.
Das funktioniert leider nicht.
Ich habe immer Probleme mit der Parameterübergabe.
Wenn ich die aus dem RPG heraus in Hochkommas setze (Aufruf erfolgt via QCMDEXC), wie beim anderen Aufruf, wird der Befehl nicht abgesetzt.
Ich weiß aber, daß ich anstelle des CALLs einen SNDMSG-Befehl absetzen kann.
Das wiederum funktioniert. Aber der CALL-Befehl wird nicht abesetzt.
Was kann ich tun? Liegt es an den Parametern?

Fuerchau
25-11-09, 14:07
Wenn du mal genau hinschaust, siehst du, dass der abzusetzende Befehl in Hochkomma abgegeben wird.
Parameter müssen für den Call aber auch in Hochkomma gestellt werden, damit diese aber nicht verloren gehen bzw. es zu einem Syntaxfehler kommt, sind die Hochkomma zu verdoppeln!

SBMRMTCMD CMD('CALL MYPGM PARM(''P1'' ''P2'')')

Enthalten deine Parameter allerdings auch Hochkomma, sind diese dann zu vervierfachen:

SBMRMTCMD CMD('CALL MYPGM PARM(''P''''1'' ''P''''2'')')

hoersterp
01-12-09, 13:04
Halli, hallo,

sorry das ich das Problem erst jetzt weiter verfolge, hier war zwischenzeitlich zuviel los.

Das mit den Hochkommas war mir klar, der erste Aufruf via SBMRMTCMD mit CALL und Parametern funktioniert auch reibungslos. Aber der zweite Aufruf dann nicht mehr:

Also -> In Schritt 1 wird auf Maschine 1 ein SBMRMTCMD auf Maschine 2 ausgeführt:
SBMRMTCMD CMD('CALL PGM1 parm(''''xxx'''' ''''yyy'''' ''''zzz'''')') DDMFILE(AAA)

Danach soll in Schritt 2 von dem Programm PGM1 ein zweiter SBMRMTCMD ausgeführt werden, der wieder auf Maschine 1 zurückkehrt, und hier klappt die Parameterübergabe leider nicht mehr so mit den Hochkommas. Ein einfacher Befehl wie SNDMSG wird aber ausgeführt, was mir zeigt, daß man durchaus den Weg zurück wieder gehen kann.

Hat jemand noch eine Idee? Ich denke, es kann nur an den Parametern mit den Hochkommas liegen, oder?

Fuerchau
01-12-09, 13:36
Stimmt genau.
Bevor du den SBMRMTCMD absetzt, schreib den Befehl doch mal ins Joblog (SNDPGMMSG) und mach einen DSPJOBLOG (damit du auch einen Spool hast).
Dann kannst du die Hochkomma mal zählen und sehen, wo der Fehler denn liegt.

Fuerchau
01-12-09, 13:40
So nebenbei bemerkt:
Warum machst du das so kompliziert ?
Einfacher wäre doch eine SQL-Procedure, die du auf dem Zielsystem mit Übergabe- und Returnparametern aufrufst.
Vorteil:
Direkte Kontrolle über das Ergebnis und keine JOBQ-Wartezeiten.

Per WRKRDBDIRE die Ziel-AS eintragen, per CONNECT mit dem Ziel verbinden und die Prozedur per CALL einfach aufrufen.

hoersterp
02-12-09, 09:56
Aha, das wäre wohl auch ein Weg, allerdings bin ich mit SQL nicht so bewandert.
Habe das Ganze jetzt via DUMP angesehen und meinen Fehler auch gefunden.
Der Aufruf im zweiten Programm ist natürlich in der Aufbereitung mit dem ersten identisch.
Mein Fehler lag bei der Definition der Variablen, die den Befehl beinhaltet.
Die hatte ich verlängert, aber beim QCMDEXC die Befehlslänge nicht länger mitgegeben.
Kleiner Fehler, große Wirkung.
Da muss man erst drauf kommen, sowas übersieht man zu leicht.
Vielen Dank für die Unterstützung.