Datenbankfelder referenzieren
Ereignisse
Bisher haben wir uns Skripte mit nur einer Hauptprozedur angesehen, die ausgeführt wird, wenn ein Bericht gestartet wird. In der Hauptprozedur können Anfangseinstellungen vorgenommen und Variablen initialisiert werden. Dies reicht jedoch nicht aus, um die vollständige Kontrolle über den Prozess der Berichtserstellung zu haben. Um so viel Kontrolle wie möglich über die Berichtserstellung zu ermöglichen, hat jedes Objekt mehrere Ereignisse, denen Handler (d.h. Prozeduren im Skript) zugewiesen werden können. Zum Beispiel ermöglicht das Verbinden eines Handlers mit der Datenband, dass Datensätze gefiltert werden, sodass das Band verborgen oder angezeigt werden kann, je nachdem, ob bestimmte Bedingungen erfüllt sind.
Wir demonstrieren den Prozess der Berichtserstellung und die ausgelösten Ereignisse anhand eines einfachen Berichts, der eine Seite enthält und ein „MasterData“-Band mit zwei „Text“-Objekten auf dem Band hat:

Wie oben beschrieben, wird die Hauptprozedur des Skripts zu Beginn der Berichterstellung aufgerufen. Danach beginnen die wesentlichen Schritte zum Erstellen des Berichts. Zuerst wird das „OnStartReport“-Ereignis des "Report"-Objekts aufgerufen. Dann, bevor eine Ausgabeseite erstellt wird, wird das „OnBeforePrint“-Seitenereignis aufgerufen. Dieses Ereignis wird einmal für jede Entwurfseite in der Berichtsvorlage aufgerufen (Entwurfseiten sollten nicht mit den Ausgabeseiten eines Berichts verwechselt werden!). In unserem Beispiel wird das Ereignis einmal aufgerufen, da das Berichtdesign nur aus einer Entwurfseite besteht.
Dann werden die Ereignisse der Datenbänder in folgender Reihenfolge aufgerufen:
1. das „OnBeforePrint“-Ereignis des Bands wird aufgerufen
2. das „OnBeforePrint“-Ereignis jedes im Band enthaltenen Objekts wird aufgerufen
3. jedes Objekt wird mit Daten gefüllt (in unserem Beispiel mit Werten der DB-Felder „Company“ und „Addr1“)
4. das „OnAfterData“-Ereignis jedes Objekts wird aufgerufen
5. Aktionen wie das Positionieren von Objekten auf dem Band (wenn es dehnbare Objekte darunter gibt), das Berechnen der Bandhöhe und das Dehnen (wenn es dehnbar ist) werden durchgeführt
6. das „OnAfterCalcHeight“-Ereignis des Bands wird aufgerufen
7. eine neue Ausgabeseite wird erstellt, wenn das Band nicht genügend Platz im weißen Raum der Seite hat
8. das Band und alle seine Objekte werden auf der Ausgabeseite angezeigt
9. das „OnAfterPrint“-Ereignis jedes Bandobjekts wird aufgerufen
10. das „OnAfterPrint“-Ereignis des Bands selbst wird aufgerufen
Bänder werden weiter gedruckt, solange die Quelle, die mit dem Band verbunden ist, Daten hat. Danach wird der Druck des Berichts gestoppt, das „OnAfterPrint“-Ereignis der Berichtseite wird aufgerufen und schließlich das „OnStopReport“-Ereignis des „Report“-Objekts.
Durch die Verwendung der Ereignisse verschiedener Objekte kann praktisch jeder Schritt des Prozesses zur Berichtserstellung verwaltet werden. Der Schlüssel zur Verwendung von Ereignissen ist ein gründliches Verständnis des Bandausgabeprozesses, der in den nächsten Abschnitten behandelt wird. Die meisten Aktionen können nur mit dem „OnBeforePrint“-Ereignis des Bands durchgeführt werden; alle Änderungen an einem Objekt werden sofort angezeigt. Wenn das Band jedoch dehnbar ist, ist es in diesem Ereignis unmöglich zu sagen, auf welcher Seite das Band gedruckt wird, da die Berechnung der Bandhöhe in Schritt 5 erfolgt. Dies kann jedoch entweder im „OnAfterCalcHeight“-Ereignis in Schritt 6 oder im „OnAfterPrint“-Ereignis in Schritt 9 erfolgen. Beachten Sie, dass im letzten Ereignis das Band bereits ausgegeben wurde, sodass Änderungen an Objekten keine sichtbaren Auswirkungen haben werden.
Es ist wichtig, klar zu verstehen, „wo und wann“ die Bänder ausgegeben werden und das Timing (Aufrufreihenfolge) jedes ihrer Ereignisse zu verstehen. Ebenso für jedes der in den Bändern enthaltenen Objekte.