General

Custom Implementations

All reporting functionality is executed through the default implementation of ISalReport interface, in PPJ.Runtime.Reports. It is possible to change the default implementation by assigning the static property Sal.SalReportType.

Example:

public static void Main()
{
 Sal.SalReportType = typeof(LLReport);
}

Having a single interface for reporting functionality, allows for custom implementation to be added in independent modules without changing the ported application.

Multiple reporting systems can also be mixed and used at the same time but changing the Sal.SalReportType property before calling report creation methods.

Details about the implementation of ISalReport interface are in the PPJ Framework Reference.

Debugging

With the PPJ framework you can retrieve the SalReport object from the window

handle return by SalReportPreview or the handle passed to SAM_ReportStart (wParam):

SalReport report = SalReport.FromHandle(e.WParam);

Then you can retrieve the code report object:

ReportDocument doc = (ReportDocument)report.ReportDocument; // <<- For CR
ListLabel ll = (ListLabel)report.ReportDocument; // <<- for LL

This allows you to manipulate the core engine directly.

Last updated