-
rekursiver Call
Hallo, *all
um einen rekursiven Call zu vermeiden benötige ich den Namen des Programms, das das aktuelle Programm aufgerufen hat.
Die SDS Definition verspricht da nicht sehr viel.
Wer kann helfen?
Danke im Voraus
K. Hardy
-
Hierfür gibts leider nur ein API für den Call-Stack.
Allerdings löst das nicht dein Problem, da das aktuelle Programm von einem Rekursiv-Call gar nichts mitbekommt.
Das aufrufende Programm erhält eine Abbruch-Nachricht, dass ein rekursiver Call nicht erlaubt ist !
-
Hatte ich beinahe befürchtet, daß es nur über API geht.
Dann werde ich das wohl so machen müssen.
Ich gehe davon aus, daß dieseS API hier im Forum an anderer Stelle bereits beschrieben ist (?).
Das Problem ist dann glücklicherweise sehr wohl gelöst; es handelt sich hier nämlich um eine Dialog-Anwendung. Deshalb kann ich sehr elegant den Call verhindern/verbieten (F-Taste sperren etc.)
Sehr herzlichen Dank für Mühe
Klaus Hardy
-
Tja, das sehe ich da nicht ganz so.
Ein rekursiver Call gilt auch dann, wenn irgendwann das selbe Programm nochmal aufgerufen wird:
PGM A
PGM B
PGM C
PGM D
PGM B <= Fehler an PGM D
Ich würde einen Call einfach mit BZ (RPG) bzw. Monitor (RPGLE) abfangen.
Im Status der SDS steht Fehler 202, gib dann einfach eine Meldung aus.
-
Moin moin,
ich hatte mal nen Fall, da dachte ich anfangs, ich brauche so einen "rekursiven" Call trotzdem.
(Da konnte man zwischen zwei Proggis hin un her schalten per F-Taste)
Hatte das dann mit nem vorgeschalteten CL gelöst und nen zusätzlichen Parameter mitgeschliffen um das dann zu ermöglichen.
Mit ein wenig Frickelei kann man das so hinbekommen.
In der Praxis wars dann aber gar nicht notwendig, weshalb ich das dann eh wieder rausgenommen hatte.
have fun
kuempi
-
Es gibt Anwendungen, die das dann ganz elegant lösen:
Bei einem Fehlerhaften CALL und Status 202 wird per CLP das aufzurufende Programm einfach mit einer Laufnummer dupliziert und dann die Kopie aufgerufen.
Dies geht natürlich nur mit "CALL VARIABLE".
-
Wenn es nur darum geht das rufende Programm zu ermitteln, sind 2 CL-Befehle ausreichend.
Beispiel:
PHP-Code:
PGM PARM(&CALLER +
&CALLED)
/* ---------------------------------------------------------------*/
DCL VAR(&CALLER) TYPE(*CHAR) LEN(10)
DCL VAR(&CALLED) TYPE(*CHAR) LEN(10)
DCL VAR(&MSGKEY) TYPE(*CHAR) LEN(4)
DCL VAR(&SENDER) TYPE(*CHAR) LEN(80)
/* ---------------------------------------------------------------*/
SNDPGMMSG MSG('TEST') +
TOPGMQ(*PRV (&CALLED)) +
MSGTYPE(*RQS) +
KEYVAR(&MSGKEY)
RCVMSG PGMQ(*PRV (&CALLED)) +
MSGKEY(&MSGKEY) +
SENDER(&SENDER)
CHGVAR VAR(&CALLER) VALUE(%SST(&SENDER 56 10))
ENDE: ENDPGM
Bei CALLED übergibst Du das aktuelle Programm und in CALLER bekommst Du das rufende Programm zurück.
Jetzt brauchst Du nur noch eine Schleife darum zu bauen, und jeweils immer den CALLER als CALLED übergeben, solange, bis Du entweder Dein Programm findest (Rekursiver Aufruf) oder bis Du am Anfang des CALL-Stack bist.
Ansonsten ist es auch möglich RPGIV-Programme rekursiv aufzurufen. Sie benötigen lediglich Aktivierungsgruppe *NEW.
Birgitta
-
Vielen Dank an alle,
ich habe mich entschieden, in meinem Fall das (geniale) CL von Birgitta zu verwenden (Einverständnis vorausgesetzt); ist für bestehende Anwendungen ideal, vor allem wenn man es auf den Knall beim CALL nicht ankommen lassen will, sondern vorher Fußzeile und F-Tasten verändern / sperren möchte.
Die Statusabfrage (Fuerchau) werde ich versuchen, bei jedem CALL zum Standard zu machen (wird nicht einfach; ich bin im Unternehmen nicht der einzige PGMR).
Nochmals danke
Klaus Hardy
-
Hier gibt es noch ein Beispielprogramm zum besagten API. Das API liefert noch eine ganze Menge an zusätzlichen Informationen. http://www.rlpforen.de/showthread.php?t=9375
Frank Hildebrandt
Similar Threads
-
By dino in forum IBM i Hauptforum
Antworten: 3
Letzter Beitrag: 17-01-07, 09:23
-
By hh-mi in forum IBM i Hauptforum
Antworten: 5
Letzter Beitrag: 15-11-06, 12:23
-
By alexander may in forum IBM i Hauptforum
Antworten: 4
Letzter Beitrag: 18-05-06, 20:16
-
By kuempi von stein in forum NEWSboard Programmierung
Antworten: 11
Letzter Beitrag: 20-08-04, 15:08
-
By areichelt in forum NEWSboard SAP
Antworten: 2
Letzter Beitrag: 24-02-02, 16:44
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