5.5 Overriding Printer File Attributes using a Report Controller
Portability Considerations |
The features described in this section are ONLY supported on the IBM i. |
You can override a printer file's attributes, but not by using the operating system OVRPRTF command directly from EXEC_OS400 or EXEC_CPF commands.
Use a CALL to QCMDEXC passing a command string containing the OVRPRTF command that you wish to use.
For example, write a program like this:
DEFINE #CMD TYPE(*CHAR) LENGTH(100)
DEFINE #CMDLEN TYPE(*DEC) LENGTH(15) DECIMALS(5) DEFAULT(100)
CHANGE #CMD TO('''OVRPRTF QSYSPRT COPIES(8)''')
CALL PGM(QCMDEXC) PARM(#CMD #CMDLEN) NUM_LEN(*DEFINED)
CALL PROCESS(SALES) FUNCTION(REPT01)
Where process/function SALES/REPT01 is the actual function that produces the report.
Note that the override affects file QSYSPRT.
If SALES/REPT01 used a different printer file in a DEF_REPORT command, use this name instead in the OVRPRTF command.
You will also note that the command string #CMD is a variable, so by using SUBSTRING, CONCAT, etc, you can build up command strings that contain varying information (e.g.: the number of copies in the previous example could be sub-stringed into #CMD from a variable or the FORMTYPE modified).
Additionally, this particular function (ie: the one that does the override) could be written as a general purpose program that is exchanged the output queue name, number of copies, etc and the name of the process/function to call to actually produce the report.
For instance, to invoke report process/function SALES/REPT01 to produce 6 copies onto output queue PRT15, you might code the following:
change #rpt_copies 6
change #rpt_outq 'PRT15'
change #rpt_proc 'SALES'
change #rpt_func 'REPT01'
exchange (#rpt_copies #rpt_outq #rpt_proc #rpt_func)
then
call process(reports) function(invoke)
or
submit process(reports) function(invoke)
where process/function REPORTS/INVOKE is like the first example. It issues the required overrides for copies and output queue and then uses a variable call to invoke the actual reporting program:
call process(#rpt_proc) function(#rpt_func)
This general purpose routine could be even smarter. Instead of exchanging the output queue name to it, it might look up a table keyed by the user's identification to find his/her's associated output queue.
It could become the report controller for the site or system.