The report driver
The report driver retrieves data, starts the report engine and sends
the data (as input records) to be formatted by the REPORT
routine.
Usage
A report driver can be part of the MAIN
program
block, or it can be in one or more functions.
The report driver typically consists of a loop (such as WHILE
,
FOR
, or FOREACH
) with the following statements to
process the report:
Instruction | Description |
---|---|
START
REPORT |
This statement is required to instantiate the report driver. |
OUTPUT TO
REPORT |
Provide data for one row to the report driver. |
FINISH
REPORT |
Normal termination of the report. |
TERMINATE
REPORT |
Cancels the processing of the report. |
A report driver is started by the START REPORT
instruction.
Once started, data can be provided to the report driver through the OUTPUT TO REPORT
statement. To instruct the report engine to terminate output processing, use the FINISH
REPORT
instruction. To cancel a report from outside the report routine, use
TERMINATE REPORT
(from inside the report routine, you cancel the report
with EXIT REPORT
).
In order to handle report interruption, the report driver
can check if the int_flag
variable is TRUE
in order to stop the
loop if the user interrupts the report execution.
It is possible to execute several report
drivers at the same time. It is even possible to invoke a report driver inside a
REPORT
routine, which is different from the current driver.
The programmer must make sure that the runtime system will always execute these instructions in the following order:
START REPORT
OUTPUT TO REPORT
FINISH REPORT
Example
SCHEMA stores7
MAIN
DEFINE rcust RECORD LIKE customer.*
DATABASE stores7
DECLARE cu1 CURSOR FOR SELECT * FROM customer
LET int_flag = FALSE
START REPORT myrep
FOREACH cu1 INTO rcust.*
IF int_flag THEN EXIT FOREACH END IF
OUTPUT TO REPORT myrep(rcust.*)
END FOREACH
IF int_flag THEN
TERMINATE REPORT myrep
ELSE
FINISH REPORT myrep
END IF
END MAIN