[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Mar 2006
    Beiträge
    10

    RCVMSG nach QCMDEXC

    Hallo Forum,

    ich stehe mal wieder auf dem Schlauch. Ich habe folgendes Problem: In einem CLLE rufe ich per CALL ein RPGLE auf. In diesem wird mit CALL ein QCMDEXC aufgerufen, welchen ich über eine Bezugszahl abfange. Einen eventl. Abbruch des QCMDEXC gebe ich über einen Parameter an mein CLLE zurück. In diesem möchte ich nun mit RCVMSG die Meldung des Abbruchs ermitteln. Wie komme ich den da dran? Die Nachricht wurde ja an die Nachrichtenwarteschlange des RPGLE gesendet.

    Gruss
    Ralph

  2. #2
    Registriert seit
    Dec 2002
    Beiträge
    301
    Anstatt das Programm "QCMDEXC" rufst Du das nachfolgende Programm 'CMD' auf. Wenn der Befehl
    nicht ausgeführt werden konnte, dann bekommst Du im zweiten Parameter die
    Nachrichten-Id. zurück.

    PHP-Code:
    h DftActGrp(*NOActGrp(*CALLERBndDir('QC2LE')                                              
     *                                                                                            
     *-------------------------------------------------------------------------------------------*
     *                                                                                            
     * 
    Prozedurenprototyp für Prozedur 'CMD'                                                      
     
    *                                                                                            
    dCMD              PR                                                                          
    d                             1024A   
    Const                                --> Befehl         
    d                                7A                                        
    <-- Nachrichten-Id.
     *                                                                                            
     * 
    Prozedurenschnittstelle für Prozedur 'CMD'                                                 
     
    *                                                                                            
    dCMD              PI                                                                          
    d PICmd                       1024A   
    Const                                --> Befehl         
    d PIMsgId                        7A                                        
    <-- Nachrichten-Id.
     *                                                                                            
     *-------------------------------------------------------------------------------------------*
     *                                                                                            
     * 
    Prozedurenprototyp für Prozedur 'system'                                                   
     
    *                                                                                            
    dsystem           PR            10I 0 EXTPROC('system')                                       
    d                                 *   Value Options(*String)                                  
     *                                                                                            
     * 
    Nachrichten-Id.                                                                            
     *                                                                                            
    dMsgId            S              7A   Import('_EXCP_MSGID')                                   
     *                                                                                            
     *-------------------------------------------------------------------------------------------*
     *                                                                                            
     * 
    Befehl ausführen                                                                           
    c                   
    If        system(PICmd) > 0                                               
     
    Fehler aufgetreten                                                                         
    c                   
    Eval      PIMsgId MsgId                                                 
    c                   
    Else                                                                      
     * 
    Kein Fehler aufgetreten                                                                    
    c                   
    Eval      PIMsgId = *Blanks                                               
    c                   
    EndIf                                                                     
     * 
    Programmende                                                                               
    c                   
    Eval      *INLR = *On 
    Frank Hildebrandt

  3. #3
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Hallo,

    ich würde entweder über API QMHSNDMG eine Escape-Message aus dem RPG-Programm an das CL senden.

    Die evt. einfachere Möglichkeit wäre den Nachrichten-Text als Ausgabe-Parameter an das CL ausgeben. Der aufbereitete Nachrichten-Text (80 Stellen) kann aus der Programm-Status-Datenstruktur (Stelle 91-170) entnommen werden.

    Beispiel:
    PHP-Code:
    D QCMDEXC         PR                  extpgm('QCMDEXC')                   
    D  P$CLCmd                   32702    const options(*VarSize)             
    D  P$CLCmdLen                   15P 5 const   

    D MYRPGPGM        PI                  extpgm('MYRPGPGM')                   
    D  P$MsgTxt                  100A    
                                
    D P$Cmd           S            100A

    D PGMSDS         SDS
    D  SDSMsgId              40     46
    D  SDSMsgTxt              91    170
     
    *-------------------------------------------------------
     /
    Free                  
       Monitor
    ;
         
    clear P$MsgTxt;
         
    P$Cmd 'Was auch immer';
         
    QCmdExc(P$Cmd: %Len(P$cmd));
       
    On-Error;
         
    P$MsgTxt SDSMsgTxt;
       
    EndMon;

       *
    INLR = *On;
     /
    End-Free 
    Die Verwendung des QCMDEXC hat gegenüber dem system den Vorteil, dass der komplette Message-Text (incl. den variablen Texten) ausgebeben wird. Mit system kann lediglich die Message-Id ermittelt werden.
    Birgitta
    Birgitta Hauser

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

  4. #4
    Registriert seit
    Mar 2006
    Beiträge
    10
    Danke für die Antworten,

    ich denke ich mache es so wie Birgitta, da ich den Text benötige.

Similar Threads

  1. QCMDEXC & OVRPRTV
    By muadeep in forum NEWSboard Programmierung
    Antworten: 9
    Letzter Beitrag: 24-06-06, 23:59
  2. Nachrichtenbehandlung nach QCMDEXC in COBOL/400
    By Lichtblitz in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 25-07-05, 12:44
  3. V5R3 & QCMDEXC
    By Freezer in forum IBM i Hauptforum
    Antworten: 8
    Letzter Beitrag: 02-12-04, 13:38
  4. RCVMSG
    By BUG in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 05-11-04, 15:07
  5. QCMDEXC und Parameterlänge
    By fabax in forum NEWSboard Programmierung
    Antworten: 13
    Letzter Beitrag: 27-02-04, 11:10

Berechtigungen

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