Ein EGL-BIRT-Handlerabschnitt enthält Ereignishandler, bei denen es sich um Funktionen handelt, die bei der Berichterstellung aufgerufen werden. Eine Übersicht zur EGL-Unterstützung für BIRT finden Sie im Abschnitt zur Berichterstellung mit BIRT im Programmiererhandbuch ("Creating reports with BIRT", Programmer's Guide).
In jedem Ereignishandler ist die Parameterliste für den Ereignistyp, auf den die Funktion reagiert, spezifisch. Ein Entwurf für einen BIRT-Handlerabschnitt ist nachfolgend dargestellt:
handler myBIRTHandler type BIRTHandler
function myEventHandler01 (Parameterliste)
{eventType = Ereignistyp, elementName="Name01"...} end
function myEventHandler02 (Parameterliste)
{eventType = Ereignistyp, elementName="Name02"...} end
end
Wie in diesem Entwurf dargestellt, gibt die Verwendung der Eigenschaften eventType und elementName (sowie bei Bedarf weiterer Ereignishandlereigenschaften) an, dass es sich bei der Funktion um einen Ereignishandler handelt.
Diese Schritte bewirken, dass die BIRT-Berichtsengine bei der Berichterstellung eine Gruppe von Ereignishandlern aufrufen kann.
package EGLDataSources;
program arrayProg type BasicProgram {}
function main()
arr customer[0];
cust customer;
cust.customerNumber = 102;
cust.firstName = "Jonathan";
cust.lastName = "Swift";
arr.appendElement(cust);
cust.customerNumber = 103;
cust.firstName = "Mark";
cust.lastName = "Twain";
arr.appendElement(cust);
designFile string = "eglDataSourcesRpt.rptdesign";
rptFile string = "eglDataSourcesArrayRpt.pdf";
myHandler arrayHandler = new arrayHandler;
rpt BIRTReport = new BIRTReport
(designFile, null, rptFile, "pdf", myHandler);
myHandler.setCustomerArray(arr);
rpt.createReportFromDesign();
end
end
record customer type basicrecord
customerNumber int;
firstName string;
lastName string;
end
Der Name eines Ereignishandlers ist für die BIRT-Berichtsengine nicht aussagekräftig. Stattdessen bestimmt die Art der Definition des Ereignishandlers (die Parametertypen und Eigenschaften), wann der Handler aufgerufen wird. Der Ereignistyp (der Wert der Eigenschaft eventType) ist der wichtigste Faktor bei der Bestimmung des Zeitpunkts des Aufrufs.
beforeOpen (für eine Datenquelle eines beliebigen Typs)
openEvent (für eine Scriptdatenquelle)
afterOpen (für die Datenquelle, die im vorhergehenden
'beforeOpen'-Ereignis referenziert wird)
beforeOpen (für ein Dataset, das von der soeben
referenzierten Datenquelle abgeleitet wird)
openEvent (für ein soeben referenziertes Scriptdataset)
afterOpen (für das im oben angeführten
'beforeOpen'-Ereignis referenzierte Dataset)
[in einer Schleife wiederholen, bis alle Zeilen für das soeben referenzierte Dataset abgerufen sind: ]
fetchEvent (eine Zeile aus einem Scriptdataset abrufen)
onFetch (für ein Dataset als Reaktion auf
einen Abruf aufgerufen)
[Schleife beenden]
[für jede aus dem Dataset abgerufene Zeile in einer Schleife
wiederholen, bis alle Berichtselemente erstellt sind: ]
onCreate (wird aufgerufen, wenn ein Berichtselement
für das Layout erstellt wird)
onPageBreak (wird aufgerufen, wenn ein Seitenumbruch angegeben ist)
[Schleife beenden]
beforeClose (für das Dataset, dessen Daten soeben abgerufen wurden)
closeEvent (für ein soeben referenziertes Scriptdataset)
afterCloseDataSet (für das im oben angeführten
'beforeClose'-Ereignis referenzierte Dataset)
beforeClose (für die soeben referenzierte Datenquelle)
closeEvent (für eine soeben referenzierte Scriptdatenquelle)
afterCloseDataSource (für die Datenquelle, die im oben angeführten
'beforeClose'-Ereignis referenziert wird)
Jeder Ereignistyp, dessen Name mit dem Wort 'event' endet, d. h. 'openEvent', 'fetchEvent' und 'closeEvent', wird nur für eine Scriptdatenquelle oder ein Scriptdataset ausgeführt.
Im Folgenden wird die Bedeutung von 'fetchEvent'- und 'onFetch'-Ereignissen erläutert. Wie bereits erwähnt, ist 'fetchEvent' für ein Scriptdataset spezifisch, wogegen 'onFetch' für jedes beliebige Dataset verwendet werden kann (auch für ein Scriptdataset). Sie können das 'fetchEvent-Ereignis verwenden, um Inhalte für eine Zeile bereitzustellen, die Ihr Programm der Berichtsengine bereitstellt; und Sie können das 'onFetch'-Ereignis verwenden, um Daten aus einer einzelnen Zeile zu überprüfen, die von der Berichtsengine abgerufen wurde (bzw. die Sie soeben der Berichtsengine bereitgestellt haben). Jeder Ereignishandler wird wiederholt von der Berichtsengine aufgerufen, bis alle Zeilen abgerufen sind.
Wenn der Ereignistyp 'onFetch' lautet, kann der Ereignishandler auf die zuletzt abgerufene Zeile zugreifen; er kann die Zeile jedoch nicht aktualisieren und gibt keinen booleschen Wert zurück.
Die für einen bestimmten Ereignishandler erforderlichen Parametertypen sind abhängig vom jeweiligen Ereignistyp. Anders ausgedrückt: Der Ereignistyp gibt die Argumenttypen an, die die BIRT-Berichtsengine zur Laufzeit an den Ereignishandler übergibt. In der folgenden Tabelle sind die Ereignistypen in alphabetischer Reihenfolge zusammen mit den zugehörigen Parametertypen in der Parameterreihenfolge aufgeführt.
| Ereignistypen | Parametertypen |
|---|---|
| afterCloseDataSet | DataSetInstance |
| afterCloseDataSource | DataSourceInstance |
| afterOpen (für ein Dataset) | DataSetInstance, ReportContext |
| afterOpen (für eine Datenquelle) | DataSourceInstance, ReportContext |
| beforeClose (für ein Dataset) | DataSetInstance, ReportContext |
| beforeClose (für eine Datenquelle) | DataSourceInstance, ReportContext |
| beforeOpen (für ein Dataset) | DataSetInstance, ReportContext |
| beforeOpen (für eine Datenquelle) | DataSourceInstance, ReportContext |
| closeEvent (für ein durch EGL-Code bereitgestelltes Dataset) | DataSetInstance |
| closeEvent (für eine durch EGL-Code bereitgestellte Datenquelle) | DataSourceInstance |
| fetchEvent (für ein durch EGL-Code bereitgestelltes Dataset) | DataSetInstance, UpdatableDataSetRow (die Funktion gibt einen booleschen Wert zurück) |
| onCreate | Der Typ eines für das Layout verwendeten Berichtselements (z. B. LabelInstance); anschließend ReportContext |
| onFetch (für ein Dataset) | DataSetInstance, DataSetRow, ReportContext |
| onPageBreak | Zuerst der Typ des Berichtselements (z. B. 'LabelInstance'), das für ein Layout an einer beliebigen Stelle auf der Seite vor dem Seitenumbruch verwendet wird, danach 'ReportContext'. |
| openEvent (für ein durch EGL-Code bereitgestelltes Dataset) | DataSetInstance |
| openEvent (für eine durch EGL-Code bereitgestellte Datenquelle) | DataSourceInstance |
Es wird unterschieden zwischen Ereignishandlern, die auf die Laufzeiterstellung von Berichtslayoutelementen wie Bezeichnungen und Images reagieren, und Ereignishandlern, die auf bestimmte Aspekte des Datenzugriffs reagieren. Auf den ersteren Ereignishandlertyp wird bei 'onCreate'- oder 'onPageBreak'-Ereignissen zugegriffen, auf den letzteren bei allen anderen Ereignisarten. Details hierzu finden Sie in den Abschnitten 'BIRT-Ereignishandler für den Datenzugriff' und 'BIRT-Ereignishandler für das Berichtslayout'.