[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Sep 2004
    Beiträge
    16

    Question variable calls im free-format RPG

    Hallo !

    Nachdem im free-format RPG nur mehr der Befehl "callp" verwendet werden kann, suche ich eine Möglichkeit mit callp variable Programme aufzurufen. Im spaltenorientierten RPG war das kein Problem, da ich beim CALL-Befehl eine Variable angeben konnte.

    In meinem konkreten Fall habe ich in einer Steuerungsdatei hinterlegt welche Programme ich unter bestimmten Bedingungen aufrufe. Man kann zwar beim Prototyp unter EXTPGM eine Variable angeben, aber bei callp kann ich dann diese Variable nicht ansprechen, da der Compiler keinen Prototyp dazu findet.

    Hat vieleicht irgendwer Tipps für mich um das im free-format zu realisieren?

    mfg, Opeker

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Da liegt der Hase im Pfeffer !

    CALLP ist im Klartext "CALL PROTOTYPE".

    Ein variables Programm kann ich nicht per Prototyp aufrufen. Da bleibt mir nur dann wieder der klassische CALL mit PARM, natürlich NICHT im Free-Format.
    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
    Hallo,

    Falls es nur darum geht sich den endfree free Zinnober zu ersparen (welcher Hornochse hat nur diesen Compiler geschrieben!!!), dann kann man sich mit einer eigenen Procedure CallMe behelfen, die eine Variable übergeben bekommt und dann einen FixFormat CALL ausführt.

    Falls man die Flexibilität der Parametrisierung für einen CALLP haben will, dann kann man sowas mit Procedure Pointern erreichen. Man hat dann einen Prototyp, der an einen ProcedurePointer gebunden ist, belegt erst den ProcedurePointer variable und macht dann einen Callp auf den feststehenden Prototyp. (Dazu gab es mal einen Artikel im Midrange Magazin von mir.

    Falls man wirklich dynamisch zur Laufzeit gebundene Calls machen will, dann geht auch das; man kann sich den Procedure Pointer per API aus dem Namen ermitteln, dabei wird auch zur Laufzeit erst gebunden. Dazu gibt es was auf meiner OpenSource Seite zum runterladen.

    mfg

    Dieter Bender

    Zitat Zitat von opeker
    Hallo !

    Nachdem im free-format RPG nur mehr der Befehl "callp" verwendet werden kann, suche ich eine Möglichkeit mit callp variable Programme aufzurufen. Im spaltenorientierten RPG war das kein Problem, da ich beim CALL-Befehl eine Variable angeben konnte.

    In meinem konkreten Fall habe ich in einer Steuerungsdatei hinterlegt welche Programme ich unter bestimmten Bedingungen aufrufe. Man kann zwar beim Prototyp unter EXTPGM eine Variable angeben, aber bei callp kann ich dann diese Variable nicht ansprechen, da der Compiler keinen Prototyp dazu findet.

    Hat vieleicht irgendwer Tipps für mich um das im free-format zu realisieren?

    mfg, Opeker
    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
    Aug 2001
    Beiträge
    2.928

    Dynamischer Aufruf von Programmen

    Hallo Leute,

    es ist sehr wohl möglich Programme variabel mit CALLP aufzurufen!

    Dabei wird ein Prototyp mit dem Schlüssel-Wort EXTPGM(Variable) erstellt. Der Prototyp wird ins Programm eingebunden und die Variable mit dem Programm-Namen gefüllt.

    Beispiel:
    PHP-Code:
    D PgmCALL         PR                  ExtPGM(VarPGM)
    D   Parm1                             like(RefFld1)
    D   Parm2                             like(RefFld2)     

    D VarPGM          S             10A 
     
    *------------------------------------------------------
     /
    Free
         VarPGM 
    'MYPGMNAME';
         
    CallP PgmCALL(MyParm1MyParm2);

         
    VarPGM 'MYPGM2';
         
    PgmCall(MyParm1MyParm2);
     /
    End-Free 
    Das ist doch einfacher als ein Programm in eine Prozedur zu verwandeln und dann Prozedur Pointer und API-Aufrufe einzusetzen oder?

    Wie bereits festgestellt heisst CALLP (call with Prototype) und nicht mehr wie ursprünglich call procedure. Die Namensänderung wurde zu dem Zeitpunkt eingeführt als man auch für Programme Prototyping nutzen konnte (Release V4R3 oder so).

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    @Birgitta
    Meine Hochachtung. Wie immer, gewusst wo !
    Funktioniert das auch mit Prozeduren ?
    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

  6. #6
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Zitat Zitat von Fuerchau
    @Birgitta
    Meine Hochachtung. Wie immer, gewusst wo !
    Funktioniert das auch mit Prozeduren ?
    Leider nein!
    Bei Prozeduren muss man mit Procedure Pointern arbeiten.
    PHP-Code:
    D ProcDSIN        PR                  ExtProc(MyProcPtr)  
    D   ParmDSIN                          like(DSIN)     
      
    D MyProcPtr       S               *   ProcPtr   
     
    /Free
        MyProcPtr 
    = %PAddr('MYPROCEDURE');
        
    ProcDSIN(MyDSIN); 
     /
    End-Free 
    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  7. #7
    Registriert seit
    Sep 2004
    Beiträge
    16

    Thumbs up

    Hallo !

    Vielen Dank für die rasche Antwort und die vielen Tipps. Der Tipp von Birgitta war für mich goldrichtig. Ich habe bei meinem Versuch blöderweise (wie beim alten CALL) die Variable aufgerufen und daher hat es nicht funktioniert.

    mfg, Opeker

Similar Threads

  1. Datum-Konvertierung free rpg
    By loeweadolf in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 14-03-08, 06:21
  2. Frei Porn Site!
    By Fucasdreh in forum NEWSboard Server Job
    Antworten: 0
    Letzter Beitrag: 10-01-07, 13:12
  3. timestamp im free format
    By redsky in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 04-05-05, 12:26
  4. FREE RPG .. TESTN
    By loeweadolf in forum NEWSboard Programmierung
    Antworten: 7
    Letzter Beitrag: 25-01-05, 07:43
  5. Free Rpg Zeitdauer errechnen
    By loeweadolf in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 12-07-04, 09:27

Berechtigungen

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