View Full Version : Return ILE RPG
Hallo,
bin ganz neu in ILE RPG und will mir ein ILERPG Programm schreiben das von VARPG 4 Parameter bekommt, aus einer Datei Sätze liest und bearbeitet und eine Datenstruktur zurückgibt.
Ich habe schon im Forum gesucht habe aber noch keine Lösung gefunden, bzw habe ich auch noch ein paar Fragen.
1. Bei der Definitionsbestimmung mit PI kann ich Parameter definieren die das Programm bekommt und zurückgibt?
Woher weiß das Programm welche es bekommt und welche es zurückgeben soll?
2. Ich bekomme die Fehlermeldung das mein Programm keine Parameter zurückgeben kann. Liegt das evtl. an der PI Bestimmung? Oder können nur Prozeduren Parameter zurückgeben? (was mir sinnlos erscheinen würde)
3. Habt ihr vtl ein einfaches Beispiel für mein Problem?
Schonmal Danke im Vorraus.
Zu 1: Parameter "by Reference" (VALUE fehlt) können verändert, also zurückgegeben werden.
zu 2: Stimmt ! Nur Prozeduren können im RETURN genau 1 Parameter zurückgeben. Programme erhalten ihre Parameter IMMER per Reference.
zu 3: erklärt sich aus 1+2 von selbst.
Hallo,
zwei kurze Ergänzung zu 2, Parameter lassen sich mit CONST zur read only reference machen, dann geht da nix zurück.
Der Rückgabeparameter einer Prozedur wird als Typ des Interfaces deklariert (analog zur Variablendeklaration).
mfg
Dieter Bender
Zu 1: Parameter "by Reference" (VALUE fehlt) können verändert, also zurückgegeben werden.
zu 2: Stimmt ! Nur Prozeduren können im RETURN genau 1 Parameter zurückgeben. Programme erhalten ihre Parameter IMMER per Reference.
zu 3: erklärt sich aus 1+2 von selbst.
Zu 1: Parameter "by Reference" (VALUE fehlt) können verändert, also zurückgegeben werden.
zu 2: Stimmt ! Nur Prozeduren können im RETURN genau 1 Parameter zurückgeben. Programme erhalten ihre Parameter IMMER per Reference.
zu 3: erklärt sich aus 1+2 von selbst.
Erstmal vielen Dank für die schnelle Antwort. Ich hätte aber noch eine Verständnisfrage. Ich kann also an ein RPG Programm(ohne Prozeduren (P)) Variablen by Reference übergeben(die dann mit PI aufgefangen werden) und diese werden dann bei einem return(ohne parameter) zurückgegeben?
Bsp. für das Programm wäre dann(gnaz vereinfacht) folgendes:
H ...
H ...
F DATEI1 if e disk
D auffang PI
D Feld1 ...
D Feld2 ...
D Feld3 ...
D Feld4 ...
D key klist
D kfld feld1
D kfld feld2
D kfld feld3
D kfld feld4
C key setll datei1
C key reade datei1
C if not %found(datei1)
C eval feld1 = 'nichts gefunden'
C endif
C return
So müsste es funktionieren oder?
Gruss Martin
Hallo,
genauso ist es, im aufrufenden Programm hast du:
call Karl( Parameterliste)
im aufgerufenen sagst du return , wenn du fertig bist
und in der Parameterliste stehen dann die Werte drin, die die Parameter im aufgerufenen zum Zeitpunkt des return hatten
mfg
Dieter Bender
Erstmal vielen Dank für die schnelle Antwort. Ich hätte aber noch eine Verständnisfrage. Ich kann also an ein RPG Programm(ohne Prozeduren (P)) Variablen by Reference übergeben(die dann mit PI aufgefangen werden) und diese werden dann bei einem return(ohne parameter) zurückgegeben?
Bsp. für das Programm wäre dann(gnaz vereinfacht) folgendes:
H ...
H ...
F DATEI1 if e disk
D auffang PI
D Feld1 ...
D Feld2 ...
D Feld3 ...
D Feld4 ...
D key klist
D kfld feld1
D kfld feld2
D kfld feld3
D kfld feld4
C key setll datei1
C key reade datei1
C if not %found(datei1)
C eval feld1 = 'nichts gefunden'
C endif
C return
So müsste es funktionieren oder?
Gruss Martin
Hallo,
genauso ist es, im aufrufenden Programm hast du:
call Karl( Parameterliste)
im aufgerufenen sagst du return , wenn du fertig bist
und in der Parameterliste stehen dann die Werte drin, die die Parameter im aufgerufenen zum Zeitpunkt des return hatten
mfg
Dieter Bender
Ah vielen Dank. Ich werds gleich ausprobiern. :)
Gruß Martin
Hab noch ein kleines Problem. Und zwar bekomme ich die Fehlermeldung:
*RNF3751 30 a 002200 Externe Prozedur im Prototyp für Hauptprozedur nicht mit aktuellem externem Namen identisch.
Code:
...
DAUFNEHM PR
D PARM1 8A
D PARM2 20A
D PARM3 20A OPTIONS(*VARSIZE)
D PARM4 3A
D PARM5 255A
D PARM6 255A
D PARM7 255A
D PARM8 255A
D PARM9 255A
D PARM10 255A
D PARM11 3A
DAUFNEHM PI
-> FEHLER
D FILD1 8A
D FILD2 20A
D FILD3 20A OPTIONS(*VARSIZE)
D FILD4 3A
D FILD5 255A
D FILD6 255A
D FILD7 255A
D FILD8 255A
D FILD9 255A
D FILD10 255A
D FILD11 3A
Was mache ich falsch?
du musst den Programmnamen im Prototyp deklarieren EXTPGM(Name) im Schlüsselwortbereich.
Hab noch ein kleines Problem. Und zwar bekomme ich die Fehlermeldung:
*RNF3751 30 a 002200 Externe Prozedur im Prototyp für Hauptprozedur nicht mit aktuellem externem Namen identisch.
Code:
...
DAUFNEHM PR
D PARM1 8A
D PARM2 20A
D PARM3 20A OPTIONS(*VARSIZE)
D PARM4 3A
D PARM5 255A
D PARM6 255A
D PARM7 255A
D PARM8 255A
D PARM9 255A
D PARM10 255A
D PARM11 3A
DAUFNEHM PI
-> FEHLER
D FILD1 8A
D FILD2 20A
D FILD3 20A OPTIONS(*VARSIZE)
D FILD4 3A
D FILD5 255A
D FILD6 255A
D FILD7 255A
D FILD8 255A
D FILD9 255A
D FILD10 255A
D FILD11 3A
Was mache ich falsch?
du musst den Programmnamen im Prototyp deklarieren EXTPGM(Name) im Schlüsselwortbereich.
Also den Programmnamen meines VARPG das den CALL auf dieses ILE RPG Programm macht?
Dann bekomme ich bei PI diesen Fehler:
"Prototyp mit nicht definiertem aufgerufenem Programm oder Variable."
Tut mir Leid hatte mit ILERPG nicht viel am Hut bisher. :(
EDIT: Habs gefunden hatte die " ' " vergessen. ;( Konnte das Programm via "14" erstellen. :)
den Namen des aufgerufenen Programmes!
Also den Programmnamen meines VARPG das den CALL auf dieses ILE RPG Programm macht?
Dann bekomme ich bei PI diesen Fehler:
"Prototyp mit nicht definiertem aufgerufenem Programm oder Variable."
Tut mir Leid hatte mit ILERPG nicht viel am Hut bisher. :(
EDIT: Habs gefunden hatte die " ' " vergessen. ;( Konnte das Programm via "14" erstellen. :)