An EGL report handler of type JasperReport provides blocks of code that the JasperReports engine can access at run time. Predefined function names tie some of these code blocks to events that occur when JasperReports fills a report. Such events might include the beginning or end of a page, the beginning or end of a line item, or the beginning or end of the report itself. You can call other, custom functions directly from the XML design file source.
The New EGL Report Handler wizard will give you a list of function names that correspond to report fill events. For example, JasperReports will invoke "beforePageInit()" before entering a page. You must create the code for these functions.
These few examples cannot address all the complexities possible in a report handler. For more detail, see the JasperReports documentation.
handler handlerName type jasperReport
// Use Declarations
use usePartReference;
// Constant Declarations)
const constantName constantType = literal;
// Data Declarations
identifierName declarationType;
// Pre-defined Jasper callback functions
function beforeReportInit()
end
function afterReportInit()
end
function beforePageInit()
end
function afterPageInit()
end
function beforeColumnInit()
end
function afterColumnInit()
end
function beforeGroupInit(stringVariable string)
end
function afterGroupInit(stringVariable string)
end
function beforeDetailEval()
end
function afterDetailEval()
end
end
handler my_report_handler type jasperReport
// Data Declarations
report_title String;
// Jasper callback function
function beforeReportInit()
report_title = getReportParameter("ReportTitle");
end
end
handler my_report_handler type jasperReport
// Data Declarations
item_count int;
// Jasper callback function
function beforeDetailEval()
item_count = getReportVariableValue("itemCount");
end
function afterDetailEval()
setReportVariableValue("itemCount", (item_count + 1));
end
end
You must match variable types in the report handler with
those in your XML source file.handler my_report_handler type jasperReport
// Data Declarations
employee_first_name String;
// Jasper callback function
function beforeColumnInit()
employee_first_name = getFieldValue("fName");
end
end
handler my_report_handler type jasperReport
// Data Declarations
customer_array customerRecordType[];
c customerRecordType;
// Jasper callback function
function beforeReportInit()
customer ReportData;
//create the ReportData object for the Customer subreport
c.customer_num = getFieldValue("c_customer_num");
c.fname = getFieldValue("c_fname");
c.lname = getFieldValue("c_lname");
c.company = getFieldValue("c_company");
c.address1 = getFieldValue("c_address1");
c.address2 = getFieldValue("c_address2");
c.city = getFieldValue("c_city");
c.state = getFieldValue("c_state");
c.zipcode = getFieldValue("c_zipcode");
c.phone = getFieldValue("c_phone");
customer_array.appendElement(c);
customer.data = customer_array;
addReportData(customer, "saveCustomer");
end
end
<jasperReport name="MasterReport" ... scriptletClass="subreports.my_report_handler">
...
<subreport>
<dataSourceExpression>
<![CDATA[(JRDataSource)(((subreports.SubReportHandler)
$P{REPORT_SCRIPTLET}).getReportData( new String("saveCustomer")))]]>;
</dataSourceExpression>
<subreportExpression class="java.lang.String">
<![CDATA["C:/RAD/workspaces/customer_subreport.jasper"]]>;
</subreportExpression>
</subreport>
...
</jasperReport>
handler my_report_handler type jasperReport
function hello () returns (String)
return("Hello, world!");
end
end
<jasperReport name="MasterReport" ... scriptletClass="my_package.my_report_handler">
...
<summary>
<band height="40">
<textField>
<reportElement positionType="Float" x="0" y="20" width="500" height="15"/>
<textElement textAlignment="Center">
<font reportFont="Arial_Bold" size="10"/>
</textElement>
<textFieldExpression class="java.lang.String">
<![CDATA[((my_package.my_report_handler)$P{REPORT_SCRIPTLET}).hello()]]>
</textFieldExpression>
</textField>
</band>
</summary>
...
</jasperReport>
The phrase "Hello, world!" will print at the end of the report.