IBM Books

OS/400 版的 Net.Data 管理與程式設計手冊

報告區塊

REPORT 區塊可用來顯示 FUNCTION 區塊所輸出的資料並加以格式化。 雖然您所指定的可能是 HTML 標籤、巨集變數參照與函數呼叫等任何有效的組合, 但一般來說,此種輸出類型通常是套表資料。 您可以選擇在 REPORT 區塊中指定表格名稱。 若您未指定表格名稱,則 Net.Data 使用 FUNCTION 區塊的參數列示中第一個輸出表格的套表資料。 若您未在 FUNCTION 區塊中指定表格,則 Net.Data 使用預設套表資料。

REPORT 區塊是由三個可選用的部份所組成:

範例:

%REPORT{
<H2>查詢結果</H2>
<P>選取名稱以顯示明細。
<TABLE BORDER=1>
<TR><TD>姓名</TD><TD>位置</TD>
%ROW{
  <TR>
  <TD>
<a href="/cgi-bin/db2www/name.mac/details?name=$(V1)&location;=$(V2)">$(V1)</a></TD>
<TD>$(V2)</TD>
%}
     </TABLE>
%}

REPORT 區塊指南

當建立 REPORT 區塊時,請使用下列指南:

範例:自行設定報表

下面的範例說明如何使用特殊變數及 HTML 標籤,來自行設定報告格式。 它自表格 CustomerTbl 中,顯示名稱、電話號碼、以及傳真號碼:

%FUNCTION(DTW_SQL) custlist() {
     SELECT Name, Phone, Fax FROM CustomerTbl
%REPORT{
<I>電話查詢結果:</I>
<BR>
=====================
<BR>
%ROW{
   姓名: <B>$(V1)</B>
<BR>
電話: $(V2)
<BR>
傳真: $(V3)
<BR>
------------------------------
<BR>
   %}
   取回的記錄總數: $(NUM_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 會以下列方式來產生報告:

  1. 在報告開頭列印一次電話查詢結果:。 此本文以及區隔符號行均是 REPORT 區塊的標題部份。

  2. 在取回的每一橫列上,對變數 V1V2V3, 分別提供「姓名」、「電話」及「傳真」的值。 這個本文是 REPORT 區塊的註腳部份。

  3. 在取回每一列之後,就繪製一條直線,以便閱讀。

  4. 在報告尾端列印一次字串取回的記錄總數:NUM_ROWS 的值。 (這個本文是 REPORT 區塊的註腳部份。)

多個 REPORT 區塊

您可以在單一 FUNCTION 或 MACRO FUNCTION 區塊內, 設定多個 REPORT 區塊,建立多個具有一個函數呼叫的報表。

一般而言,您將搭配 DTW_SQL 語言環境與多個 REPORT 區塊一起使用,而這個語言環境具有一個函數, 可呼叫會傳回多個結果集合的儲存程序 (請參閱儲存程序)。 不過,多個 REPORT 區塊可與任一語言環境一起用來建立多個報表。

若要使用多個 REPORT 區塊,您必須在函數參數列示中傳遞 Net.Data 表格變數。 如果您在參數列示中傳遞的表格的數目比您設定的報表區塊數目還要多, 將對與報表區塊沒有關聯的每一表格建立預設報表。如果未設定任何報表區塊, 且如果 DTW_DEFAULT_REPORT = "YES",將僅建立一個預設報表。 請注意,僅適用於 SQL 語言環境,DTW_DEFAULT_REPORT 值 YES 等於 MULTIPLE 的值。

範例

下列範例描述您可以用哪些方式使用多個報表區塊。

使用預設報表格式顯示多個報表:

範例 1:DTW_SQL 語言環境

%define DTW_DEFAULT_REPORT = "MULTIPLE"
%function (dtw_sql) myStoredProc (OUT table1, table2) {
     CALL myproc   %}

在這個範例中,儲存程序 myproc 傳回兩個結果集合, 置於 table1table2 中。因為未設定任何 REPORT 區塊, 將顯示的這兩個表格為預設報表,首先 table1,然後 table2

範例 2:DTW_REXX 語言環境

%define DTW_DEFAULT_REPORT = "YES"
%function (dtw_rexx) multReport (INOUT table1, table2) {
     SAY '正在建立多個預設報表...<BR>'
%}

在這個範例中,這兩個表格會傳遞到 REXX 函數 multReport。 既然設定了 DTW_DEFAULT_REPORT="YES",Net.Data 僅會顯示第一個表格的預設報表。

範例 3:MACRO_FUNCTION 區塊

%define DTW_DEFAULT_REPORT = "MULTIPLE"
%macro_function multReport (INOUT tablename1, tablename2) { 
%}

在這個範例中,這兩個表格會傳遞到 MACRO_FUNCTION multReport。 再一次,Net.Data 會依據這兩個表格出現在 MACRO FUNCTION 區塊參數列示中的次序, 來顯示它們的預設報表,首先 table1,然後 table2

經由設定要進行顯示處理的 REPORT 區塊來顯示多個報表:

範例 1:已命名的 REPORT 區塊

%function(dtw_sql) myStoredProc (OUT table1, table2) {
    CALL myproc
 
   %REPORT(table2) { 
     ...    
     %row {  ....   %}   
     ...
   %}
   
   %REPORT(table1) {     
     ...
     %row {  ....   %} 
     ...
   %}
%}

在這個範例中,已對 FUNCTION 區塊參數列示中傳遞的這兩個表格設定了 REPORT 區塊。 表格會依據它們在 REPORT 區塊上設定的次序來顯示,首先 table2, 然後 table1。經由在 REPORT 區塊上設定表格名稱,您可以控制報表的顯示次序。

範例 2:沒有名稱的 REPORT 區塊

%function(dtw_sql) myStoredProc (OUT table1, table2) {
    CALL myproc   
   
%REPORT {
     ...    
     %row {  ....   %}  
     ...
   %} 
%REPORT {    
     ...    
     %row {  ....   %}     
     ...  
   %}  
%}

在這個範例中,已對 FUNCTION 區塊參數列示中傳遞的這兩個表格設定了 REPORT 區塊。 因為沒有在 REPORT 區塊上設定任何表格名稱,所以 Net.Data 會依據這兩個表格出現在 FUNCTION 區塊參數列示中的次序, 來顯示它們的報表,首先 table1,然後 table2

使用預設報表與 REPORT 區塊的結合來顯示多個報表:

範例:預設報表與 REPORT 區塊的結合

%define DTW_DEFAULT_REPORT = "MULTIPLE"
%function(dtw_system) editTables (INOUT table1, table2, table3) {  
  %EXEC{ /qsys.lib/mylib.lib/mypgm.pgm %}
  %REPORT(table2) {    
    ...      
    %row {  ....   %}    
    ...   
  %}    
%}

在這個範例中,僅設定了一個 REPORT 區塊,且因為它設定了表格名稱 table2, 所以它會使用此表格來顯示它的報表。 因為設定的 REPORT 區塊的數目少於 FUNCTION 參數列示中所傳遞的表格的數目, 所以將依據其餘表格出現在 FUNCTION 區塊參數列示中的次序,來顯示它們的報表; 首先顯示 table1 的預設報表,然後 table3 的預設報表。

多個 REPORT 區塊的指南與限制

在 FUNCTION 或 MACRO_FUNCTION 區塊時設定多個 REPORT 區塊時, 請使用下列指南與限制。

準則:

限制:


[ 頁面頂端 | 前一頁 | 下一頁 | 目錄 | 索引 ]