[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Registriert seit
    May 2004
    Beiträge
    444

    Aufrufendes Programm ermitteln

    Hallo zusammen,

    kann ich in einem RPG-Programm feststellen von welchem Programm es aufgerufen wurde ?

    Viele Grüße Harald

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Ja, per API.
    Suche mal im Forum hier nach "Call Stack".
    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
    May 2004
    Beiträge
    444
    ohne API geht dann wohl nicht ? Die darf ich mal wieder nicht benutzen.

  4. #4
    Registriert seit
    Aug 2001
    Beiträge
    2.869
    Wenn es nur um Programme geht, geht das ganz einfach auch ohne API mit einem kleinen CL-Programm:

    Code:
                 PGM        PARM(&ParCALLER   &ParCALLED)                
     
                 DCL        VAR(&ParCALLER) TYPE(*CHAR) LEN(10)             
                 DCL        VAR(&ParCALLED) TYPE(*CHAR) LEN(10)             
                                                                           
                 DCL        VAR(&MSGKEY)   TYPE(*CHAR) LEN(4)              
                 DCL        VAR(&SENDER)   TYPE(*CHAR) LEN(80)             
                                                                           
                 SNDPGMMSG  MSG('TEST') TOPGMQ(*PRV (&ParCALLED)) +         
                            MSGTYPE(*RQS) KEYVAR(&MSGKEY)                
                                                                           
                 RCVMSG     PGMQ(*PRV (&ParCALLED)) MSGKEY(&MSGKEY) +       
                            SENDER(&SENDER)                              
                                                                           
                 CHGVAR     VAR(&ParCALLER) VALUE(%SST(&SENDER 56 10))
    ENDE:        ENDPGM
    In Parameter 2: ParCalled wird der Name des aktuellen RPG-Programms übergeben.
    In Parameter 1: ParCaller wird das rufende Programm zurückgegeben.

    Birgitta
    Birgitta Hauser

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

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    *PRV ist allerdings das Programm, dass das CLP aufruft.
    Bei ILE sind auch noch einige Ebenen dazwischen.
    SNDPGMMSG unerstützt keine "relative" Adressierung, wenn man nicht *PRV nehmen kann, muss man leider genau die Programm/Prozedurnamen kennen sonst schlägt der Befehl fehl.

    Alternativ wäre allerdings ein "Wrapper":
    - Originärer Programmname als CLP mit den Aufrufparametern
    - obigen SNDPGMMSG ausführen
    - das Ergebnis als zusätzlichen Parameter an das eigentliche Programm (neuer Name) durchreichen
    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.869
    *PRV geht eine Stufe zurück. Deshalb habe ich auch gesagt, solange nur Programme verwendet werden. Werden natürlich zwischenzeitlich Prozeduren aufgerufen oder das Programm aus einer Prozedur aufgerufen, klappt das nicht.

    Ich gehen in diesem Fall jedoch davon aus, dass nur Programme aufgerufen werden.

    Birgitta
    Birgitta Hauser

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

  7. #7
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    *PRV liefert das aufrufende Programm:
    CALL PGMA
    CALL PGMB
    Der Call des CLP's aus PGMB kann nur PGMB und nicht PGMA liefern.
    Deshalb der "Wrapper".
    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

  8. #8
    Registriert seit
    Mar 2002
    Beiträge
    5.286
    Zitat Zitat von harkne Beitrag anzeigen
    ohne API geht dann wohl nicht ? Die darf ich mal wieder nicht benutzen.
    ... naja, da gibt es auch noch die Huddel-Variante mit DSPJOB OPTION(*PGMSTK) output(*print), oder einen Tick eleganter gehuddelt über QSH...

    D*B
    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
    Aug 2001
    Beiträge
    2.644
    Zitat Zitat von harkne Beitrag anzeigen
    ohne API geht dann wohl nicht ? Die darf ich mal wieder nicht benutzen.
    Gibt es denn eine gute Begründung, warum auf einer API-Maschine wie der AS400 keine APIs benutzt werden dürfen?

    -h
    www.RZKH.de
    IBM Champion 2022, 2023, 2024
    IBM i Community Advocate https://www.youracclaim.com/badges/6...c-7ad4ba147af6
    Common / CEAC
    http://pub400.com

  10. #10
    Registriert seit
    Mar 2002
    Beiträge
    5.286
    Zitat Zitat von holgerscherer Beitrag anzeigen
    Gibt es denn eine gute Begründung, warum auf einer API-Maschine wie der AS400 keine APIs benutzt werden dürfen?

    -h
    ... die Begründung hat meist sogar einen Namen und ich sehe schon wieder Gesichter vor mir...
    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
    Aug 2001
    Beiträge
    2.869
    Gibt es denn eine gute Begründung, warum auf einer API-Maschine wie der AS400 keine APIs benutzt werden dürfen?
    Ganz einfach:
    Es darf nur das verwendet werden, was die anderen auch verstehen.
    System-APIs gehören (oft) nicht dazu, weil zu kompliziert !!!
    ... Komplexe Datenstrukturen, Binary Datentypen, Pointer, User Spaces etc.!

    Birgitta
    Birgitta Hauser

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

  12. #12
    Registriert seit
    Aug 2001
    Beiträge
    2.869
    Zitat Zitat von Fuerchau Beitrag anzeigen
    *PRV liefert das aufrufende Programm:
    CALL PGMA
    CALL PGMB
    Der Call des CLP's aus PGMB kann nur PGMB und nicht PGMA liefern.
    Deshalb der "Wrapper".
    Versuch doch einfach das kleine CL-Programm aufzurufen, und zwar so wie ich beschrieben habe, d.h. Du übergibst den Namen des RPG-Programms als PARCALLED und als PARCALLER bekommst Du das Programm zurück das das RPG-Programm aufgerufen hat.

    Auf diese Weise kann man sogar durch den CALL-Stack hangeln, d.h. das im ParCALLED Parameter zurückgegebene Programm wird beim nächsten Aufruf als PARCALLER übergeben usw. bis der Anfang des Callstacks erreicht ist.

    Ich hatte das Programm (bevor es das API gab -also vor Release V5R1) jahrelang im Einsatz, schon in den alten RPGIII-Zeiten und auch noch in den frühen RPGIV-Zeiten.
    Das Teil habe ich sogar dazu verwendet um das Programm zu ermittelt, das einen Trigger aktiviert hat.

    Birgitta
    Birgitta Hauser

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

Similar Threads

  1. IBM i Partitions-Nr. via Programm ermitteln
    By B.Hauser in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 16-01-15, 16:20
  2. Zeitdauer ermitteln in RPG
    By sepp in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 09-07-02, 17:09
  3. Größe des IFS, wie ermitteln?
    By Spirou in forum IBM i Hauptforum
    Antworten: 6
    Letzter Beitrag: 17-04-02, 10:54
  4. Subsystembeschreibung ermitteln
    By Sven Schneider in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 03-12-01, 22:17
  5. Satzlänge in CL ermitteln
    By kschmidt in forum IBM i Hauptforum
    Antworten: 5
    Letzter Beitrag: 19-06-01, 18:35

Berechtigungen

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