ReportListener Utility and File-handling Foundation Class
The UtilityReportListener class adds run-time configuration options and file handling (filename verification, file writing) to the core services provided by its parent class, _ReportListener. This class also supplies access to an instance of FrxCursor, a class leveraged from the Report Builder Application, with appropriate error handling if it cannot be found.
Note
UtilityReportListener does not require FrxCursor to function; it just provides transparent management of an instance of this class when requested by a subclass. It is up to subclasses to decide when and if they need this instance, and whether or not they can survive its absence if it is not available at run time.
Category |
Reporting |
---|---|
Default Catalog |
Visual FoxPro Catalog\Foundation Classes\Output\Report Listeners |
Class |
UtilityReportListener |
Base Class |
ReportListener |
Class Library |
_REPORTLISTENER.vcx |
Parent Class |
FXListener (ReportListener FXListener Foundation Class) |
UtilityReportListener and its Configuration Table
UtilityReportListener reads records from a configuration table to initialize various ReportListener values and behavior. You can choose to have UtilityReportListener perform these tasks when the class initializes, at the start of each report run, or both. You can also call its setConfiguration method explicitly at other times.
UtilityReportListener's run-time configuration features leverage the same configuration table format as the Report Output Application uses to register custom ReportListeners for different ListenerType values. For information about how the Report Output Application uses this table, see Report Output Application.
Note
The classes use the same configuration table format as Report Output Application, but not necessarily the same table. To determine the behavior you want for an instance of a class deriving from UtilityReportListener, use the properties and methods of the class to specify that behavior in the table the object uses, not the table Report Output Application uses.
If you instantiate this class outside the Report Output Application, and if the configuration table does not appear to be available, it creates the appropriate table structure. If the class is built into a module (APP, DLL, EXE), it creates this table in the same directory as the module; otherwise, it will create the table in the same directory as the class library (VCX).
UtilityReportListener and its subclasses use the OBJTYPE field in the configuration table to determine which records belong to them, and to what use the records should be put. These classes reserve a range of values in the OBJTYPE field, set at 1000 to 1999.
Each subclass uses a single value in this range, determined by UtilityReportListener's configurationObjType property, to designate records in the table it wishes to use for configuration purposes. UtilityReportListener uses a constant value in REPORTLISTENER.H to set its own value.
Configuration tasks can set any property or invoke any method in your UtilityReportListener subclass. Records in the configuration table with the correct configurationObjType value set class properties or invoke class method code according to the following configuration table usage.
Field |
Usage |
Remarks |
---|---|---|
OBJTYPE |
THIS.ConfigurationObjType |
Determines which records in the table UtilityReportListener reads to set configuration values or trigger configuration method code. |
OBJCODE |
Precedence |
Determines the order in which UtilityReportListener executes the configuration records' instructions. |
OBJNAME |
Property or Method |
UtilityReportListener checks OBJNAME for PEMSTATUS (existence and type). |
OBJVALUE |
Value or Arguments |
If the OBJNAME value is a valid property name, UtilityReportListener uses this code to set the property value using OBJVALUE: STORE EVAL(ObjValue) TO (“THIS.”+ObjName) If the OBJNAME value is a valid method name for the class, UtilityReportListener executes this code: EVAL(“THIS.”+ObjName+”(“+ObjValue+”)” |
OBJINFO |
Not used |
Reserved for user docs, comments. See the Tip below for an example. |
UtilityReportlistener ignores records with blank OBJNAME or OBJVALUE, and records marked DELETED(), whether they have the correct OBJTYPE value or not.
Tip
When UtilityReportListener generates a configuration table it provides two deleted records to show proper syntax for configuration records, using the following code:
INSERT INTO (ALIAS()) VALUES ;
(OUTPUTCLASS_OBJTYPE_CONFIG,0,
'DoMessage','"Welcome to the demo run!",64',
'Sample initialization/config method call')
DELETE NEXT 1
INSERT INTO (ALIAS()) VALUES ;
(OUTPUTCLASS_OBJTYPE_CONFIG,0,
'TargetFileName','"xxx"',
'Sample initialization/config property')
DELETE NEXT 1
Remarks
You will probably not instantiate this class directly; you will instantiate one of the classes that derive from it, such as HtmlListener. These derived classes take advantage of UtilityReportListener's base features, which are file-handling and access to an FrxCursor object instance. They also expose UtilityReportListener's configuration table feature so you can customize their behavior at run time, in many cases, without needing to specify these changes in your code or deriving subclasses from them.
The following table lists public properties and methods added by this class to its parent class, _ReportListener.
Properties and methods |
Description |
---|---|
configurationObjtype Property |
Holds the reserved value used to indicate that a configuration table row provides dynamic configuration information at run time. Default 1000 |
createConfigTable Method |
Creates a configuration table on demand. Syntax: createConfigTable(cDBF [, lOverWrite] ) Return Values: cDBF Parameters: cDBF is the fully-qualified filename of the configuration table. lOverWrite indicates whether you want to overwrite the configuration table if it already exists. |
frxCursor Property |
Holds a reference to an FRXCursor helper object to aid in run-time calculations related to FRX metadata and structure. Default .NULL. |
getConfigTable Method |
Assesses and provides the name of the current configuration table, optionally creating it on disk if it is not available. Syntax: getConfigTable(lForceExternal) Return Values: cDBF Parameters: If you set lForceExternal to .T., this indicates that you want to have an external table written to disk, even if the class can find a built-in version of the table in its code module (APP, EXE, or DLL). |
getPathForExternals Method |
Determines the location at which the current configuration table and any other required external files will be expected. Syntax: getPathForExternals() Return Values: cPath Parameters: None |
loadFrxCursor Property |
Determines whether this class should dynamically load an instance of the helper class. Default .F. |
readConfiguration Property |
Indicates the conditions under which SetConfiguration code will run. 0=never 1 = when the class instance Init runs 2 = when the class instance runs BeforeReport 3 = at both Init and BeforeReport Default 0 |
setConfiguration Method |
Checks the current configuration table for dynamic information in records of appropriate type, and executes these instructions if found. Syntax: SetConfiguration() Return Values: None Parameters: None |
targetFileExt Property |
Provides the default file extension for file output. Default "TXT" |
targetFileName Property |
Provides the filename to which output will be written. A unique name is generated for the class instance, which will be overwritten for successive report runs if not adjusted by the user. Default FORCEPATH (SYS(2015),SYS(2023)) |
targetHandle Property |
Provides a low-level file handle, to which output is written directly when the class provides raw data to the file, otherwise reserves the file during the report run so other applications do not write to it. Default -1 |
verifyConfigTable Method |
Ascertains that the format and contents of the configuration meet requirements, adjusting it if necessary. Syntax: verifyConfigTable(cAlias [, cFailureMsgTable [, cFailureMsgIndexes]]) Return Values: logical Parameters: cAlias is the alias of the table you want to validate. The table must already be opened under this alias when you call the method. cFailureMsgTable provides an optional alternative message to display if the nominated table cannot be verified as having valid configuration table format. If you do not supply this message, UtilityReportListener uses a string constant #DEFINEd in REPORTLISTENERS_LOCS.H. cFailureMsgIndexes provides an optional alternative message to display if the table does not have appropriate indexes. If you do not supply this message, UtilityReportListener uses a string constant #DEFINEd in REPORTLISTENERS_LOCS.H. |
verifyTargetFile Method |
Assures that the nominated filename and its network location are available at the beginning of a file-based report run. Syntax: verifyTargetFile() Return Values: None Parameters: None |
See Also
Concepts
Guidelines for Using Visual FoxPro Foundation Classes
Reference
Visual FoxPro Foundation Classes A-Z