PDA

View Full Version : Parameterübergabe an ei RPG-Programm



dino
13-08-10, 12:46
Ich rufe per CL ein RPG-Programm mit 15 Parametern auf. Alles OK soweit.
Rufe ich das Programm über die Befehlszeile (ohne Parameter) auf, gibts einen Stop.
Ich möchte aber das Programm flexibel gestalten: Parametereingabe möglich oder auch nicht.

Pikachu
13-08-10, 13:04
Wie sieht denn der Stop aus? Gibt's 'ne Verwarnung (Meldung) oder sowas? OPM oder ILE? Du könntest die Anzahl der übergebenen Parameter abfragen (mittels SDS *PARMS) oder einen Befehl zum Aufrufen des Programms schreiben, der für alle Parameter Standardwerte mitgibt.

kuempi von stein
13-08-10, 13:05
Hallo,

ohne nun die genaue Umgebung und sämtliche Anforderungen zu kennen....

würde ich es über 2 "Zwischenprogramme" lösen denke ich. (Meinetwegen als CL)
Eins wird mit Parameter aufgerufen, eins ohne.
Beide rufen dann das RPG mit Parameter auf.

Just my 2 cent

k.

B.Hauser
13-08-10, 13:09
1. RPG-Programm mit Prototyp und Procedure Interface. Alle Parameter werden mit Options(*NOPASS) definiert.
Die Built-In-Funktion %PARMS bringt die Anzahl der übergebenen Parameter mit. Nicht übergebene Parameter dürfen im Programm nicht angesprochen werden (Fehler MCH3601).

2. Bei Verwendung einer *ENTRY-PList, die Anzahl der Parameter über die Programm-Status-Datenstruktur prüfen Position 37 - 39 im Format 3S 0. Auch hier gilt nicht übergebene Parameter dürfen nicht angesprochen werden.

Du wolltest doch das RPG Programm direkt aufrufen?

Ansonsten würde ich vorschlagen, mach einen Befehl mit den 15 Parametern, die entweder gefüllt oder mit Default-Werten an das CL übergeben werden. Anstatt des CL-Programms, rufst Du den Befehl auf.

Birgitta

dino
16-08-10, 12:32
Danke für die Tipps.
Habe einfach ein 2. CL geschrieben: CL 1 übergibt gefüllte Parameterwerte, CL 2 übergibt Dummy-Parameterwerte.
Das ist die einfacheste und sauberste Variante

cbe
18-08-10, 09:20
Habe einfach ein 2. CL geschrieben: CL 1 übergibt gefüllte Parameterwerte, CL 2 übergibt Dummy-Parameterwerte.

... ist auch geschickt bezüglich Erweiterbarkeit. Stell Dir vor, Du rufst dieses Programm von 100 Stellen aus auf, und willst nun 1 Parameter zufügen, der nur in einem Spezialfall nötig ist.
Dann kannst Du den Parameter im RPG zufügen und brauchst nur noch die paar aufrufenden CLs ändern, und natürlich ein neues CL für diesen Spezialfall schreiben. Die 100 sonstigen Stellen bleiben unverändert.



... oder einen Befehl zum Aufrufen des Programms schreiben, der für alle Parameter Standardwerte mitgibt.
CMDs sind in CL sehr flexibel, aber ich finde sie aus RPG recht lästig aufzurufen.

Aber vielleicht kann man auch beide Techniken kombinieren?
Die 100 Anwendungsprogramme rufen eine Hand voll CL-Programme auf,
und die verwenden 1 CMD, welches das RPG aufruft.


Auf jeden Fall war ich schon so manches Mal froh, eine CL-Zwischenebene zu haben, hat mir einiges an Ändern+Testen erspart.

Gruß, Christian

andreaspr@aon.at
18-08-10, 09:55
... ist auch geschickt bezüglich Erweiterbarkeit. Stell Dir vor, Du rufst dieses Programm von 100 Stellen aus auf, und willst nun 1 Parameter zufügen, der nur in einem Spezialfall nötig ist.
Dann kannst Du den Parameter im RPG zufügen und brauchst nur noch die paar aufrufenden CLs ändern, und natürlich ein neues CL für diesen Spezialfall schreiben. Die 100 sonstigen Stellen bleiben unverändert.

Deshalb wäre die schönste und nachhaltigste Lösung die, die Birgitta schon beschrieben hat.
Du definierst EIN mal den Prototyp und die Sache hat sich. Du willst irgendwann einen oder mehrere Parameter zusätzlich, dann erweiterst du den Prototyp einfach um die Felder (mit *NOPASS) und das wars. Und du brauchst keine neue CLs.

Die Version mit den CLs, kann man zwar auch machen, ist aber wie man so schön sagt quick-and-dirty.