Reports Information
If you have other iterable objects that are not derived
from Stream, SequenceableCollection, or one of the
QueryResultTable classes, you can enable them for reporting by
implementing the following protocol.
To implement the protocol successfully, the object must have the following
behavior:
- Have an attribute that represents the current object in the iteration
- Be able to iterate through its contents from an initial state, when
iteration will make the first object in the collection the current object
- Be able to indicate when iteration is complete
- Be capable of resetting its iteration to the initial state
This behavior must be exposed to the Report Iterator by implementing the
following instance methods:
- abtStepMessage
- Returns a DirectedMessage indicating which object can perform the
iteration, which message should be sent to cause the current object to advance
to the next object, and which parameters should be passed. The return
value of the step message should indicate whether or not the iteration was
successful, that is, whether or not there was another object available.
- abtResetMessage
- Returns a DirectedMessage describing which object can reset the
receiver's iteration, which message should be sent to reset iteration,
and which parameters should be passed. The return value of the reset
message should indicate whether or not the reset was successful. The
reset message will be sent before each report is viewed, previewed, or printed
to make sure that all iteration starts again from the beginning.
The following class methods should be implemented to assist quick
reporting:
- abtCurrentFeatureName
- Returns the name of the attribute that is the current feature. This
feature will be used to set the body fields of a quick report. The
attribute of this feature will be presented in the list of attributes when
creating a quick report.
- abtIsIterable
- Returns true if the class can be iterated in a report or
false if it cannot. This method decides whether a Report
Form or Report Iterator should be created when a quick report is
requested. If a class implements abtStepMessage, then it is
assumed that the class is iterable. If a class returns another object
as the recipient of its step message, and is not iterable itself, then it
should override abtIsIterable to return false.
OrderedCollection, for example, is not directly iterable. It
returns a stream as the receiver of abtStepMessage.
OrderedCollection, therefore, overrides abtIsIterable to
return false.
You can see the VisualAge implementations of these protocols in the
PositionableStream class in AbtRunPartsApp or in the
Collection classes in AbtRunReportApp. If you
have a database feature installed, see the implementation in
AbtQueryResultTable in
AbtRunDatabaseQueryPartApp.
[ Top of Page | Previous Page | Next Page | Table of Contents | Index ]