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 HTML-Befehlen, 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 Parameterliste des FUNCTION-Blocks. Wenn Sie keine Tabelle im FUNCTION-Block angeben, verwendet Net.Data die Standardtabellendaten.
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>
%ROW{
<TR>
<TD>
<a href="/cgi-bin/db2www/name.mac/details?name=$(V1)&location;=$(V2)">$(V1)</a></TD>
<TD>$(V2)</TD>
%}
</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:
%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: $(NUM_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 der Funktionsparameterliste übergeben. Wenn Sie mehr Tabellen in der Parameterliste übergeben als Sie REPORT-Blöcke angegeben haben und 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ß nur in der SQL-Sprachumgebung der DTW_DEFAULT_REPORT-Wert YES dem Wert MULTIPLE 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: 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.
Beispiel 3: MACRO_FUNCTION-Block
%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.
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
%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 in der Parameterliste des FUNCTION-Blocks erscheinen: zuerst für table1 und dann für table2.
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 Tabellen in der FUNCTION-Parameterliste übergeben werden, werden Standardberichte für die restlichen Tabellen in der Reihenfolge angezeigt, in der sie in der Parameterliste des FUNCTION-Blocks erscheinen: 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: