[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    May 2005
    Beiträge
    103

    Call aus RPGIV Freiformat in RPG400

    Hallo zusammen,

    wir programmieren seit ca. einem Monat mit RPGIV.

    Nun haben wir allerdings etliche Sub-Programme, die in RPG400 geschrieben sind. Da wir von Beginn an im Freiformat programmieren, stehen wir nun immer wieder vor dem Problem die alten Sub-Programme aufrufen zu wollen, denn wir möchten ja nicht jedesmal das Rad neu erfinden.
    Hierzu beenden wir also jedesmal den Free-Code mit /End-Free, rufen per konventionellem CALL mit PLIST das Programm auf und programmieren anschließend mit /Free weiter.

    Ist dies die allgemein übliche Art oder wie macht ihr das ??

    Angenommen, wir konvertieren sukzessive die alten Programme mittels CVTRPGSRC und erstellen für die für das Prototyping benötigten PR- und PI-Definitionen ... würden dann die alten Programme, die die Sub-Programme per CALL aufrufen weiterhin funktionieren ??

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Hierfür bietet sich die Prototyp-Definition an.
    Der Vorteil ist, dass man bestimmte Parameter dann als "VALUE" definieren kann, so dass die komplizierten Ver- und Entsorgungen von Übergabestrukturen entfallen kann.

    Aufgerufen wird das Ganze dann per

    callp MyExtPgm(P1: P2: ...);

    wobei Value-Parameter dann automatisch in Hilfsfelder kopiert und ggf. konvertiert werden.
    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.365
    - value geht mit dynamischem Aufruf (CALL) nicht, da hierbei Parameter immer by Reference übergeben werden.
    - das callp darf man im Freeformat auch weglassen
    - zur Verdeutlichung: an den aufgerufenen Programmen wird nix geändert, es wird lediglich im aufrufenden ein Prototyp statt der Keylist benötigt.

    D*B

    Zitat Zitat von Fuerchau Beitrag anzeigen
    Hierfür bietet sich die Prototyp-Definition an.
    Der Vorteil ist, dass man bestimmte Parameter dann als "VALUE" definieren kann, so dass die komplizierten Ver- und Entsorgungen von Übergabestrukturen entfallen kann.

    Aufgerufen wird das Ganze dann per

    callp MyExtPgm(P1: P2: ...);

    wobei Value-Parameter dann automatisch in Hilfsfelder kopiert und ggf. konvertiert werden.
    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
    May 2005
    Beiträge
    103
    Hallo Fuerchau und BenderD,

    vielen Dank für die Antworten.

    Dass die aufgerufenen Programme weiterhin funktionieren ist das Wichtigste !!! Habe ich eben auch mal kurz getestet - Danke !!

    Was ich noch nicht so ganz verstanden habe ist die Sache mit dem Value Fuerchau.

    Meintest du anstatt
    Firma = 1 / immer 1 im Format 3S0
    callp PGMName (Firma : TNr);

    dann nur noch
    callp PGMName (1 : TNr);

    so dass ich mir die fixen Feldfüllungen sparen kann??

  5. #5
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    value (keyword beim Parameter in PR und PI) geht nur bei Procedure Aufrufen.
    bei Programmen (was du hier brauchst) geht nur CONST und das auch nur, wenn da nix geändert zurück kommt.
    In beiden Fällen kann man Literale und Ausdrücke als Parameter verwenden, der Compiler prüft dann Typ Verträglichkeit beim Aufruf gegen den Prototyp und konvertiert implizit.

    D*B

    Zitat Zitat von Tobse77 Beitrag anzeigen

    Meintest du anstatt
    Firma = 1 / immer 1 im Format 3S0
    callp PGMName (Firma : TNr);

    dann nur noch
    callp PGMName (1 : TNr);

    so dass ich mir die fixen Feldfüllungen sparen kann??
    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
    May 2005
    Beiträge
    103
    OK, Verstanden !!
    Beim Aufruf von RPG400-Programmen muss mit Variablen als Parameter gearbeitet werden - sonst meckert auch der Compiler - da im aufgerufenen Programm die übergebenen Parameter jederzeit geändert werden können, da aufgrund fehlender PR-Definition nicht prüfbar für den Compiler.

    Dankeschön !!

  7. #7
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    Hallo,

    wenn die Variablen im aufgerufenen Programm nicht geändert werden, kann man im Prototyp bei selbigen das Schlüsselwort CONST ablochen, dann gehen auch hier Literale und Ausdrücke.

    mfg

    Dieter Bender

    PS: Literale sind kein guter Programmierstil, da sollte man in ordentlichen Programmiersprachen Konstanten verwenden und in RPG Variablen mit festbelegtem Wert.

    Zitat Zitat von Tobse77 Beitrag anzeigen
    OK, Verstanden !!
    Beim Aufruf von RPG400-Programmen muss mit Variablen als Parameter gearbeitet werden - sonst meckert auch der Compiler - da im aufgerufenen Programm die übergebenen Parameter jederzeit geändert werden können, da aufgrund fehlender PR-Definition nicht prüfbar für den Compiler.

    Dankeschön !!
    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. Call in einem Ile-RPG
    By dino in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 17-01-07, 09:23
  2. "remote" - call
    By hh-mi in forum IBM i Hauptforum
    Antworten: 5
    Letzter Beitrag: 15-11-06, 12:23
  3. CALL PGM schlägt fehl
    By alexander may in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 18-05-06, 20:16
  4. rekursiver Call
    By Marimari1009 in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 03-05-06, 17:30
  5. RPGII, RPGIII, RPG400, RPGIV, ILE Was ist was?
    By Schnichels in forum IBM i Hauptforum
    Antworten: 12
    Letzter Beitrag: 27-05-04, 21:29

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •