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

    Message aus MSGF in RPG-ILE auslesen

    Hallo,
    hat vielleicht jemand eine Ahnung wie ich im RPG-ILE den Text mittels MSG-ID aus einem MSGF direkt auslesen kann?
    Ich hätte es mit dem API "QMHRTVM" probiert. Leider habe ich da scheinbar die Parameter falsch befüllt.

    Meine P-List:
    p_Message S 80
    p_MsgLen S 4B 0
    p_Format S 8
    p_MsgID S 7
    p_MsgFile S 20
    p_ReplData S 80
    p_ReplDataLen S 4B 0
    p_SubstVal S 10
    p_RetFormat S 10
    p_ErrorCode S 10


    Füllen & Aufruf
    Eval p_MsgID = y_MsgID
    Eval p_MsgLen = 80
    Eval p_MsgFile = '*LIBL KODMSG '
    Call 'QMHRTVM' p_QMHRTVM

    lg
    TomWaf

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    p_ErrorCode ist eine Struktur:

    d p_ErrorCode ds
    d p_errProv 10I 0 inz(%size(p_errorCode))
    d p_errAvail 10I 0 inz
    d p_errMsgId 7
    d p_errRes 1
    d p_errMsgDta 128
    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
    May 2006
    Beiträge
    8
    Danke, habe die Parameterstruktur entsprechend geändert.
    Leider funkt es so noch nicht. Im Feld p_errMsgId kommt der Wert 'CPF24B4' als Fehler zurück.

    LG
    TomWaf

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Schau dir das API noch mal genau an:

    http://publib.boulder.ibm.com/infoce...is/QMHRTVM.htm

    Binary(4)=9B 0 oder besser 10I 0 !

    Sämtliche Parameter müssen einen korrekten Inhalt haben, das kann auch mit INZ(...) gemacht werden.
    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

  5. #5
    Registriert seit
    May 2006
    Beiträge
    8
    leider werde ich aus der IBM-Beschreibung nicht wirklich schlauer.
    Habe jett meine Parameterstzruktur wie folgt aufgebaut:

    p_Message S *
    p_MsgLen S 10I 0
    p_Format S 8
    p_MsgID S 7
    p_MsgFile S 20
    p_ReplData S *
    p_ReplDataLen S 10I 0
    p_SubstVal S 10
    p_RetFormat S 10
    p_ErrorCode DS
    p_errProv 10I 0 inz(%size(p_errorCode))
    p_errAvail 10I 0 inz
    p_errMsgId 7
    p_errRes 1
    p_errMsgDta 128

    der Parameter Message liefert SPP:*NULL zurück. P_ERRMSGID = 'CPF24A7'

    LG
    TomWaf

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Die Ursprungsdefinition war fast korrekt. Die B-Felder sind jetzt korrekt müssen aber initialisiert werden.

    p_Message ist wiederum eine Struktur: RTVMxxxx !

    p_MsgLen inz(%size(p_Message)) <= Größe Empfangspuffer
    p_Format inz('RTVM0100')

    p_MsgFile ist eigentlich auch eine Struktur mit 2 Felder á 10 Zeichen

    p_ReplData ist auch eine Struktur, die die Feldinhalte einer MSG mit Feldern enthält, sind keine Felder vorhanden, kann p_ReplDataLen auf 0 gesetzt werden, ansonsten enthält es wiederum die Größe der Struktur.

    p_SubstVal muss *YES (mit ReplData) oder *NO enthalten.
    p_RetFormat muss *YES/*NO enthalten (Textformatierungen der Nachricht).

    In der Struktur p_Message findest du dann das Ergebnis, allerdings beginnt die Nachricht an Stelle 25 in der Länge, die ab Stelle 13 im 10I-Format steht.
    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
    Dec 2002
    Beiträge
    301
    Hier ein Beispiel.

    PHP-Code:
     *                                                                                                             
     * 
    Prozedurenprototyp für Prozedur 'QMHRTVM'                                                                   
     
    *                                                                                                             
    dQMHRTVM          PR                  ExtPgm('QMHRTVM')                                                        
    d                            32767A   Options(*VarSize)                    <-- Message information             
    d                               10I 0 
    Const                                --> Length of message information   
    d                                8A   
    Const                                --> Format name                     
    d                                7A   
    Const                                --> Message identifier              
    d                               20A   
    Const                                --> Qualified message file name     
    d                            32767A   
    Const Options(*VarSize)              --> Replacement data                
    d                               10I 0 
    Const                                --> Length of replacement data      
    d                               10A   
    Const                                --> Replace substitution values     
    d                               10A   
    Const                                --> Return format control characters
    d                            32767A   Options
    (*VarSize)                    <-> Error code                      
    d                               10A   
    Const Options(*NoPass)               --> Retrieve option                 
    d                               10I 0 
    Const Options(*NoPass)               --> CCSID to convert to             
    d                               10I 0 
    Const Options(*NoPass)               --> CCSID of replacement data       
     
    *                                                                                                             
     * 
    Datenstruktur für Format 'RTVM0300' für Prozedur 'QMHRTVM'                                                  
     
    *                                                                                                             
    dRTVM0300         DS                                                                                           
    d RTVMByteRtn                   10I 0                                      
    <-- Bytes returned                  
    d RTVMByteAvl                   10I 0                                      
    <-- Bytes available                 
    d RTVMMsgSvrty                  10I 0                                      
    <-- Message severity                 
    d RTVMAltIdx                    10I 0                                      
    <-- Alert index                      
    d RTVMAltOpt                     9A                                        
    <-- Alert option                     
    d RTVMLogInd                     1A                                        
    <-- Log indicator                    
    d RTVMMsgId                      7A                                        
    <-- Message ID                       
    d RTVMRsrvd                      3A                                        
    <-- Reserved                         
    d RTVMNSVF                      10I 0                                      
    <-- Number of SVF                    
    d RTVMCCSID1                    10I 0                                      
    <-- CCSID CSI of text                
    d RTVMCCSID2                    10I 0                                      
    <-- CCSID CSI of replacement data    
    d RTVMCCSID3                    10I 0                                      
    <-- CCSID of text returned           
    d RTVMOffDR                     10I 0                                      
    <-- Offset of default reply          
    d RTVMLenDRRtn                  10I 0                                      
    <-- Length of default reply returned 
    d RTVMLenDRAvl                  10I 0                                      
    <-- Length of default reply available
    d RTVMOffMsg                    10I 0                                      
    <-- Offset of message                
    d RTVMLenMsgRtn                 10I 0                                      
    <-- Length of message returned       
    d RTVMLenMsgAvl                 10I 0                                      
    <-- Length of message available      
    d RTVMOffMsgH                   10I 0                                      
    <-- Offset of message help           
    d RTVMLenMsgHRtn                10I 0                                      
    <-- Length of message help returned  
    d RTVMLenMsgHAvl                10I 0                                      
    <-- Length of message help available 
    d RTVMOffSVF                    10I 0                                      
    <-- Offset of SVF                    
    d RTVMLenSVFRtn                 10I 0                                      
    <-- Length of SVF returned           
    d RTVMLenSVFAvl                 10I 0                                      
    <-- Length of SVF available          
    d RTVMLenSVFElm                 10I 0                                      
    <-- Length of SVF element            
    d RTVMVarAra                  4096A                                        
    <-- Varriable area                   
    *                                                                                                           
    Datenstruktur für Format 'ERRC0100' für Fehlercode                                                        
    *                                                                                                           
    ERRC0100         DS                                                                                         
     ERRCBytePrv                   10I 0 Inz
    (272)                             --> Bytes provided                
     ERRCByteAvl                   10I 0                                      
    <-- Bytes available               
     ERRCExcId                      7A                                        
    <-- Exeption-Id.                  
     
    ERRCRsrvd                      1A                                        <-- Reserved                      
     ERRCExcDta                   256A                                        
    <-- Exeption data                 
    *                                                                                                           
    Sonstige Felddeklarationen                                                                                
    *                                                                                                           
    ITMsgId          S              7A                                        Nachrichten-Id.                   
    ITMsgF           S             10A                                        Nachrichtendatei                  
    ITLibMsgF        S             10A                                        Bibliotehk Nachrichtendatei       
    ITMsgFL          S            256A                                        Nachricht der ersten Ebene        
    ITMsgSL          S           2048A                                        Nachricht der zweiten Ebene       
    *                                                                                                           
    *-------------------------------------------------------------------------------------------*               
    *                                                                                                           
    Nachrichtendaten aus Nachrichtendatei abrufen                                                             
                       Reset                   ERRC0100                                                         
                       CallP     QMHRTVM
    (RTVM0300 :                           <-- Message information           
                                         
    %Size(RTVM0300) :                    --> Length of message information 
    c                                     
    'RTVM0300' :                         --> Format name                     
    c                                     ITMsgId 
    :                            --> Message identifier              
    c                                     ITMsgF 
    ITLibMsgF :                 --> Qualified message file name     
    c                                     
    *Blanks :                            --> Replacement data                
    c                                     
    *Zero :                              --> Length of replacement data      
    c                                     
    '*NO' :                              --> Replace substitution values     
    c                                     
    '*YES' :                             --> Return format control characters
    c                                     ERRC0100 
    :                           <-> Error code                      
    c                                     
    '*MSGID' :                           --> Retrieve option                 
    c                                     0 
    :                                  --> CCSID to convert to             
    c                                     0
    )                                   --> CCSID of replacement data       
    c                   
    If        ERRCExcId = *Blanks                                                              
     
    Nachrichtentext erster Ebene                                                                                
    c                   
    Eval      ITMsgFL =                                                                        
    c                             %SubSt(RTVM0300:RTVMOffMsg+1:RTVMLenMsgRtn)                                      
     * 
    Nachrichtentext zweiter Ebene                                                                               
    c                   
    Eval      ITMsgSL =                                                                        
    c                             %SubSt(RTVM0300:RTVMOffMsgH+1:RTVMLenMsgHRtn)                                    
    c                   EndIf 
    In der Variablen ITMsgId muss die Nachrichten-Id., in der Variablen ITMsgF muss die Nachrichtendatei und in der Variablen ITLibMsgF muss die Bibliothek der Nachrichtendatei stehen.
    Frank Hildebrandt

  8. #8
    Registriert seit
    Jun 2005
    Beiträge
    31

    Wahrscheinlich altmodisch aber funktioniert



    MOVE FENR ERMSG fficeffice" />>>
    MOVEL 'MEB' ERMSG >>
    Z-ADD 3 ERREBE >>
    Z-ADD 132 ERRLNG >>
    CALL 'SUBR23R3' >>
    PARM ERMSG 7 >>
    PARM ERRTXT 132 >>
    PARM ERREBE 1 0 >>
    PARM ERRRC 1 0 >>
    PARM ERRLNG 4 0 >>
    MOVEL ERRTXT ERRMSG 80 >>


  9. #9
    Registriert seit
    Dec 2002
    Beiträge
    301
    Wirklich interessant. Von einem Programm SUBR23R3 habe ich noch nie etwas gehört. Das Programm befindet sich in der QSYS, ist jedoch nicht in der API Dokumentation beschrieben. Daher wäre ich mit der Verwendung vorsichtig. Es könnte durchaus passieren, dass mit einem zukünftigen OS/400 Release das Teil nicht mehr da ist.
    Frank Hildebrandt

  10. #10
    Registriert seit
    Jun 2005
    Beiträge
    31

    SUBR23R3

    Hat seit 10 Jahren alle Releasewechsel ohne Schaden überlebt

  11. #11
    Registriert seit
    Aug 2004
    Beiträge
    923
    Der war GUT!

    Die SUBR23R3 gibt es schon seit Urzeiten.
    Kommt von der /38 oder noch älter.
    Wurde schon vor 20 Jahren in den RPG-Kursen benutzt.

    Siehe hierzu auch den Link.

    Wenn die jemals eingestampft werden würde, würden 1000e Programme nicht mehr laufen...

    kuempi

  12. #12
    Registriert seit
    Dec 2002
    Beiträge
    301
    Dann ist das Teil ja doch von IBM dokumentiert. Halt nur nicht da, wo ich es vermutet hätte. Und damit wird es wohl auch noch in 100 Jahren unterstützt, so wie es IBM ja immer macht - Ausnahmen bestätigen die Regel. Bleibt nur noch die Frage, ob TomWaf mehr braucht als SUBR23R3 bietet, oder ob es reicht.
    Frank Hildebrandt

Similar Threads

  1. ILE RPG / SQL Füllen einer Feldgruppe
    By homue in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 18-07-07, 16:47
  2. Problem mit Java-Methoden Aufruf aus ILE RPG?
    By Stoeberl in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 10-01-07, 10:58
  3. DDS in ILE RPG
    By Squall in forum IBM i Hauptforum
    Antworten: 82
    Letzter Beitrag: 19-10-06, 15:37
  4. Return ILE RPG
    By Squall in forum IBM i Hauptforum
    Antworten: 31
    Letzter Beitrag: 28-09-06, 17:53
  5. Rechnen mit Datumsfeldern in ILE RPG
    By Angela in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 22-08-06, 10:11

Berechtigungen

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