LoadReport Event
Occurs previous to a report run, before output is initialized in the BeforeReport event. Provides access to report command clauses.
PROCEDURE Object.LoadReport
Parameters
None.
Remarks
Applies To: ReportListener Object.
LoadReport and UnloadReport are the two framing events of the report or label run; from the Report System's point of view, the report run has not yet started when it invokes LoadReport, and the report run has already ended when it invokes UnloadReport.
Consequently, these events allow you to perform certain setup and cleanup activities. For example, in LoadReport, you can change the contents of the report or label definition table (frx or lbx) because the Report Engine and ReportListener have not read the contents of the table at this point. The print job has not yet started, unless this REPORT FORM command continues the print job started in an earlier REPORT FORM command that used the NOPAGEEJECT keyword, so you can change the current printer setup.
Note
For information about the order of events in a report run, see Understanding Visual FoxPro Object-Assisted Reporting.
If you write code in the LoadReport event that returns a value of False (.F.), the report run will not proceed. The print spool will not be opened, preview will not be instantiated, further Listener events will not be called, and so on. This behavior is similar to the Load event for forms and formsets; for forms, if Load returns .F., the form does not instantiate.
The clauses with which you invoked REPORT FORM or LABEL FORM are available for your use in LoadReport; however, certain values are not yet calculated at this point. For more information, see CommandClauses Property.
Example
In the following example class definition, the report definition file (frx) specified in the REPORT FORM command is "swapped" for a temporary file during the LoadReport event. It is replaced in its original position during the UnloadReport event.
DEFINE CLASS rlswap AS ReportListener
ListenerType = 1 && to see the results, use a preview
realFRX = ""
useFRX = ""
tempFRX = FORCEPATH(SYS(2015),SYS(2023))
PROCEDURE LoadReport
THIS.realFRX = THIS.CommandClauses.FILE
THIS.useFRX = GETFILE("frx")
IF EMPTY(THIS.useFRX)
RETURN .F.
ENDIF
SET DATASESSION TO THIS.FRXDataSession
SET SAFETY OFF && it's scoped to session anyway
THIS.ClearFRX(THIS.tempFRX)
RENAME (FORCEEXT(THIS.realFRX,"frx")) TO ;
FORCEEXT(THIS.tempFRX,"frx")
RENAME (FORCEEXT(THIS.realFRX,"frt")) TO ;
FORCEEXT(THIS.tempFRX,"frt")
COPY FILE (FORCEEXT(THIS.useFRX,"frx")) TO ;
FORCEEXT(THIS.realFRX,"frx")
COPY FILE (FORCEEXT(THIS.useFRX,"frt")) TO ;
FORCEEXT(THIS.realFRX,"frt")
ENDPROC
PROTECTED PROCEDURE clearFRX(tFRX)
IF FILE(FORCEEXT(tFRX,"frx"))
ERASE FORCEEXT(tFRX,"frx")) NORECYCLE
ENDIF
IF FILE(FORCEEXT(tFRX,"frt"))
ERASE FORCEEXT(tFRX,"frt")) NORECYCLE
ENDIF
ENDPROC
PROCEDURE UnloadReport
SET DATASESSION TO THIS.FRXDataSession
USE IN FRX
THIS.clearFRX(THIS.realFRX)
RENAME (FORCEEXT(THIS.tempFRX,"frx")) TO ;
FORCEEXT(THIS.realFRX,"frx")
RENAME (FORCEEXT(THIS.tempFRX,"frt")) TO ;
FORCEEXT(THIS.realFRX,"frt")
ENDPROC
ENDDEFINE