In the last issue, I published what's turned out to be probably the most popular utility program in the last 15 years, FTPSNDFILE. The last time I had a response like the one we had for FTPSNDFILE was way back in 1984 when I published the Display Database File (DSPDBF) command. That RPG III program allowed you to view and change any database file, and it supported character or hex display modes.
One problem with both of these utilities is that unwanted message in the joblog: "Buffer size greater than that of file XXXX in YYYY."
Often, this gives users the mistaken impression that the program had a problem. But it was simply reporting a condition, a condition that we should probably be able to filter out on a global or job-level basis. But as usual, we cannot. Use the command 10 times, and you get at least 10 of these goofy messages in your joblog.
So how do we get rid of them without adversely impacting the functionality of such utilities/commands?
The answer is in the QMHRMVPM (Remove Program Message) API, which removes messages from the program queue. This API has the following parameters that apply to our situation.
- Call Stack Entry--The program whose message queue will have the message removed.
- Call Stack Count--Relative invocation.
- Message Key--The message key of the message to be moved.
- Message to Remove--Classification of message to remove. Valid choices include*ALL (all messages in the message queue), *BYKEY (a single message specified in the message key parameter), *KEEPRQS (all messages in the message queue except request messages, e.g., commands), *NEW (all new messages in the message queue), or *OLD (all old messages in the message queue).
The QMHRMVPM API should be prototyped as follows:
** Remove Message from Program Queue API
D QmhRmvPM PR ExtPgm('QMHRMVPM')
D CallStackEntry 64A Const OPTIONS(*VARSIZE)
D CallStackCount 10I 0 Const
D MsgKey 4A Const
D MsgToRemove 10A Const
/IF NOT DEFINED(*V5R1M0)
D ApiErrorDS Like(QUSEC)
/ELSE
D ApiErrorDS LikeDS(QUSEC)
/ENDIF
After the erroneous message is generated, call QMHRMVPM to remove it. If the message is generated in your RPG IV program, specify the following parameter values:
Parameter Values for QMHRMVPM | ||
Parameter | Value to Specify | Description |
Call Stack Entry | '*' | Indicates that "this" program (the API's caller) is the one whose message queue will have the message removed. |
Call Stack Counter | 0 | Relative invocation is always zero, relative to the API's caller. |
Message Key | Blanks | We're not deleting by message key, so we must pass in blanks for this parameter. |
Messages to Remove | '*NEW' | The erroneous message will not yet be received and thus will be '*NEW'. |
API Error Data Structure | QUSEC | Pass in the standard IBM API error DS. |
The following example illustrates calling QMHRMVPM after opening a source file with a file record length different from the one declared in the program. The API removes the erroneous buffer-length mismatch message from the joblog.
C eval ApiError = QUSEC
C Callp QMHRMVPM('*':0:' ':
C '*NEW' : ApiError)
The first statement sets the size of the API error data structure to the actual length of the error data structure named QUSEC. This comes from the QUSEC in QRPGLESRC in QSYSINC. On the second statement, the data structure APIERROR has the content of the QUSEC data structure copied to it and is passed to the API. The third statement is the call to the API itself. To remove the last erroneous message, I call QMHRMVPM with the parameter values indicated above.
No longer do we need to live with erroneous messages in the joblog confusing users. Calling the QMHRMVPM API to delete them is relatively easy. Give it a try.
Bob Cozzi is a programmer/consultant, writer/author, and software developer. His popular RPG xTools add-on subprocedure library for RPG IV is fast becoming a standard with RPG developers. His book The Modern RPG Language has been the most widely used RPG programming book for more than a decade. He, along with others, speaks at and produces the highly popular RPG World conference for RPG programmers.
LATEST COMMENTS
MC Press Online