-
Aufrufendes Programm ermitteln
Hallo zusammen,
kann ich in einem RPG-Programm feststellen von welchem Programm es aufgerufen wurde ?
Viele Grüße Harald
-
Ja, per API.
Suche mal im Forum hier nach "Call Stack".
-
ohne API geht dann wohl nicht ? Die darf ich mal wieder nicht benutzen.
-
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
-
*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
-
*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
-
*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".
-
Zitat von harkne
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
-
Zitat von harkne
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
-
Zitat von holgerscherer
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...
-
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
-
Zitat von Fuerchau
*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
Similar Threads
-
By B.Hauser in forum NEWSboard Programmierung
Antworten: 4
Letzter Beitrag: 16-01-15, 15:20
-
By sepp in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 09-07-02, 16:09
-
By Spirou in forum IBM i Hauptforum
Antworten: 6
Letzter Beitrag: 17-04-02, 09:54
-
By Sven Schneider in forum IBM i Hauptforum
Antworten: 1
Letzter Beitrag: 03-12-01, 21:17
-
By kschmidt in forum IBM i Hauptforum
Antworten: 5
Letzter Beitrag: 19-06-01, 17:35
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