This package defines 3 key interfaces ---- IReportItemQuery, IReportItemGeneration, and IReportItemPresentation ---- that are used to process an extended item at query preparation, report generation and report rendering times. Among the three interfaces, only IReportItemPresentation is required, and the other two are optional. The execution flow is as follows:

- Design engine creates a new instance of the extended item.
- At report query preparation time, generation engine detects that the element is an extended item. It dynamically creates the `IReportItemQuery` object and calls `getReportQueries()` to receive all the queries.
- When report is generating, an `IReportItemGeneration` object is created for each instance of the extended item.
- The onRowSets methos is called, and an array of rowsets is passed to the extension.
- On each of the row set, the extension could retrieve data row-by-row, and does processing.
- Check if the extension has state information to be serialized. If so, call serialize method.
- Does generation time clean up.
- At presentation time, an `IReportItemPresentation` object is created for each instance of the extended item.
- Check if the extension needs deserialization. If so, restores the generation time state.
- The onRowSets methos is called, and an array of rowsets is passed to the extension.
- On each of the row set, the extension could retrieve data row-by-row, and does processing.
- Receives the returned results from the onRowSets method.
- Does generation time clean up.

## Package Specification

Provides interfaces and classes to support engine extensions. @since 1.0