Das Sprachkonstrukt des REPORT-Blocks dient zum Formatieren und Anzeigen der Datenausgabe eines FUNCTION-Blocks. Diese Ausgabe besteht in der Regel aus Tabellendaten, obwohl jede gültige Kombination aus Text, Makrovariablenverweisen und Funktionsaufrufen angegeben werden kann. Wahlfrei kann im REPORT-Block ein Tabellenname angegeben werden. Wenn kein Tabellenname angegeben wird, verwendet Net.Data die Tabellendaten aus der ersten Ausgabetabelle in der FUNCTION-Parameterliste.
Der REPORT-Block besteht aus drei Teilen, die jeweils wahlfrei sind:
Beispiel:
%REPORT{
<H2>Query Results</H2>
<P>Select a name for details.
<TABLE BORDER=1>
<TR>
<TD>Name</TD>
<TD>Location</TD></TR>
%ROW{
<TR>
<TD>
<a href="/cgi-bin/db2www/name.d2w/details?name=$(V1)&location;=$(V2)">$(V1)</a>
</TD>
<TD>$(V2)</TD>
</TR>
%}
</TABLE>
%}
Halten Sie die folgenden Richtlinien ein, wenn Sie REPORT-Blöcke erstellen:
SHIPDATE | RECDATE | SHIPNO | ------------------------------------- 25/05/1997 | 30/05/1997 | 1495194B | ------------------------------------- 25/05/1997 | 28/05/1997 | 2942821G | -------------------------------------
%REPORT{%}
Das folgende Beispiel zeigt, wie Sie Berichtsformate mit Hilfe spezieller Variablen und HTML-Befehle anpassen können. Es werden die Namen, Telefonnummern und Faxnummern aus der Tabelle CustomerTbl angezeigt:
%DEFINE SET_TOTAL_ROWS="YES"
...
%FUNCTION(DTW_SQL) custlist() {
SELECT Name, Phone, Fax FROM CustomerTbl
%REPORT{
<I>Phone Query Results:</I>
<BR>
=====================
<BR>
%ROW{
Name: <B>$(V1)</B>
<BR>
Phone: $(V2)
<BR>
Fax: $(V3)
<BR>
------------------------------
<BR>
%}
Total records retrieved: $(TOTAL_ROWS)
%}
%}
Der hieraus erstellte Bericht sieht im Web-Browser wie folgt aus:
Phone Query Results: ==================== Name: Doen, David Phone: 422-245-1293 Fax: 422-245-7383 ------------------------------ Name: Ramirez, Paolo Phone: 955-768-3489 Fax: 955-768-3974 ------------------------------ Name: Wu, Jianli Phone: 525-472-1234 Fax: 525-472-1234 ------------------------------ Total records retrieved: 3
Der Bericht wurde von Net.Data wie folgt generiert:
Sie können mehrere REPORT-Blöcke in einem einzelnen FUNCTION- oder MACRO FUNCTION-Block angeben, um mehrere Berichte mit einem Funktionsaufruf zu generieren.
In der Regel werden mehrere REPORT-Blöcke in der Sprachumgebung DTW_SQL mit einer Funktion verwendet, die eine gespeicherte Prozedur aufruft, die mehrere Ergebnismengen zurückgibt (siehe Gespeicherte Prozeduren). Mehrere REPORT-Blöcke können jedoch in jeder Sprachumgebung verwendet werden, um mehrere Berichte zu erstellen.
Zur Verwendung mehrerer REPORT-Blöcke müssen Sie eine Net.Data-Tabellenvariable in die Funktionsparameterliste stellen. Wenn mehr Ergebnismengen von der gespeicherten Prozedur zurückgegeben werden als Sie REPORT-Blöcke angegeben haben und wenn die Angabe der integrierten Net.Data-Funktion DTW_DEFAULT_REPORT = "MULTIPLE" ist, werden Standardberichte für jede Tabelle definiert, die keinem REPORT-Block zugeordnet ist. Wenn keine REPORT-Blöcke angegeben sind und DTW_DEFAULT_REPORT = "YES" ist, wird nur ein Standardbericht generiert. Beachten Sie, daß der Wert "YES" für DTW_DEFAULT_REPORT dem Wert "MULTIPLE" nur in der SQL-Sprachumgebung entspricht.
Die folgenden Beispiele zeigen, wie Sie mehrere REPORT-Blöcke verwenden können.
Gehen Sie wie folgt vor, um mehrere Berichte mit den Standardberichtsformaten anzuzeigen:
Beispiel 1: Sprachumgebung DTW_SQL
%DEFINE DTW_DEFAULT_REPORT = "MULTIPLE"
%FUNCTION (dtw_sql) myStoredProc (OUT table1, table2) {
CALL myproc %}
In diesem Beispiel gibt die gespeicherte Prozedur myproc zwei Ergebnismengen zurück, die in table1 und table2 gestellt werden. Weil keine REPORT-Blöcke angegeben sind, werden Standardberichte für beide Tabellen angezeigt, zuerst für table1 und dann für table2.
Beispiel 2: MACRO_FUNCTION-Block. In diesem Beispiel werden zwei Tabellen an den MACRO_FUNCTION-Block übergeben. Wenn DTW_DEFAULT_REPORT="MULTIPLE" angegeben ist, werden für beide Tabellen Standardberichte generiert.
%DEFINE DTW_DEFAULT_REPORT = "MULTIPLE"
%MACRO_FUNCTION multReport (INOUT tablename1, tablename2) {
%}
In diesem Beispiel werden zwei Tabellen an die MACRO_FUNCTION-Funktion multReport übergeben. Net.Data zeigt wiederum Standardberichte für die zwei Tabellen in der Reihenfolge an, in der sie in der Parameterliste des MACRO FUNCTION-Blocks erscheinen: zuerst für table1 und dann für table2.
Beispiel 3: Sprachumgebung DTW_REXX
%DEFINE DTW_DEFAULT_REPORT = "YES"
%FUNCTION (dtw_rexx) multReport (INOUT table1, table2) {
SAY 'Generating multiple default reports...<BR>'
%}
In diesem Beispiel werden zwei Tabellen an die REXX-Funktion multReport übergeben. Da DTW_DEFAULT_REPORT="YES" angegeben ist, zeigt Net.Data nur für die erste Tabelle einen Standardbericht an.
Gehen Sie wie folgt vor, um mehrere Berichte durch Angabe von REPORT-Blöcken zur Anzeigeverarbeitung anzuzeigen:
Beispiel 1: Benannte REPORT-Blöcke
%FUNCTION(dtw_sql) myStoredProc (OUT table1, table2) {
CALL myproc (table1, table2)
%REPORT(table2) {
...
%ROW { .... %}
...
%}
%REPORT(table1) {
...
%row { .... %}
...
%}
%}
In diesem Beispiel wurden REPORT-Blöcke für beide der in der Parameterliste des FUNCTION-Blocks angegebenen Tabellen angegeben. Die Tabellen werden in der Reihenfolge angezeigt, in der sie in den REPORT-Blöcken angegeben sind: table2 zuerst und dann table1. Durch Angabe eines Tabellennamens im REPORT-Block können Sie die Reihenfolge steuern, in der die Berichte angezeigt werden.
Beispiel 2: Nicht benannte REPORT-Blöcke
%FUNCTION(dtw_sql) myStoredProc (OUT table1, table2) {
CALL myproc
%REPORT {
...
%ROW { .... %}
...
%}
%REPORT {
...
%ROW { .... %}
...
%}
%}
In diesem Beispiel wurden REPORT-Blöcke für beide der in der Parameterliste des FUNCTION-Blocks angegebenen Tabellen angegeben. Da keine Tabellennamen in den REPORT-Blöcken angegeben sind, werden Berichte für die zwei Tabellen in der Reihenfolge angezeigt, in der sie von der gespeicherten Prozedur zurückgegeben werden.
Gehen Sie wie folgt vor, um mehrere Berichte mit einer Kombination aus Standardberichten und REPORT-Blöcken anzuzeigen:
Beispiel: Eine Kombination aus Standardberichten und REPORT-Blöcken
%DEFINE DTW_DEFAULT_REPORT = "MULTIPLE"
%FUNCTION(dtw_system) editTables (INOUT table1, table2, table3) {
%EXEC{ /qsys.lib/mylib.lib/mypgm.pgm %}
%REPORT(table2) {
...
%ROW { .... %}
...
%}
%}
In diesem Beispiel ist nur ein REPORT-Block angegeben. Weil er den Tabellennamen table2 angibt, wird diese Tabelle verwendet, um den Bericht anzuzeigen. Da weniger REPORT-Blöcke angegeben sind als Ergebnismengen von der gespeicherten Prozedur übergeben werden, werden Standardberichte für die restlichen Ergebnismengen in der folgenden Reihenfolge angezeigt: zuerst ein Standardbericht für table1 und dann ein Standardbericht für table3.
Beachten Sie die folgenden Richtlinien und Einschränkungen für die Angabe mehrerer REPORT-Blöcke in einem FUNCTION- oder MACRO_FUNCTION-Block.
Richtlinien:
Einschränkungen: