-
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
-
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
-
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
-
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.
-
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
-
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.
-
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
-
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 >>
-
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
-
SUBR23R3
Hat seit 10 Jahren alle Releasewechsel ohne Schaden überlebt
-
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
-
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
-
By homue in forum NEWSboard Programmierung
Antworten: 5
Letzter Beitrag: 18-07-07, 16:47
-
By Stoeberl in forum NEWSboard Programmierung
Antworten: 8
Letzter Beitrag: 10-01-07, 10:58
-
By Squall in forum IBM i Hauptforum
Antworten: 82
Letzter Beitrag: 19-10-06, 15:37
-
By Squall in forum IBM i Hauptforum
Antworten: 31
Letzter Beitrag: 28-09-06, 17:53
-
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
-
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