If you have a Message File that contains thousands of records, and needs to find a message you want it's going to take a long time. In this post is the steps to able to extract and query the MSGF like a PF.
1. Create a Spoolfile of the MSGF with DSPMSGD.
2. Create physical file to store the spoolfile. The physical file only have 1 field, a long string field.
3. Copy spoolfile to physical file.
4. Query with WRKQRY to scan trough the file.
Detail steps :-
1. Create a Spoolfile of the MSGF with DSPMSGD.
Display Message Description (DSPMSGD) Type choices, press Enter. Range of message identifiers: Lower value . . . . . . . . . > *FIRST Name, *ALL, *FIRST Upper value . . . . . . . . . > *LAST Name, *ONLY, *LAST Message file . . . . . . . . . . > MBAMSG Name Library . . . . . . . . . . . *LIBL Name, *LIBL, *CURLIB... Detail . . . . . . . . . . . . . > *BASIC *BASIC, *FULL Format message text . . . . . . *YES *YES, *NO Output . . . . . . . . . . . . . > *PRINT *, *PRINT Bottom F3=Exit F4=Prompt F5=Refresh F12=Cancel F13=How to use this display F24=More keys
2. Create physical file to store the spoolfile. The physical file only have 1 field, a long string field.
First Create PF.
Create Source Physical File (CRTSRCPF) Type choices, press Enter. File . . . . . . . . . . . . . . > MBAMSG Name Library . . . . . . . . . . . *CURLIB Name, *CURLIB Record length . . . . . . . . . > 132 Number Member, if desired . . . . . . . *NONE Name, *NONE, *FILE Text 'description' . . . . . . . > 'Copy of MBAMSG (*MSGF)' Bottom F3=Exit F4=Prompt F5=Refresh F10=Additional parameters F12=Cancel F13=How to use this display F24=More keys
Source of the PF as below.
Columns . . . : 1 121 Edit MYCP20HB/WORKSPACE SEU==> MBAMSG *************** Beginning of data ********************************************************* 0002.00 A R RMBAMSG 0003.00 ** 0003.01 A FIELD 3000A ****************** End of data ************************************************************
Save and compile the PF
Create Physical File (CRTPF) Type choices, press Enter. Member size: Initial number of records . . > 1000000 1-2147483646 Increment number of records . 1000 Number Maximum increments . . . . . . 3 Number Allocate storage . . . . . . . . *NO *NO, *YES Contiguous storage . . . . . . . *NO *NO, *YES Preferred storage unit . . . . . *ANY 1-255, *ANY, *SSD Records to force a write . . . . *NONE Number, *NONE Maximum file wait time . . . . . 30 Seconds, *IMMED, *CLS Maximum record wait time . . . . 60 Seconds, *NOMAX, *IMMED Share open data path . . . . . . *NO *NO, *YES Max % deleted records allowed . *NONE 1-100, *NONE Reuse deleted records . . . . . *NO *YES, *NO Sort sequence . . . . . . . . . *SRC Name, *SRC, *JOB... Library . . . . . . . . . . . Name, *LIBL, *CURLIB Language ID . . . . . . . . . . *JOB Character value, *JOB More... F3=Exit F4=Prompt F5=Refresh F12=Cancel F13=How to use this display F24=More keys
3. Copy spoolfile to physical file.
Copy Spooled File (CPYSPLF) Type choices, press Enter. Spooled file . . . . . . . . . . > QPMSGD Name To data base file . . . . . . . > MBAMSG Name, *TOSTMF Library . . . . . . . . . . . > MYCP20HB Name, *LIBL, *CURLIB Job name . . . . . . . . . . . . * Name, * User . . . . . . . . . . . . . Name Number . . . . . . . . . . . . 000000-999999 Spooled file number . . . . . . > *LAST 1-999999, *ONLY, *LAST, *ANY Job system name . . . . . . . . *ONLY Name, *ONLY, *CURRENT, *ANY Spooled file created: Creation date . . . . . . . . *ONLY Date, *ONLY, *LAST Creation time . . . . . . . . Time, *ONLY, *LAST To member . . . . . . . . . . . *FIRST Name, *FIRST Replace or add records . . . . . *REPLACE *REPLACE, *ADD Control character . . . . . . . *NONE *NONE, *FCFC, *PRTCTL... More... F3=Exit F4=Prompt F5=Refresh F12=Cancel F13=How to use this display F24=More keys
4. Query with WRKQRY to scan trough the file.
5. Done.
I personally have made a simple utility program which extract this MSGF into a PF (3 column : Message ID, Severity, and Message). This have save me a lot of time and avoid redundant error message being created whenever I couldn't find the error message I needed.
Hope this helps.
In case you are wondering about the code snippet, I used the hilite.me.