[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Registriert seit
    Aug 2003
    Beiträge
    163

    CPF2479 bei der Anzeige einer MSG Subfile

    Guten Tag zusammen,

    bei dem Versuch, eine MSG Subfile anzuzeigen, erhalte ich den Fehler CPF2479 (Aufrufstapeleintrag nicht gefunden.)

    Die DDS Definition:
    Code:
    A          R MSGSFL                    SFL              
    A                                      SFLMSGRCD(24)    
    A            MSGKEY                    SFLMSGKEY        
    A            PGMQ                      SFLPGMQ          
    A*                                                      
    A          R MSGCTL                    SFLCTL(MSGSFL)   
    A                                      OVERLAY          
    A                                      SFLDSP           
    A                                      SFLDSPCTL        
    A                                      SFLINZ           
    A                                                       
    A  30                                  SFLEND           
    A                                      SFLSIZ(0003)     
    A                                      SFLPAG(0001)     
    A            PGMQ                      SFLPGMQ
    Die Prozedurdefinition:
    Code:
    D sndpgmmsg       PR                  ExtPgm('QMHSNDPM') 
    D  MsgID                         7A   Const              
    D  MsgFile                      20A   Const              
    D  MsgData                     256A   Const              
    D  MsgDtaLen                    10I 0 Const              
    D  MsgType                      10A   Const              
    D  StackEntr                    10A   Const              
    D  StackCoun                    10I 0 Const              
    D  MsgKey                        4A   Const              
    D  ErrorCode                    16A   Const
    der Aufruf:

    Code:
       sndpgmmsg(          $MsgId                  
                         : $MsgFile                
                         : $MsgDta                 
                         : %len( %trimr($MsgDta))  
                         : '*INFO'                 
                         : '*'                     
                         : 1                       
                         : *blanks                 
                         : ErrorCode );            
       msg_sflend = *on;                           
       write msgctl;
    Im Joblog sind zu der gesendeten Nachricht diese Details zu finden:
    Code:
    Von Programm . . . . . . . . . :   Q98924A551          
      Von Bibliothek . . . . . . . :     QRPLOBJ           
      Von Modul  . . . . . . . . . :     SSTMON100R        
      Von Prozedur . . . . . . . . :     SNDCSV            
      Von Anweisung  . . . . . . . :     129900            
                                                           
    An Programm  . . . . . . . . . :   Q98924A551          
      An Bibliothek  . . . . . . . :     QRPLOBJ           
      An Modul . . . . . . . . . . :     SSTMON100R        
      An Prozedur  . . . . . . . . :     FAKDET_SFLPROCESS 
      An Anweisung . . . . . . . . :     109800
    Vor dem Senden der Nachricht sieht der Aufrufstapel so aus:
    Code:
    Von Programm . . . . . . . . . :   Q98924A551          
      Von Bibliothek . . . . . . . :     QRPLOBJ           
      Von Modul  . . . . . . . . . :     SSTMON100R        
      Von Prozedur . . . . . . . . :     SNDCSV            
      Von Anweisung  . . . . . . . :     129900            
                                                           
    An Programm  . . . . . . . . . :   Q98924A551          
      An Bibliothek  . . . . . . . :     QRPLOBJ           
      An Modul . . . . . . . . . . :     SSTMON100R        
      An Prozedur  . . . . . . . . :     FAKDET_SFLPROCESS 
      An Anweisung . . . . . . . . :     109800            
           SSTMON100R WINTEST       129800            SNDCSV       
           QTEVIREF   QSYS                     /0475               
           QTESTOPH   QSYS                            _C_pep       
           QTESTOPH   QSYS          200               main         
           QTENPTS    QSYS          20                qtescren     
           QTENPTS    QSYS          36                ProgramSource
           QUIDSPP    QSYS                     /00E4               
           QUIMGFLW   QSYS                     /03C3               
           QUIEXFMT   QSYS                     /0099               
           QUIINMGR   QSYS                     /05C4               
           QWSGET     QSYS                     /0667               
           QT3REQIO   QSYS                     /0256
    Wo habe ich da den Denkfehler?

    Vielen Dank im Voraus für die Unterstützung.

    Hubert

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Das Problem bei ILE ist, dass jede Prozedur ein Stapelaufruf ist.
    Du musst also beim Senden der Nachricht schauen, an welcher Stapelposition du deine Displayfile behandelst.

    Ich würde i.Ü. nicht mit QRPLOBJ testen. Dies deutet auf ein ersetztes Programm hin und nicht auf das Aktive.
    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
    Jun 2001
    Beiträge
    1.975
    Dein PGM läuft aus der QRPLOBJ ...

    einfach mal alles beenden, und neu starten.
    Das Notwendige steht über dem technisch machbaren.
    (klingt komisch, funktioniert aber!)

  4. #4
    Registriert seit
    Aug 2003
    Beiträge
    163
    Nach einem Neustart sieht der Aufrufstapel jetzt so aus:

    Code:
    Art   Programm                 Anweisung         Prozedur              
          QCMD       QSYS                     /04FA                        
          STARTCL    ALGM                            _CL_PEP               
          STARTCL    ALGM          23700             STARTCL               
       1  QCMD       QSYS                     /01C8                        
          PDM        LUEBBERS      1200       /0028                        
          QUOCPP     QPDA                     /075E                        
          QUOMAIN    QPDA                     /1158                        
       2  QUOCMD     QSYS                     /03B3                        
          SSTMON100R WINTEST                         _QRNP_PEP_SSTMON100R  
          SSTMON100R WINTEST       20700             MAIN                  
          SSTMON100R WINTEST       31200             VERARBEITUNG          
          SSTMON100R WINTEST       66900             TIME_SFLPROCESS       
          SSTMON100R WINTEST       110100            FAKDET_SFLPROCESS     
          SSTMON100R WINTEST       130100            SNDCSV        
          QTEVIREF   QSYS                     /0475                
          QTESTOPH   QSYS                            _C_pep        
          QTESTOPH   QSYS          200               main          
          QTENPTS    QSYS          20                qtescren      
          QTENPTS    QSYS          36                ProgramSource 
          QUIDSPP    QSYS                     /00E4                
          QUIMGFLW   QSYS                     /03C3                
          QUIEXFMT   QSYS                     /0099                
          QUIINMGR   QSYS                     /05C4                
          QWSGET     QSYS                     /0667                
          QT3REQIO   QSYS                     /0256
    Der Fehler bleibt der gleiche.

    Die Prozedur, in der das Displayfile verarbeitet wird ist FAKDET_SFLPROCESS. Das sollte doch eigentlich gefunden werden.

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Was ist die Prozedur SNDCSV? Diese zeigt den Bildschirm doch erst an.
    Wenn du also an FAKDET_SFLPROCESS etwas sendest, ist das 1 Ebene zu hoch.
    Allerdings nehme ich mal an, dass du in dieser Prozedur den SNDMSG machst und somit die Routine SNDCSV noch gar nicht aktiv ist.

    Wenn du unbeding mit MSGSFL arbeiten möchstest, musst du deine Ebenen der Funktionsaufrufe Austauschen:

    dcl-proc SNDDST
    FAKDET_SFLPROCESS(..);
    EXFMT ...

    dcl-proc FAKDET_SFLPROCESS
    // tuwas
    SNDMSG
    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 2003
    Beiträge
    163
    Die Prozedur SNDCSV wird aus FAKDET_SFLPROCESS aufgerufen, wenn dort F9 gedrückt wurde. Hier wird dann aus der angezeigten Subfile eine CSV Datei ins IFS geschrieben und per Email verschickt. Der Erfolg oder Misserfolg des Sendens soll dem Benutzer dann in der Prozedur FAKDET_SFLPROCESS angezeigt werden.
    Im SNDCSV ist also keine Bildschirmaktivität.

  7. #7
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    Es sollte eigentlich genügen, wenn Du den StackCount um 1 (also auf 2) erhöhst.

    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

  8. #8
    Registriert seit
    Aug 2003
    Beiträge
    163
    Ich vergaß noch zu schreiben, dass die Fehlermeldung beim WRITE MSGCTL ausgegeben wird. Das Senden der Nachricht funktioniert ja.

  9. #9
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Und auf welcher Ebene führst du WRITE MSGCTL aus?
    Wird an diese Ebene die Nachricht gesendet?
    Wenn du das wieder in einer Unterprozedur machst, können die Nachrichten da nicht ankommen.

    Siehe noch mal in der Doku:
    https://www.ibm.com/docs/en/i/7.2?to...s/QMHSNDPM.htm

    Du musst die Nachricht an den Callstack-Eintrag schicken, der dann die nachricht verarbeiten soll.
    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
    Aug 2003
    Beiträge
    163
    Ich habe beides versucht. Wenn ich den Stackcount auf 0 setze, geht die Nachricht an SNDCSV. Mit 1 geht sie an FAKDET_SFLPROCESS. Das WRITE MSGCTL habe in die entsprechende Prozedur gesetzt, was aber keinen Erfolg brachte.

  11. #11
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Lies auch diese Doku mal durch:
    https://www.ibm.com/docs/en/i/7.4?to...-display-files
    Benutze das 276-Byte-Feld und scheibe da den Namen "FAKDET_SFLPROCESS" rein, an die Nachricht ja korrekt gesendet wird.
    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

  12. #12
    Registriert seit
    Aug 2003
    Beiträge
    163
    Nachdem ich im DSPF die Länge für SFLPGMQ auf 276 geändert habe bekam ich in CPF2479 gemeldet Aufrufstapeleintrag FAKDET_SFL,
    Dann habe ich auch den Parameter in der Prozedurdefinition geändert und erhielt die gleiche Fehlermeldung. Es wurden nur die ersten 10 Stellen für das Senden der Nachricht berücksichtigt.

Similar Threads

  1. Subfile bleibt in der Anzeige
    By Hubert in forum NEWSboard Programmierung
    Antworten: 10
    Letzter Beitrag: 14-05-20, 08:05
  2. Subfile-Anzeige
    By AK1 in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 02-12-15, 16:54
  3. Antworten: 2
    Letzter Beitrag: 19-05-15, 10:21
  4. Subfile - Feld Anzeige
    By skywalker in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 12-02-14, 13:16
  5. Aufruf einer PC Anzeige von der AS/400 aus
    By it-wolf in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 19-07-02, 16:27

Berechtigungen

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