-
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
Zitat von Fuerchau
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.
-
Zitat von Fuerchau
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
Zitat von Squall
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
-
Zitat von BenderD
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:
...
PHP-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.
Zitat von Squall
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:
...
PHP-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?
-
Zitat von BenderD
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!
Zitat von Squall
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.
-
Ok danke.
So habe das Programm erstellt. Wollte es nun über "CALL" aus VARPG aufrufen.
Musst mir vorher noch einen Constante definieren da ich LINKAGE(*SERVER) angeben musste.
PHP-Code:
Dtestlangua C const('testlangua') linkage(*server)
Testlangua heißt das programm und Testlangua steht auch bei extpgm im Porgramm.
Habe mir in VARPG dann noch eine PLIST definiert um die werte zu übergeben und zurückbekommen.
Ich rufe dann das Programm mittels:
PHP-Code:
C call testlangua parml
auf und bekomme aber diese Fehlermeldung:
0202 Der Aufruf an testlangua wurde fehlerhaft beendet.
Ursache . . . . : Ist der Name *N, handelte es sich bei dem Aufruf
um einen Bindeaufruf nach Prozedurzeiger.
Fehlerbeseitigung: Die Fehlerprotokolldatei FVDCERRS.LOG auf weitere
Informationen über die Fehlerursache prüfen.
Im Logfile steht:
Testsubf.EXE Fri Sep 8 13:12:19 2006 ** Error logging begins **
Testsubf.EXE Fri Sep 8 13:12:19 2006 MCH3401 Auflösung zu Objekt testlangua nicht möglich. Art und Subart X'0201', Berechtigung X'0000'.
Testsubf.EXE Fri Sep 8 13:12:29 2006 *** Error logging ends ***
Hat jm eine Idee was diesen Fehler verursacht hat?
Gruß Martin
[EDIT]
Hab das Problem mittlerweile gelöst.
[/EDIT]
-
Wenn ich da nochmal hinsehe,
da steht was von Berechtigungsfehler, da solltest du das Programm mal mit ausreichender Public Berechtigung versehen
mfg
Dieter Bender
PS: wobei ich zu dem VARPG Kram nix sagen kann, was der da treibt
Zitat von Squall
Ok danke.
So habe das Programm erstellt. Wollte es nun über "CALL" aus VARPG aufrufen.
Musst mir vorher noch einen Constante definieren da ich LINKAGE(*SERVER) angeben musste.
PHP-Code:
Dtestlangua C const('testlangua') linkage(*server)
Testlangua heißt das programm und Testlangua steht auch bei extpgm im Porgramm.
Habe mir in VARPG dann noch eine PLIST definiert um die werte zu übergeben und zurückbekommen.
Ich rufe dann das Programm mittels:
PHP-Code:
C call testlangua parml
auf und bekomme aber diese Fehlermeldung:
0202 Der Aufruf an testlangua wurde fehlerhaft beendet.
Ursache . . . . : Ist der Name *N, handelte es sich bei dem Aufruf
um einen Bindeaufruf nach Prozedurzeiger.
Fehlerbeseitigung: Die Fehlerprotokolldatei FVDCERRS.LOG auf weitere
Informationen über die Fehlerursache prüfen.
Im Logfile steht:
Testsubf.EXE Fri Sep 8 13:12:19 2006 ** Error logging begins **
Testsubf.EXE Fri Sep 8 13:12:19 2006 MCH3401 Auflösung zu Objekt testlangua nicht möglich. Art und Subart X'0201', Berechtigung X'0000'.
Testsubf.EXE Fri Sep 8 13:12:29 2006 *** Error logging ends ***
Hat jm eine Idee was diesen Fehler verursacht hat?
Gruß Martin
Similar Threads
-
By homue in forum NEWSboard Programmierung
Antworten: 5
Letzter Beitrag: 18-07-07, 16:47
-
By Stoeberl in forum NEWSboard Programmierung
Antworten: 8
Letzter Beitrag: 10-01-07, 10:58
-
By Squall in forum IBM i Hauptforum
Antworten: 82
Letzter Beitrag: 19-10-06, 15:37
-
By Squall in forum NEWSboard Programmierung
Antworten: 9
Letzter Beitrag: 10-10-06, 08:53
-
By Angela in forum IBM i Hauptforum
Antworten: 4
Letzter Beitrag: 22-08-06, 10:11
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks