Ein EGL-Berichtshandler des Typs 'JasperReport' stellt Codeblöcke zur Verfügung, auf die die JasperReport-Engine zur Ausführungszeit zugreifen kann. Vordefinierte Funktionsnamen binden einige dieser Codeblöcke an Ereignisse, die auftreten, wenn JasperReports einen Bericht füllt. Zu solchen Ereignissen können der Beginn oder das Ende einer Seite, der Beginn oder das Ende einer Position oder der Beginn oder das Ende des Berichts selbst gehören. Sie können weitere, angepasste Funktionen direkt aus der Quelle der XML-Designdatei aufrufen.
Der Assistent für neuen EGL-Berichtshandler zeigt eine Liste mit Funktionsnamen an, die den Ereignissen für das Füllen von Berichten entsprechen. Beispielsweise ruft JasperReports 'beforePageInit()' auf, bevor eine Seite geöffnet wird. Sie müssen für diese Funktionen den Code erstellen.
Mit diesen wenigen Beispielen können nicht alle komplexen Sachverhalte angesprochen werden, die in einem Berichtshandler möglich sind. Weitere Details finden Sie in der Dokumentation zu JasperReports.
handler handlerName type jasperReport
// Verwendungsdeklarationen
use usePartReference;
// Konstantendeklarationen)
const constantName constantType = literal;
// Datendeklarationen
identifierName declarationType;
// Vordefinierte Jasper-Rückruffunktionen
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
// Datendeklarationen
report_title String;
// Jasper-Rückruffunktion
function beforeReportInit()
report_title = getReportParameter("ReportTitle");
end
end
handler my_report_handler type jasperReport
// Datendeklarationen
item_count int;
// Jasper-Rückruffunktion
function beforeDetailEval()
item_count = getReportVariableValue("itemCount");
end
function afterDetailEval()
setReportVariableValue("itemCount", (item_count + 1));
end
end
Sie müssen Variablentypen im Berichtshandler mit denen in Ihrer XML-Quellendatei abgleichen.handler my_report_handler type jasperReport
// Datendeklarationen
employee_first_name String;
// Jasper-Rückruffunktion
function beforeColumnInit()
employee_first_name = getFieldValue("fName");
end
end
handler my_report_handler type jasperReport
// Datendeklarationen
customer_array customerRecordType[];
c customerRecordType;
// Jasper-Rückruffunktion
function beforeReportInit()
customer ReportData;
//ReportData-Objekt für den Unterbericht 'Kunde' (customer) erstellen
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>
Die Wortfolge 'Hello, world!' wird am Ende des Berichts gedruckt.