REPORT 區塊可用來顯示 FUNCTION 區塊所輸出的資料並加以格式化。 雖然您所指定的可能是文字、巨集變數參照與函數呼叫等任何有效的組合, 但一般來說,此種輸出類型通常是套表資料。 您可以選擇在 REPORT 區塊中指定表格名稱。 除了 SQL 及 ODBC 語言環境之外,您未指定表格名稱,則 Net.Data 將使用來自 FUNCTION 參數列示中第一個輸出表格的表格資料。
REPORT 區塊是由三個可選用的部份所組成:
範例:
%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)&loc;=$(V2)">$(V1)</a> </td> <td>$(V2)</td> </tr> %} </table> %}
當建立 REPORT 區塊時,請使用下列指南:
SHIPDATE | RECDATE | SHIPNO | ------------------------------------- 25/05/1997 | 30/05/1997 | 1495194B | ------------------------------------- 25/05/1997 | 28/05/1997 | 2942821G | -------------------------------------
%REPORT{%}
下面的範例說明如何使用特殊變數及 HTML 標籤,來自行設定報表格式。 它會在表格 CustomerTbl 中,顯示姓名、電話號碼、以及傳真號碼:
%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 /> 電話: $(V2) <br /> 傳真: $(V3) <br /> ------------------------------ <br /> %} 取回的記錄總數:$(TOTAL_ROWS) %} %}
查詢報表在瀏覽器中看來如下:
電話查詢結果: ==================== 姓名: Doen, David 電話:422-245-1293 傳真:422-245-7383 ------------------------------ 姓名: Ramirez, Paolo 電話:955-768-3489 傳真:955-768-3974 ------------------------------ 姓名:Wu, Jianli 電話:525-472-1234 傳真:525-472-1234 ------------------------------ 取回的記錄總數:3
Net.Data 會以下列方式來產生報表:
您可以在單一 FUNCTION 或 MACRO FUNCTION 區塊內, 設定多個 REPORT 區塊,建立多個具有一個函數呼叫的報表。
一般而言,您將搭配 DTW_SQL 語言環境與多個 REPORT 區塊一起使用,而這個語言環境具有一個函數, 可呼叫會傳回多個結果集合的儲存程序 (請參閱儲存程序)。 不過,多個 REPORT 區塊可與任一語言環境一起用來建立多個報表。
若要使用多個 REPORT 區塊,請將結果集合名稱置於每一結果集合的儲存程序 CALL 之上。 如果從儲存程序傳回的結果集合的數目比您設定的 REPORT 報表區塊數目還要多, 且如果 Net.Data 內建函數 DTW_DEFAULT_REPORT = "MULTIPLE", 將對與 REPORT 區塊沒有關聯的每一結果集合建立預設報表。 如果未設定任何報表區塊, 且如果 DTW_DEFAULT_REPORT = "YES",將僅建立一個預設報表。 請注意,僅適用於 SQL 語言環境,DTW_DEFAULT_REPORT 值 "YES" 等於 "MULTIPLE" 的值。
下列範例描述您可以用哪些方式使用多個報表區塊。
使用預設報表格式顯示多個報表:
範例 1:DTW_SQL 語言環境
%DEFINE DTW_DEFAULT_REPORT = "MULTIPLE" %FUNCTION(dtw_sql) myStoredProc () { CALL myproc (table1, table2) %}
在這個範例中,儲存程序 myproc 傳回兩個結果集合, 置於 table1 與 table2 中。 因為未設定任何 REPORT 區塊, 將顯示的這兩個表格為預設報表,首先 table1,然後 table2。
範例 2: MACRO_FUNCTION 區塊。 在這個範例中,這兩個表格會傳遞到 MACRO_FUNCTION 區塊。 指定 DTW_DEFAULT_REPORT="MULTIPLE" 之後,Net.Data 會產生這兩個表格的報告。
%DEFINE DTW_DEFAULT_REPORT = "MULTIPLE" %MACRO_FUNCTION multReport (INOUT tablename1, tablename2) { %}
在這個範例中,這兩個表格會傳遞到 MACRO_FUNCTION multReport。 再一次,Net.Data 會依據這兩個表格出現在 MACRO FUNCTION 區塊參數列示中的次序, 來顯示它們的預設報表,首先 table1,然後 table2。
範例 3:DTW_REXX 語言環境
%DEFINE DTW_DEFAULT_REPORT = "YES" %FUNCTION (dtw_rexx) multReport (INOUT table1, table2) { SAY 'Generating multiple default reports...<br />' %}
在這個範例中,這兩個表格會傳遞到 REXX 函數 multReport。 因為設定了 DTW_DEFAULT_REPORT="YES", 所以 Net.Data 僅會顯示第一個表格的預設報表。
經由設定要進行顯示處理的 REPORT 區塊來顯示多個報表:
範例 1:已命名的 REPORT 區塊
%FUNCTION(dtw_sql) myStoredProc () { CALL myproc (table1, table2) %REPORT(table2) { ... %ROW { .... %} ... %} %REPORT(table1) { ... %row { .... %} ... %} %}
在這個範例中,已對 FUNCTION 區塊參數列示中傳遞的這兩個表格設定了 REPORT 區塊。 表格會依據它們在 REPORT 區塊上設定的次序來顯示,首先 table2, 然後 table1。經由在 REPORT 區塊上設定表格名稱,您可以控制報表的顯示次序。
範例 2:沒有名稱的 REPORT 區塊
%FUNCTION(dtw_sql) myStoredProc () { CALL myproc %REPORT { ... %ROW { .... %} ... %} %REPORT { ... %ROW { .... %} ... %} %}
在這個範例中,已對 FUNCTION 區塊參數列示中傳遞的這兩個表格設定了 REPORT 區塊。 因為沒有在 REPORT 區塊上設定任何表格名稱,所以會依據這兩個表格從儲存程序傳回的次序, 來顯示它們的報表。
使用預設報表與 REPORT 區塊的結合來顯示多個報表:
範例:預設報表與 REPORT 區塊的結合
%DEFINE DTW_DEFAULT_REPORT = "MULTIPLE" %FUNCTION(dtw_system) editTables (INOUT table1, table2, table3) { %REPORT(table2) { ... %ROW { .... %} ... %} %}
在這個範例中,僅會指定一個 REPORT 區塊。 因為區塊指定 table2,且 table2 是 CALL 陳述式上列示的第二個結果集合, 所以將使用第二個結果集合來顯示報表。 因為設定的 REPORT 區塊的數目少於從儲存程序傳回的結果集合數目, 所以將顯示剩餘的結果集合的報表:首先顯示第一個結果集合的預設報表 table1, 然後顯示第三個結果集合的預設報表 table3。 指定一個輸出表格 table1 之後,該表格可用於巨集中的處理。
在 FUNCTION 或 MACRO_FUNCTION 區塊時設定多個 REPORT 區塊時, 請使用下列指南與限制。
準則:
限制: