One nice feature of OS/400 is the ability to use the F9 key to recall commands that were previously keyed from the command line. If I'm going to run the same command several times, with different parameter values each time, I can recall the command by pressing F9, modify the necessary parameters, and press Enter to rerun it.
Menu-bound users don't usually get to take advantage of this feature. They have to take the same menu option over and over, filling in the same parameters and making changes as needed.
If you're willing to do a little extra work, you can make it possible for users to recall a command they chose as a menu option.
Let's say you have a command called SOMECMD (see 8) that runs a CL program called SOMEPGM (see 9). SOMECLP has two parameters-type and size. Let's say a user sometimes runs four or five of these back-to-back, changing one or both parameters each time. You put the command
Let's say you have a command called SOMECMD (see Figure 8) that runs a CL program called SOMEPGM (see Figure 9). SOMECLP has two parameters-type and size. Let's say a user sometimes runs four or five of these back-to-back, changing one or both parameters each time. You put the command
? SOMECMD
behind an option of a menu (a menu object, not a CL program menu) so the user can run the SOMECMD command and be prompted for parameters.
A user who wants to run three versions of this job has to select the menu option three times. Wouldn't it be more convenient to be able to select the menu option once, change the necessary parameters, and rerun the job?
To make it possible to use the F9 key to retrieve the SOMECMD command, make the command processing program, SOMEPGM, send the command back to the caller (the menu) in a request message. In 9, SOMEPGM builds a character string containing the SOMECMD command along with the parameter values supplied to the program. The Send Program Message (SNDPGMMSG) command sends this command string back to the caller as a request message, and the Receive Message (RCVMSG) makes the caller receive the command string and add it to the list of commands that have already been executed.
To make it possible to use the F9 key to retrieve the SOMECMD command, make the command processing program, SOMEPGM, send the command back to the caller (the menu) in a request message. In Figure 9, SOMEPGM builds a character string containing the SOMECMD command along with the parameter values supplied to the program. The Send Program Message (SNDPGMMSG) command sends this command string back to the caller as a request message, and the Receive Message (RCVMSG) makes the caller receive the command string and add it to the list of commands that have already been executed.
Be sure to compile the command to allow users with limited command line access to run it. That is, specify ALWLMTUSR(*YES) on the Create Command (CRTCMD) command.
- Ted Holt
TechTalk: A method that allows users to retrieve commands run through a menu.
Figure 8: Source for Command SOMECMD
CMD PROMPT('Some command') PARM KWD(THINGTYPE) TYPE(*CHAR) LEN(1) RSTD(*YES) + DFT(A) VALUES(A B C) PROMPT('Type of thing') PARM KWD(THINGSIZE) TYPE(*DEC) LEN(3) + PROMPT('Size of thing')
TechTalk: A method that allows users to retrieve commands run through a menu.
Figure 9: Source of Command Processing Program SOMEPGM
PGM PARM(&TYPE &SIZE) DCL VAR(&CMD) TYPE(*CHAR) LEN(80) DCL VAR(&SIZE) TYPE(*DEC) LEN( 3) DCL VAR(&MRK) TYPE(*CHAR) LEN( 4) DCL VAR(&TYPE) TYPE(*CHAR) LEN( 1) DCL VAR(&WORKFIELD) TYPE(*CHAR) LEN( 3) /* send command back to requestor */ CHGVAR VAR(&WORKFIELD) VALUE(&SIZE) CHGVAR VAR(&CMD) VALUE('SOMECMD THINGTYPE(' *CAT + &TYPE *CAT ') THINGSIZE(' *CAT &WORKFIELD + *CAT ')') SNDPGMMSG MSG(&CMD) TOPGMQ(*PRV) MSGTYPE(*RQS) + KEYVAR(&MRK) RCVMSG PGMQ(*PRV) MSGKEY(&MRK) RMV(*NO) /* do calcs to run the job here */ ENDPGM
LATEST COMMENTS
MC Press Online