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

    Systemanfrage 2 (Vorherige Anfrage beenden) im RPG abfangen ?

    Hallo,

    habe ich eine Möglichkeit im RPG oder CL, dass ich mitbekomme wenn jemand Systemanfage 2 macht. Ich dachte er geht zumindest in die *PSSR, macht er aber nicht.

    Wenn jemand die Sitzung schließt oder die Verbindung (Scanner) verloren geht, habe ich das inzwischen hinbekommen, dass er mir in die *PSSR läuft aber Systemanfrage 2 noch nicht.

    Viele Grüße Harkne

  2. #2
    Registriert seit
    Nov 2003
    Beiträge
    2.307
    Probier's mal so:

    PHP-Code:
                 PGM                                                      
                 DCL        
    VAR(&KEYTYPE(*CHARLEN(4)                  
                                                                          
                 
    MONMSG     MSGID(CPF1907EXEC(GOTO CMDLBL(ENDRQS))      
                                                                          
                 
    SNDPGMMSG  MSG('-')   TOPGMQ(*EXTMSGTYPE(*RQS)         
                 
    RCVMSG     KEYVAR(&KEYPGMQ(*EXTMSGTYPE(*RQSRMV(*NO)
                                                                          
              
    /* Befehle */                                               
                                                                          
     
    ENDRQS:     RMVMSG     MSGKEY(&KEY)                                  
                 
    ENDPGM 

  3. #3
    Registriert seit
    May 2004
    Beiträge
    444
    Sorry, ich weiß nicht warum er mir in diesem Editor nicht mehr das Icon für Quellcode anzeigt, ich hoffe die nachfolgende Quelle kann man lesen.

    @Pikachu
    Dein Beispiel verstehe ich nicht. Was soll hier die Systemabfrage 2 abfangen ?
    Ich habe bereits im CL nach dem Aufruf von meinem RPG-Programm einen MONMSG MSID(CPF0000) der sollte dann auch den von dir angegebenen CPF1907 beinhalten. Es interessiert das CL aber nicht und bricht direkt ab. Er bringt noch als Meldung das MCH4429 nicht überwacht ist. Den habe ich auch bereits versucht abzufangen. Geht auch nicht. Monitor im RPG um den Read auf die Bildschirmdatei. Nix.

  4. #4
    Registriert seit
    Nov 2003
    Beiträge
    2.307
    Um den CPF1907 abzufangen, mußt du eine neue Anfrageebene öffnen. Dies geht mit SNDPGMMSG und RCVMSG (jeweils mit *RQS), siehe Beispiel. An der Stelle wo /* Befehle */ steht, muß du dein RPG-Programm aufrufen.

  5. #5
    Registriert seit
    May 2004
    Beiträge
    444
    Also im Moment ist es so, dass er mir zwar nicht mehr abstürzt (da ich nach dem CALL auf das RPG noch den CPF0000 hat) aber an den ENDRQS springt er mir nicht. Also greift auch irgendwie die CPF1907 nicht, obwohl ich sie im JOBLOG sehe. Ich hab dann mal den CPF0000 zum ENDRQS springen lassen. Allerdings steht im &KEY auch nichts vernünftiges drin.

    So sieht der Quellcode im Moment aus
    PHP-Code:
    PGM        PARM(&PI@RESULT &PI@PRCI)

    DCL        VAR(&PI@RESULTTYPE(*CHARLEN(1)
    DCL        VAR(&PI@PRCITYPE(*CHARLEN(3)
    DCL        VAR(&KEYTYPE(*CHARLEN(4)                                                                               

    SNDPGMMSG  MSG('-'TOPGMQ(*EXTMSGTYPE(*RQS)                         
    RCVMSG     KEYVAR(&KEYPGMQ(*EXTMSGTYPE(*RQSRMV(*NO)                                                                                     
    STRCMTCTL  LCKLVL(*CHGCMTSCOPE(*JOB)                                 
    MONMSG     MSGID(CPF8351)                                                                                                                     
    CHGJOB     DEVRCYACN(*MSG)                                                                                                                    
    CALL       PGM(PBS30RPARM(&PI@RESULT &PI@PRCI)                       
    MONMSG     MSGID(CPF1907EXEC(GOTO CMDLBL(ENDRQS))                    
    MONMSG     MSGID(CPF0000)                                                                                                                     
    CHGJOB     DEVRCYACN(*ENDJOB)                                                                                         
                 
    RCLRSC                                 
    ENDCMTCTL
    MONMSG     MSGID
    (CPF8350)                                        
    ENDRQS:      RMVMSG     MSGKEY(&KEY)   
    ENDPGM:      ENDPGM 

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Schau dir das obige Beispiel genau an.
    CPF1907 ist ein Spezialfall und muss daher als zentrale MONMSG, also als erste Anweisung überhaupt, definiert sein.
    Ein MONMSG nach einem Aufruf fängt nur Nachrichten dieses Aufrufes ab.
    Der CPF1907 wird aber nicht vom Programm sondern vom Befehlsprozessor gesendet.
    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

  7. #7
    Registriert seit
    May 2004
    Beiträge
    444
    Das hatte ich doch schon

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    In deiner Quelle steht da aber kein MONMSG vor dem SNDPGMMSG!
    Also was "hattest du schon"?
    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

  9. #9
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Ich habe bei mir noch mal nachgesehen, als PGMQ muss *SAME, also die eigene, gewählt werden, da sonst die Abbruchnachricht eben an *EXT gesendet wird:

    SNDPGMMSG MSG('/* */') TOPGMQ(*SAME) MSGTYPE(*RQS)
    RCVMSG PGMQ(*SAME) MSGTYPE(*RQS) RMV(*NO)

    Ich wähle den Kommentar, da sonst nach Programmende der Text per F9 abgefragt werden kann da es sich ja um eine *RQS-Nachricht handelt.
    Zur Überprüfung der Anforderungsebene kannst du dir den Callstack anzeigen.
    Die Anforderungsebenen werden durchnummeriert.
    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

  10. #10
    Registriert seit
    May 2004
    Beiträge
    444
    Ich hatte am Anfang das so gemacht wie es ob als Beispiel steht. Da es nicht funktioniert hat, habe ich versucht den MONMSG hinter das RPG zu machen, da ja dort die Systemanfrage 2 ausgeführt wird. Er macht das noch nicht mal mit CPF0000 sowohl hinter dem CALL als auch ganz am Anfang. Ich würde die Quelle gerne etwas öfter posten aber das ist sehr viel arbeit, weil er mir das nicht richtig ausrichtet auch wenn ich ein PHP /PHP drum rum schnalle.
    Momentan habe ich zu Beginn der Quelle nochmal den CPF1907 probiert. Macht er nicht. Dann habe ich jetzt am Anfang statt CPF1907 den CPF0000. Das macht er. Allerdings habe ich gesagt dass er nochmal das gleiche RPG im Fehlerfall aufrufen soll. Das macht er nicht mehr.

  11. #11
    Registriert seit
    May 2004
    Beiträge
    444
    Hallo nochmal an alle

    Vielen Dank für die Hilfe.
    Also ich hab das jetzt so geändert wie Herr Fuerchau beschrieben hat. Will aber nicht die Hand dafür ins Feuer legen, dass es vorher nicht auch schon ging. Die CPF1907 bekomme ich nach wie vor nicht abgefangen aber die CPF0000.

    Viele Grüße Harkne

  12. #12
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Mach den MONMSG(CPF1907) am Anfang, korrigiere den SND/RCVPGMMSG auf PGMQ(*SAME).
    Prüfe während des RPG-Aufrufes den Callstack ob die Aufrufebene eine Nummer bekommen hat.
    Bei mir läuft das schon so seit V2R1.
    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

Similar Threads

  1. programm beenden
    By E305GL in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 24-09-15, 11:43
  2. CPF4131 im CL beim Aufruf abfangen
    By karela66 in forum NEWSboard Programmierung
    Antworten: 11
    Letzter Beitrag: 13-08-15, 09:26
  3. Menü Systemanfrage
    By RB in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 18-07-02, 12:59
  4. CL zeitgesteuert beenden
    By hs in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 10-06-02, 08:54
  5. Job in SBS beenden
    By hs in forum IBM i Hauptforum
    Antworten: 5
    Letzter Beitrag: 12-12-01, 09:43

Berechtigungen

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