[NEWSboard IBMi Forum]
Seite 1 von 3 1 2 ... Letzte
  1. #1
    Registriert seit
    Sep 2006
    Beiträge
    132

    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.

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    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.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    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 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.
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  4. #4
    Registriert seit
    Sep 2006
    Beiträge
    132
    Zitat 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

  5. #5
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    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 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
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  6. #6
    Registriert seit
    Sep 2006
    Beiträge
    132
    Zitat 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

  7. #7
    Registriert seit
    Sep 2006
    Beiträge
    132
    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?

  8. #8
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    du musst den Programmnamen im Prototyp deklarieren EXTPGM(Name) im Schlüsselwortbereich.


    Zitat 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?
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  9. #9
    Registriert seit
    Sep 2006
    Beiträge
    132
    Zitat 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.

  10. #10
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    den Namen des aufgerufenen Programmes!

    Zitat 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.
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  11. #11
    Registriert seit
    Sep 2006
    Beiträge
    132
    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]

  12. #12
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    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 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
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

Similar Threads

  1. ILE RPG / SQL Füllen einer Feldgruppe
    By homue in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 18-07-07, 16:47
  2. Problem mit Java-Methoden Aufruf aus ILE RPG?
    By Stoeberl in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 10-01-07, 10:58
  3. DDS in ILE RPG
    By Squall in forum IBM i Hauptforum
    Antworten: 82
    Letzter Beitrag: 19-10-06, 15:37
  4. ILE RPG und dynamisches Array
    By Squall in forum NEWSboard Programmierung
    Antworten: 9
    Letzter Beitrag: 10-10-06, 08:53
  5. Rechnen mit Datumsfeldern in ILE RPG
    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
  •