IBM Books

Net.Data 參考手冊


巨集語言結構

本章說明使用在 Net.Data 巨集檔中的語言結構。

每一個語言結構說明,都有下列資訊:

目的
定義使用 Net.Data 巨集中語言結構的目的。

語法
提供語言結構之邏輯結構的圖解。

參數
定義語法圖內的所有元素, 並提供其他語言結構的語法及範例的交叉參考。

上下文
解釋語言結構可用在 Net.Data 巨集結構中的何處。

限制
定義可以包含哪些元素,並指定用法限制。

範例
提供簡單的範例,並說明如何在 Net.Data 巨集中使用關鍵字陳述式或區塊。

下列是用於巨集中的結構;關於語法及範例的詳細資訊,請參閱每一個結構說明。

備註區塊

目的

替 Net.Data 巨集的函數製作文件。因為 COMMENT 區塊可以使用在巨集檔中任何地方, 所以沒有在其他語法圖內製作文件。

語法

>>-%{---本文---%}----------------------------------------------><
 

本文
一或多行上的任何字串。Net.Data 不處理所有備註內容。

上下文

備註可以放置在一個 Net.Data 巨集中任何兩個 Net.Data 語言結構之間。

限制

接受任何本文或字元;但是備註區塊不可為巢狀。

範例

範例 1:基本備註區塊

%{
這是備註區塊。不限制行數及字元。Net.Data 不處理它的內容。
%}

範例 2: FUNCTION 區塊中的備註

%function(DTW_REXX) getAddress(IN  name,   %{ 客戶名稱 %}
                               IN  phone,  %{ 客戶電話號碼 %}
                               OUT address %{ 客戶地址 %}
                              )
{
     ....
%}

範例 3:HTML 區塊中的備註

%html(report) {
 
%{ 執行查詢並儲存結果於表格 %}
@myQuery(resultTable)
 
%{ 建置套表以顯示一頁資料 %}
<form method="POST" action="report">
 
%{ 傳送表格給 REXX 函數,以傳送資料輸出 %}
@displayRows(START_ROW_NUM, submit, resultTable, RPT_MAX_ROWS)
 
%{ 將 START_ROW_NUM 作為隱藏變數傳給下一筆呼叫 %}
<input name="START_ROW_NUM" type="hidden" value="$(START_ROW_NUM)">
 
%{ 建置下一個或前一個按鈕 %}
%if (submit == "both" || submit == "next_only")
  <input name="submit" type="submit" value="next">
%endif
%if (submit == "both" || submit == "prev_only")
  <input name="submit" type="submit" value="previous">
%endif
</form>
%}

範例 4: DEFINE 區塊中的備註

%define {
   START_ROW_NUM = "1"        %{ 輸出表格的起始列列號 %}
   RPT_MAX_ROWS = "25"        %{ 表格列數的最大值 %}
   resultTable = %table       %{ 保留查詢結果的表格 %}
%}
 

DEFINE 區塊或陳述式

目的

DEFINE 區段在巨集中的宣告部份定義變數名稱, 可以是陳述式或是區塊。

變數定義使用雙引號 (""),可以在單一行, 或使用大括弧加上百分比符號 ({ %}),可以分成多行。 定義了變數之後,您可以在巨集的任何地方參考它。

語法

>>-%DEFINE----+----------------------------+-------------------->
              |             (1)            |
              '-(--+-STATIC---------+---)--'
                   |           (1)  |
                   '-TRANSIENT------'
 
>-----+-| 定義登錄 |---------------------------+---------------><
      '-{--+---------------------------+---%}--'
           |  .---------------------.  |
           |  V                     |  |
           '----+-定義登錄-------+--+--'
                '-include 陳述式-'
 
定義登錄
 
                        .----------------.
                        V                |
|---+-變數名稱--=--+-"-----+----------+--+---"---+-+------------|
    |              |       +-字串-----+          | |
    |              |       +-變數參照-+          | |
    |              |       '-函數呼叫-'          | |
    |              |    .----------------.       | |
    |              |    V                |       | |
    |              +-{-----+----------+--+---%}--+ |
    |              |       +-字串-----+          | |
    |              |       +-變數參照-+          | |
    |              |       +-函數呼叫-+          | |
    |              |       '-換行-----'          | |
    |              +-exec 陳述式-----------------+ |
    |              +-table 陳述式----------------+ |
    |              +-envvar 陳述式---------------+ |
    |              +-| 條件式變數 |--------------+ |
    |              '-| 縮寫的條件式變數 |--------' |
    '-列示陳述式-----------------------------------'
 
條件式變數
 
                             .----------------.
                             V                |
|---+-----------+--?----+-"-----+----------+--+---"---+--------->
    '-變數名稱--'       |       +-字串-----+          |
                        |       +-變數參照-+          |
                        |       '-函數呼叫-'          |
                        |    .----------------.       |
                        |    V                |       |
                        '-{-----+----------+--+---%}--'
                                +-字串-----+
                                +-變數參照-+
                                '-函數呼叫-'
 
>-----+------------------------------------+--------------------|
      |         .----------------.         |
      |         V                |         |
      '-:--+-"-----+----------+--+---"---+-'
           |       +-字串-----+          |
           |       +-變數參照-+          |
           |       '-函數呼叫-'          |
           |    .----------------.       |
           |    V                |       |
           '-{-----+----------+--+---%}--'
                   +-字串-----+
                   +-變數參照-+
                   '-函數呼叫-'
 
縮寫的條件式變數
 
              .----------------.
              V                |
|---?----+-"-----+----------+--+---"---+------------------------|
         |       +-字串-----+          |
         |       +-變數參照-+          |
         |       '-函數呼叫-'          |
         |    .----------------.       |
         |    V                |       |
         '-{-----+----------+--+---%}--'
                 +-字串-----+
                 +-變數參照-+
                 '-函數呼叫-'
 

註:

  1. STATIC 與 TRANSIENT 均是持續巨集的關鍵字, 目前僅能在 OS/400 作業系統上使用它們。

%DEFINE
此關鍵字負責定義變數。

STATIC
指定變數在持續異動內的巨集呼叫之間保留它的值的關鍵字。這是持續巨集的預設值。

TRANSIENT
指定變數在巨集呼叫之間不會保留它的值的關鍵字。這是非持續巨集的預設值。

定義登錄:

變數名稱
可為一或多個名稱,每一個額外名稱連接在句點之後(.)。 有關語法的詳細資訊,請參閱變數名稱

字串
字串中可使用任何英文字母、數字與標點符號。 如果字串出現在雙引號內,則不容許使用換行字元。

變數參照
傳回先前定義的變數值,並以 $ 號及 () 號加以指定。例如: 如果 VAR='abc', 則 $(VAR) 傳回值 'abc'。有關語法的詳細資訊, 請參閱變數參照

函數呼叫
呼叫一或多個先前定義的 FUNCTION 或 MACRO_FUNCTION 區塊, 或一個具有指定引數的 Net.Data 內建函數。 有關語法及範例,請參閱函數呼叫 (@)

exec 陳述式
EXEC 陳述式。為參考變數或呼叫函數時所執行的外部程式名稱。 有關語法及範例,請參閱EXEC 區塊或陳述式

表格陳述式
TABLE 陳述式。定義相關資料的集合, 有一個相同記錄或橫列的陣列、以及一個說明各列欄位的直欄名稱陣列。 有關語法及範例,請參閱TABLE 陳述式

envvar 陳述式
ENVVAR 陳述式。參照環境變數。 有關語法及範例,請參閱ENVVAR 陳述式

條件式變數
設定一個根據另一個變數或字串值而產生的變數值。

縮寫的條件式變數
設定一個根據另一個變數或字串值而產生的變數值。 條件式變數的縮短格式。

列示陳述式
LIST 陳述式。定義一些變數,可用來建置一個有定界符號的值列示。 有關語法及範例,請參閱LIST 陳述式

include 陳述式
INCLUDE 陳述式。讀取及納入檔案到 Net.Data 巨集。 有關語法及範例,請參閱INCLUDE 陳述式

上下文

DEFINE 區塊或陳述式必須在巨集的 IF 區塊之內,或在 Net.Data 巨集宣告部份的其他區塊之外。

限制

範例

範例 1:簡式變數定義

%DEFINE var1 = "orders"
%DEFINE var2 = "$(var1).html"

執行時,變數參照 $(var2) 被運算為 orders.html

範例 2:字串內含雙引號

%DEFINE hi = "say ""hello"""
%DEFINE empty = ""

顯示時,變數 hi 的值為 say "hello"。 變數 empty 是空值。

範例 3: 多重變數的定義

%DEFINE{  DATABASE = "testdb"
          home = "http://www.software.ibm.com"
          SHOWSQL = "YES"
          PI = "3.14150"
%}

範例 4:變數的多行定義

%DEFINE text = {This variable definition
            spans two lines
%}

範例 5:這個條件式變數的範例示範 如果結果值不包含任何 NULL 值時,變數 var 如何取用 引號 ("") 內的結果值。

%DEFINE var = ? "Hello! $(V)@MyFunc()"
%}

ENVVAR 陳述式

目的

定義一個變數為 DEFINE 區塊中的環境變數。 當參考 ENVVAR 變數時,Net.Data 以相同名稱傳回 環境變數的現行值。使用這個方法來參考環境變數 比使用 DTW_GETENV 更有效率。 有關 DTW_GETENV 的詳細資訊,請參閱DTW_GETENV

語法

>>-%ENVVAR-----------------------------------------------------><
 

上下文

ENVVAR 陳述式可以在 DEFINE 區塊或陳述式中。

%ENVVAR
此關鍵字用於在 DEFINE 區塊中定義一個變數成為環境變數。這個變數可取得巨集檔中任何地方的環境變數值。

限制

ENVVAR 陳述式不可以包含其他元素。

範例

範例 1:在本例中,ENVVAR 定義一變數, 此變數被參考到時會傳回現行值給環境變數 SERVER_SOFTWARE,亦即 Web 伺服器名稱。

%DEFINE SERVER_SOFTWARE = %ENVVAR
 
%HTML(REPORT) {
伺服器是 $(SERVER_SOFTWARE)。
%}

EXEC 區塊或陳述式

目的

當參考變數或呼叫函數時,指定一個執行的外部程式名稱。

當 Net.Data 在巨集檔中發現一個執行變數時, 它會使用下列方法尋找被參考到的可執行的程式:

  1. 它會搜尋 Net.Data 起始設定檔案中的 EXEC_PATH。有關 EXEC_PATH 的詳細資訊, 請參閱 Net.Data 管理程式設計指南中的架構章節。

  2. 如果 Net.Data 找不到該程式, 它會搜尋系統所定義的目錄。如果找到了可執行的程式, Net.Data 會執行該程式。

授權要訣: 確定 Web 伺服器具有存取權, 可以使用任何被 EXEC 陳述式或區塊所參考到的檔案。 有關設定 Web 伺服器使用 Net.Data 檔案之存取權的詳細資料, 請參閱 Net.Data 管理及程式設計指南中的架構章節部分。

EXEC 陳述式及區塊用於兩個不同的上下文,二者的語法不同, 視使用位置而定。 EXEC 陳述式用於 DEFINE 區塊,EXEC 區塊用於 FUNCTION 區塊。

語法

EXEC 陳述式用於 DEFINE 區塊:

                 .----------------.
                 V                |
>>-%EXEC------"-----+----------+--+---"------------------------><
                    +-字串-----+
                    +-變數參照-+
                    '-函數呼叫-'
 

EXEC 區塊語法用於 FUNCTION 區塊:

                 .---------------.
                 V               |
>>-%EXEC------{----+-字串-----+--+---%}------------------------><
                   +-變數參照-+
                   '-函數呼叫-'
 

%EXEC
此為一個關鍵字,指定參照變數或呼叫函數時,須執行的外部程式名稱。 Net.Data 遇到 EXEC 陳述式定義的變數參照時,會處理 EXEC 陳述式宣告的變數內容。

字串
字串中可使用任何英文字母、數字與標點符號。 如果字串出現在雙引號內,則不容許使用換行字元。

變數參照
傳回先前定義的變數值,並以 $ 號及 () 號加以指定。例如: 如果 VAR='abc', 則 $(VAR) 傳回值 'abc'。有關語法的詳細資訊, 請參閱變數參照

函數呼叫
呼叫一或多個先前定義的 FUNCTION 或 MACRO_FUNCTION 區塊, 或一個具有指定引數的 Net.Data 內建函數。 有關語法及範例,請參閱函數呼叫 (@)

上下文

在這些上下文中可找到 EXEC 區塊或陳述式:

限制

EXEC 區塊或陳述式可以包含這些元素:

範例

範例 1:被變數參考的可執行檔

%DEFINE mycall = %EXEC "MYEXEC.EXE $(empno)"
 
%HTML (report){
<P>這是您要求的的報告:
<HR>$(mycall)
%}

這個範例會針對每次對變數 mycall 的參照而執行 MYEXEC.EXE

範例 2:被函數參考的可執行檔

%FUNCTION(DTW_REXX) my_rexx_pgm(INOUT a, b, IN c, INOUT d){
 %EXEC{ mypgm.cmd 這是測試 %}
%}

當函數 my_rexx_pgm 被呼叫時,這個範例執行 mypgm.cmd

FUNCTION 區塊

目的

定義 Net.Data 從巨集檔呼叫來的次常式。 FUNCTION 區塊中的可執行檔陳述式,可以包含直接由語言環境解譯過來的語言陳述式, 也可以指示呼叫外部程式。

FUNCTION 區塊中的 EXEC 區塊

如果您在 FUNCTION 區塊中使用的 EXEC 區塊, 它必須是 FUNCTION 區塊中的唯一可執行檔陳述式。將可執行檔陳述式傳給語言環境之前, Net.Data 把 EXEC 陳述式中的程式檔案名稱, 附加到起始設定檔之 EXEC_PATH 架構陳述式決定的路徑名稱中。最後將產生的字串,傳給要執行的語言環境。

語言環境處理 EXEC 區塊時使用的方法, 取決於該個特定語言環境。僅有 REXX、系統、以及 Perl Net.Data 所支援的語言環境,支援 EXEC 區塊。

在語言陳述式中使用特殊字元

當符合 Net.Data 語言結構語法的字元於函數區塊的語言陳述式區段中使用, 作為語法有效的內含程式碼 (如 REXX 或 Perl) 的一部份時, 可能會將它們誤譯為 Net.Data 語言結構,而導致在巨集內發生錯誤或無法預測的結果。

例如,Perl 函數必須使用 COMMENT 區塊定界字元 (%{)。當執行巨集時, %{ 字元會被解譯為 COMMENT 區塊的開頭。然後,Net.Data 會尋找 COMMENT 區塊的尾端, 所以當它讀取函數區塊的尾端時,它會認為找到 COMMENT 區塊的尾端。Net.Data 隨後會繼續尋找函數區塊的尾端, 當它找不到時,便會發出錯誤。

請使用下列一種方法,使用 Net.Data 特殊字元作為內含的程式碼的一部份, 不讓 Net.Data 將它們解譯為特殊字元:

例如,下列 Perl 函數含有代表 COMMENT 區塊區隔字元 (%{) 作為 Perl 語言陳述式一部份的字元:

%function(DTW_PERL) func() {
  ...           
  for $num_words (sort bynumber keys %{ $Rtitles{$num} }) {
     &make_links($Rtitles{$num}{$num_words});          
  }            
  ...         
 %}   

若要確定 Net.Data 將 %{ 字元解譯為 Perl 原始程式,而不是 Net.Data COMMENT 區塊區隔字元, 請用下列方式之一重寫函數:

語法

>>-%FUNCTION--(--語言環境--)--函數名稱--| 參數傳送規格 |-------->
 
      .-;------------------------------------.
>-----+-| 傳回規格 |--{--| 函數本體 |----%}--+-----------------><
 
參數傳送規格
 
|---(--+-----------------------------+---)----------------------|
       |  .-,---------------------.  |
       |  |      (1)              |  |
       |  V .-IN-------.          |  |
       '----+----------+---名稱---+--'
            +-OUT------+
            '-INOUT----'
 
傳回規格
 
|---+----------------------+------------------------------------|
    '-RETURNS--(--名稱--)--'
 
函數本體
 
|---+-----------------------+----------------------------------->
    |  .------------------. |
    |  V                  | |
    +----列入陳述式區塊---+-+
    '-exec 區塊-------------'
 
>-----+--------------------------------------+------------------|
      |  .-----------------.                 |
      |  V           (2)   |                 |
      +----報告區塊--------+---+-----------+-+
      |                        '-訊息區塊--' |
      |           .----------------------.   |
      |           V                      |   |
      '-訊息區塊-----+----------------+--+---'
                     |          (2)   |
                     '-報告區塊-------'
 

註:

  1. 在參數列示開頭沒有指定的參數類型時,引用預設值參數 IN 類型。 無參數類型的參數使用最新指定在參數列示 上的類型,或若無指定類型時使用 IN 類型。 例如, 在參數列示 (parm1,INOUT parm2parm3,OUT parm4parm5)中, 參數 parm1parm3parm5 沒有參數型類。 因為沒有指定最初的參數類型,所以參數 parm1 是 IN 類型。 參數 parm3 是 INOUT 類型,因為它是最新指定的參數類型。 同樣地,參數 parm5 有 OUT 的類型, 因為它是最近在參數列示中指定的參數類型。

  2. 重複的報表區塊對下列有效:

%FUNCTION
此關鍵字用於定義 Net.Data 從巨集檔呼叫來的次常式。

語言環境
處理函數本體的語言環境。 有關詳細資訊,請參閱 Net.Data 語言環境參考手冊

函數名稱
定義的函數名稱,是一個以英文字母或底線開頭的英文或數字字串, 可以是英文字母、數字或底線字元的任意組合。

名稱
一個以英文字母或底線開頭的英文或數字字串, 可以是英文字母、數字或底線字元的任意組合。

參數傳送規格:

IN
指定 Net.Data 傳送輸入資料給語言環境。 IN 是預設值。

OUT
指定語言環境傳回輸出資料給 Net.Data。

INOUT
指定 Net.Data 傳送輸入資料給語言環境, 及語言環境傳回輸出資料給 Net.Data。

傳回規格:

RETURNS
宣告函數完成之後包含語言環境指定的函數值之變數。

函數本體:

列入陳述式區塊
函數定義中指定之語言環境的有效語法陳述式, 例如:REXX、SQL 或 Perl。有關詳細資訊, 請參閱 Net.Data 語言環境參考手冊。有關語法及用法, 請參閱程式設計語言的參考手冊。代表列入陳述式區塊的字串可以包含 Net.Data 變數參照及函數呼叫, 而於執行列入陳述式區塊(程式)前,這些變數參照與函數呼叫便會先被求值。 限制: 最長的連續列入陳述式區塊, 若不包括任何 Net.Data 變數參照或函數呼叫,其長度限制如下:

  • OS/2 及 NT:64KB

  • AIX:256KB

  • OS/390:256KB

  • OS/400:256KB

exec 區塊
此為 EXEC 區塊。為參考變數或呼叫函數時所執行的外部程式名稱。 有關語法及範例,請參閱EXEC 區塊或陳述式

報告區塊
REPORT 區塊。為函數呼叫的輸出製作格式的指示。 您可以在報告中使用表頭及註腳資訊。 有關語法及範例,請參閱REPORT 區塊

訊息區塊
MESSAGE 區塊。為一組回覆碼、相關訊息以及傳回函數呼叫時 Net.Data 執行的動作。 有關語法及範例,請參閱MESSAGE 區塊

上下文

在這些上下文中可找到 FUNCTION 區塊:

限制

FUNCTION 區塊可以包含這些元素:

僅有 REXX、系統、以及 Perl Net.Data 所支援的語言環境,支援 EXEC 區塊。

範例

下面是一般範例,並未涵蓋所有的語言環境。 有關在特定的語言環境中使用 FUNCTION 區塊的詳細資訊,請參閱 Net.Data 語言環境參考手冊

範例 1:REXX 子字串函數

%DEFINE lstring = "longstring"
%FUNCTION(DTW_REXX) substring(IN x, y, z) RETURNS(s) {
  s = substr("$(x)", $(y), $(z));
%}
%DEFINE a = {@substring(lstring, "1", "4")%} %{ assigns "long" to a %}

在求 a 的值時, 找到 @ 子字串函數呼叫並執行子字串 FUNCTION 區塊。FUNCTION 區塊中的可執行陳述式會被置換, 然後字串 s = substr("longstring", 1, 4) 被傳送到 REXX 直譯器執行。 因為指定了 RETURNS 子句,所以 @子字串指定的值在 a 的運算式中被置換成"long", 即為 s 的值。

範例 2:呼叫外部 REXX 程式

EXEC 陳述式告訴 REXX 語言環境去通知 REXX 直譯器開始執行外部 REXX 程式 mypgm.cmd。因為 REXX 語言環境可以直接與 REXX 程式共用 Net.Data 變數, 所以由它在執行 mypgm.cmd 前,會指定 REXX 變數 abc 為 Net.Data 變數 wxy 的值。mypgm.cmd 可以直接在 REXX 陳述式中使用變數 abc。當程式終止時,REXX 變數 abd 從 REXX 程式取回, 它們的值被指定給 Net.Data 變數 wxz。 因為 RETURNS 子句沒有被用在 my_rexx_pgm FUNCTION 區塊的定義之內, 所以 @my_rexx_pgm 函數呼叫的值為空字串,"", (如果回覆碼為 0) 或為 REXX 程式回覆碼 (如果回覆碼不是零)。

範例 3:SQL 查詢及報告

%FUNCTION(DTW_SQL) query_1(IN x, IN y) {
   SELECT customer.num, order.num, part.num, status
   FROM customer, order, shippingpart
   WHERE customer.num = '$(x)'
      AND customer.ordernumber = order.num
      AND order.num = '$(y)'
      AND order.partnumber = part.num
%REPORT{
     <P>這是您的訂購狀態:
     <P>$(NLIST)
<UL>
%ROW{
       <LI>$(V1)  $(V2)  $(V3)  $(V4)
     %}
</UL>
        %}
%}
%DEFINE customer_name="IBM"
%DEFINE customer_order="12345"
%HTML(REPORT) {
  @query_1(customer_name, customer_order)
%}

@query_1 函數呼叫在 SELECT 陳述式中以 IBM 取代 $(x),以 12345 取代 $(y)。 因為 SQL 函數 query_1 的定義中沒有定義輸出表格變數, 所以使用預設的表格(有關詳細資料, 請參閱 TABLE 表格區塊)。REPORT 區塊中參照的 NLIST 及 Vi 變數, 是由預設的表定義所定義。REPORT 區塊產生的報告被放置在呼叫 query_1 函數的輸出 HTML。

範例 4:執行 Perl script 的系統呼叫

「系統」語言環境解譯 FUNCTION 區塊中的可執行檔陳述式時, 是經由 C 語言 system() 函數呼叫,傳給作業系統。 這個方法無法向 REXX 語言環境般,直接向可執行檔陳述式傳收 Net.Data 變數。 「系統」語言環境是以下列方法傳收變數:

遇到 @today 函數呼叫時, Net.Data 將對可執行檔陳述式進行變數替代。本例的可執行檔陳述式中沒有 Net.Data 變數, 所以不替代變數。可執行檔陳述式及參數傳給「系統」語言環境後, 此語言環境立即建立一個具名管線,並將環境變數 DTWPIPE 設定為具名管線。

然後,再以 C system() 函數呼叫,呼叫外部程式。外部程式以唯寫方式開啟管路, 再以標準資料流檔的方式將輸出參數的值寫入管路中。外部程式藉由寫入 STDOUT 產生 HTML 輸出。本例將系統日期程式的輸出, 指定至 FUNCTION 區塊 RETURNS 子句識別的變數結果中。 結果變數的這個值,則會置換 HTML 區塊中的 @today() 函數呼叫。

範例 5:Perl 語言環境

%FUNCTION(DTW_PERL) today() RETURNS(result) {
  $date = `date`;
  chop $date;
  open(DTW, "> $ENV{DTWPIPE}") || die "無法開啟: $!";
  print DTW "result = \"$date\"\n";
%}
%HTML(INPUT) {
  @today()
%}

您可以比較本例與「範例 4」中 EXEC 陳述式的使用方式。 範例 4 的「系統」語言環境不瞭解如何解譯 Perl 程式,但知道如何呼叫外部程式。 EXEC 陳述式要它以外部程式的方式呼叫 perl 程式。 實際的 Perl 語言陳述式,是由外部 Perl 程式解譯。 範例 5 的 Perl 語言環境可以直接解譯 Perl 語言陳述式,所以沒有 EXEC 陳述式。

函數呼叫 (@)

目的

呼叫一個先前定義的 FUNCTION 或 MACRO_FUNCTION 區塊, 或具有指定引數的內建函數。 如果該函數不是內建函數,您必需先在 Net.Data 巨集定義函數後,才能指定函數呼叫。

語法

>>-@函數名稱---(----+--------------------------------+--)------><
                    |  .-,-------------------------. |
                    |  V                           | |
                    '----+-變數名稱-------------+--+-'
                         '-"--+-字串-----+---"--'
                              +-變數參照-+
                              '-函數呼叫-'
 

@函數名稱
任何現有函數的名稱。一個以英文字母或底線開頭的英文或數字字串, 可以是英文字母、數字或底線字元的任意組合。

變數名稱
可為一或多個名稱,每一個額外名稱連接在句點之後(.)。 有關語法的詳細資訊,請參閱變數名稱

字串
字串中可使用任何英文字母、數字與標點符號,但不能使用換行字元。

變數參照
傳回先前定義的變數值,並以 $ 號及 () 號加以指定。例如: 如果 VAR='abc', 則 $(VAR) 傳回值 'abc'。有關語法的詳細資訊, 請參閱變數參照

函數呼叫
呼叫一或多個先前定義的 FUNCTION 或 MACRO_FUNCTION 區塊, 或一個具有指定引數的 Net.Data 內建函數。

上下文

在這些上下文中可找到函數呼叫:

限制

範例

範例 1:呼叫結構化查詢語言函數 formQuery

%FUNCTION(DTW_SQL) formQuery(){
SELECT $(queryVal) from $(tableName)
%}
 
%HTML (input){
<P>想察看 $(tableName) 的哪些直欄?
<FORM METHOD="POST" ACTION="report">
<INPUT NAME="queryVal" TYPE="CHECKBOX" VALUE="NAME">Name
<INPUT NAME="queryVal" TYPE="CHECKBOX" VALUE="MAIL">E-mail
<INPUT NAME="queryVal" TYPE="CHECKBOX" VALUE="FAX">FAX
<INPUT TYPE="SUBMIT" VALUE="Submit request">
%}
 
%HTML (report){
<P>這些是您所選取的直欄:
<HR>@formQuery()
%}

範例 2:以輸入及輸出參數呼叫 REXX 函數

%FUNCTION(DTW_REXX) my_rexx_pgm(INOUT a, b, IN c, OUT d) {
 %EXEC{ mypgm.cmd 這是測試 %}
%}
%HTML(INPUT) {
 <P> 原始變數值:$(w) $(x) $(z)
 <P> @my_rexx_pgm(w, x, y, z)
 <P> 已修改之變數值:$(w) $(x) $(z)
%}

範例 3: 以使用變數參照及函數呼叫的輸入參數呼叫 REXX 函數

%FUNCTION(DTW_REXX) my_rexx_pgm(IN a, b, c, d, OUT e) {
  ...
%}
%HTML(INPUT){
 <p>  @my_rexx_pgm($(myA), @getB(), @retrieveC(), $(myD), myE)
%} 

HTML 區塊

目的

包含任何將被從屬站的 Web 瀏覽器或任何可辨識 HTML 的工具所處理的 HTML 標籤或本文。HTML 區塊中也有大部份的 Net.Data 巨集語言陳述式, 這些陳述式在執行時被求值及執行。Net.Data 尋找 Net.Data 巨集陳述式並執行它們。 Net.Data 假設所有其他的本文皆為 HTML,並將它送給 Web 瀏覽器。

語法

                             .--------------------------.
                             V                          |
>>-%HTML----(--名稱--)----{-----+--------------------+--+---%}--><
                                +-exec_sql 陳述式----+
                                +-變數參照-----------+
                                +-if 區塊------------+
                                +-函數呼叫-----------+
                                +-HTML 陳述式--------+
                                +-include 陳述式-----+
                                +-include_url 陳述式-+
                                '-while 區塊---------'
 

%HTML
這個關鍵字指定從屬站瀏覽器顯示之 HTML 標籤及本文的所在區塊。

名稱
一個以英文字母或底線開頭的英文或數字字串, 可以是英文字母、數字或底線字元的任意組合,包括句點 (OS/390 除外)。

EXEC_SQL 陳述式
這是為了提供相容性才支援的 DB2WWW 版次 1 語言元素。 請參閱附錄 A. DB2 WWW 連線或「DB2 全球資訊網版次 1」文件。

變數參照
傳回先前定義的變數值,並以 $ 號及 () 號加以指定。例如: 如果 VAR='abc', 則 $(VAR) 傳回值 'abc'。有關語法的詳細資訊, 請參閱變數參照

IF 區塊
此為 IF 區塊。 執行條件字串處理。 條件列示中的字串值, 如果是代表整數且前端或尾端沒有白色空間時,將被作為數字來比較。 它們可以有單一加號 (+) 或減號 (-) 置於前端。 關於語法及範例,請參閱IF 區塊

函數呼叫
呼叫一或多個先前定義的 FUNCTION 或 MACRO_FUNCTION 區塊, 或一個具有指定引數的 Net.Data 內建函數。 有關語法及範例,請參閱函數呼叫 (@)

HTML 陳述式
包含任何英數字元,以及為從屬站瀏覽器製作格式的 HTML 標籤。

include 陳述式
INCLUDE 陳述式。讀取及納入檔案到 Net.Data 巨集。 有關語法及範例,請參閱INCLUDE 陳述式

include_url 陳述式
INCLUDE_URL 陳述式。 讀取另一個檔案,併入指定此陳述式的 Net.Data Web 巨集中。 指定的檔案,可能在區域或遠端伺服器中。 有關語法及範例,請參閱INCLUDE_URL 陳述式

WHILE 區塊
WHILE 區塊。以條件式字串處理程序執行迴路。 有關語法及範例,請參閱WHILE 區塊

上下文

在這些上下文中可找到 HTML 區塊:

限制

HTML 區塊可以包含這些元素:

範例

範例 1:帶有標題及表尾之併入檔的 HTML 區塊

%HTML(example1){
%INCLUDE"header.html"
<P>您可以放置<EM>任何</EM> HTML 於 HTML 區塊中。
SQL 函數呼叫大致如下:
@xmp1()
%INCLUDE"footer.html"
%}

範例 2:包含句點的 HTML 區塊名稱

%HTML(my.report){
%INCLUDE"header.html"
<P>您可以放置<EM>任何</EM> HTML 於 HTML 區塊中。
SQL 函數呼叫大致如下:
@xmp1()
%INCLUDE"footer.html"
%}

IF 區塊

目的

執行條件字串處理。 IF 區塊提供測試一或多個條件的能力, 然後基於條件測試的結果執行一區塊的陳述式。 您可以在 Net.Data 巨集內宣告部份、HTML 區塊、MACRO_FUNCTION 區塊、 REPORT 區塊、WHILE 區塊及 ROW 區塊中使用 IF 區塊,亦可 在另一個 IF 區塊內建立巢狀。

條件列示中的字串值, 如果是代表整數且前端或尾端沒有白色空間時,將被作為數字來比較。 它們可以有單一加號 (+) 或減號 (-) 置於前端。

限制: Net.Data 不支援非整數數字的小數比較,如,浮點數。

巢狀 IF 區塊: IF 區塊語法的規則 由巨集檔中區塊的位置決定。如果 IF 區塊在宣告部份任何其他區塊之外的 IF 區塊之中建立巢狀, 則其之外區塊能使用的任何元素它也可以使用。如果 If 區塊在一個 IF 區塊中的其他區塊之中建立巢狀,則它依循所在之區塊的語法規則。

在下列範例,巢狀 IF 區塊必須遵循當它在 HTML 區塊之中時的規則。

     %IF 區塊
...
  %HTML 區塊
...
     %IF 區塊

請參閱在這個章節隨後所列的限制。

語法

>>-%IF--| 條件列示 |-------------------------------------------->
 
>-----| 陳述式區塊 |--| else_if 規格 |--%ENDIF-----------------><
 
條件列示
 
|---(--+-(--條件列示--)----------+---)--------------------------|
       +-條件列示--&&--條件列示--+
       +-條件列示--||--條件列示--+
       +-!--條件列示-------------+
       +-| 條件 |----------------+
       '-| 詞彙 |----------------'
 
陳述式區塊
 
    .--------------------------------.
    V                                |
|------+--------------------------+--+--------------------------|
       |             (1)          |
       +-define 區塊--------------+
       |               (1)        |
       +-define 陳述式------------+
       |                 (2)      |
       +-exec_sql 陳述式----------+
       |          (1)             |
       +-函數區塊-----------------+
       +-函數呼叫-----------------+
       |           (1)            |
       +-HTML 區塊----------------+
       |             (2)          |
       +-HTML 陳述式--------------+
       +-if 區塊------------------+
       +-include 陳述式-----------+
       +-include_url 陳述式-------+
       |                     (1)  |
       +-macro_function 區塊------+
       |          (1)             |
       +-訊息區塊-----------------+
       |      (2)                 |
       +-字串---------------------+
       |          (2)             |
       +-變數參照-----------------+
       |            (2)           |
       '-while 區塊---------------'
 
條件
 
|---詞彙--+-<--+---詞彙-----------------------------------------|
          +->--+
          +-<=-+
          +->=-+
          +-!=-+
          '-==-'
 
詞彙
 
|---+-變數名稱-------------+------------------------------------|
    '-"--+-字串-----+---"--'
         +-變數參照-+
         '-函數呼叫-'
 
else_if 規格
 
|---+----------------------------------------------------+------|
    |     .-----------------------------------------.    |
    |     V                                         |    |
    '--+----%ELIF--(--條件列示--)--| 陳述式區塊 |---+-+--'
       '-%ELSE--| 陳述式區塊 |------------------------'
 

註:

  1. 當 IF 區塊位於巨集的宣告部份中任何其他區塊之外時, 這個語言結構有效。

  2. 當 IF 區塊位於 HTML 區塊、MACRO_FUNCTION 區塊、REPORT 區塊、 ROW 區塊或 WHILE 區塊中時,這個語言結構有效。

%IF
此關鍵字指定條件字串處理。

條件列示
比較條件及詞彙的值。使用布林運算子,可以連接條件列示。 您可以在另一個條件列示中建立巢狀條件列示。

陳述式區塊
下列有效的 Net.Data 巨集結構。請參閱圖解及附註, 以決定巨集結構有效的上下文。

DEFINE 陳述式
DEFINE 區塊或陳述式。定義變數,設定架構變數。 變數名稱必須以一個字母或底線開頭, 可以使用任何英數字元或底線。 有關語法及範例,請參閱DEFINE 區塊或陳述式

EXEC_SQL 陳述式
這是為了提供相容性才支援的 DB2WWW 版次 1 語言元素。 請參閱附錄 A. DB2 WWW 連線或「DB2 全球資訊網版次 1」文件。

FUNCTION 區塊
一種關鍵字,指定一個可以從 Net.Data 巨集呼叫的次常式。 FUNCTION 區塊中的可執行檔陳述式, 可以包含直接由語言環境解譯的語言陳述式, 也可以指示呼叫外部程式。有關語法及範例,請參閱FUNCTION 區塊

函數呼叫
呼叫一或多個先前定義的 FUNCTION 或 MACRO_FUNCTION 區塊, 或一個具有指定引數的 Net.Data 內建函數。 有關語法及範例,請參閱函數呼叫 (@)

HTML 區塊
包含任何英數字元,以及為從屬站瀏覽器製作格式的 HTML 標籤。

HTML 陳述式
包含任何英數字元,以及為從屬站瀏覽器製作格式的 HTML 標籤。

IF 區塊
此為 IF 區塊。 執行條件字串處理。 條件列示中的字串值, 如果是代表整數且前端或尾端沒有白色空間時,將被作為數字來比較。 它們可以有單一加號 (+) 或減號 (-) 置於前端。

include 陳述式
INCLUDE 陳述式。讀取及納入檔案到 Net.Data 巨集。 有關語法及範例,請參閱INCLUDE 陳述式

include_url 陳述式
INCLUDE_URL 陳述式。 讀取另一個檔案,併入指定此陳述式的 Net.Data Web 巨集中。 指定的檔案,可能在區域或遠端伺服器中。 有關語法及範例,請參閱INCLUDE_URL 陳述式

macro_function 區塊
一種關鍵字,指定一個可以從 Net.Data 巨集呼叫的次常式。 在 MACRO_FUNCTION 區塊中的可執行的陳述式可以包含 Net.Data 巨集語言來源陳述式。 有關語法及範例,請參閱MACRO_FUNCTION 區塊

訊息區塊
MESSAGE 區塊。為一組回覆碼、相關訊息以及傳回函數呼叫時 Net.Data 執行的動作。 有關語法及範例,請參閱MESSAGE 區塊

字串
字串中可使用任何英文字母、數字與標點符號。 若是條件列示之詞彙內的字串,則可以是包括換行字元的任何字元。若是可執行區塊碼內的字串, 則可以是包括換行字元的任何字元。

變數參照
傳回先前定義的變數值,並以 $ 號及 () 號加以指定。例如: 如果 VAR='abc', 則 $(VAR) 傳回值 'abc'。有關語法的詳細資訊, 請參閱變數參照

WHILE 區塊
WHILE 區塊。以條件式字串處理程序執行迴路。 有關語法及範例,請參閱WHILE 區塊

條件
使用比較運算子,比較兩個項目。 如果下列兩個條件為真,則 IF 條件被作為數字比較:

如果其中一個條件非真,則執行一般字串比較。

詞彙
一個變數名稱、字串、變數參照或函數呼叫。

%ELIF
此關鍵字可以啟動替代處理路徑,可以包含條件列示及大部份的 Net.Data 巨集陳述式。

%ENDIF
此關鍵字可以關閉 %IF 區塊。

%ELSE
此關鍵字可以在不符合其它條件列示時,執行相關陳述式。

上下文

在這些上下文中可找到 IF 區塊:

限制

當 IF 區塊位於巨集的宣告部份中任何其他區塊之外時, 可以包含這些元素。

當 IF 區塊位於 HTML 區塊、MACRO_FUNCTION 區塊、REPORT 區塊 或 WHILE 區塊中時,可以包含這些元素。

範例

範例 1:Net.Data 巨集宣告部份中的 IF 區塊

%DEFINE a = "1"
%DEFINE b = "2"
...
%IF ($(DTW_HTML_TABLE) == "YES")
%define OUT_FORMAT = "HTML"
%ELSE
%define OUT_FORMAT = "CHARACTER"
%ENDIF
 
%HTML(REPORT){
 ...
%}
 

範例 2: HTML 區塊內的 IF 區塊

%HTML(REPORT){
@myFunctionCall()
%IF ($RETURN_CODE) == $(failure_rc))
   <P> 函數呼叫失敗,其回覆碼為 $(RETURN_CODE)。
%ELIF ($(RETURN_CODE) == $(warning_rc))
   <P> 函數呼叫繼續,其警告碼為 $(RETURN_CODE)。
%ELIF ($(RETURN_CODE) == $(success_rc))
   <P>函數呼叫順利完成。
%ELSE
   P>函數呼叫傳回不明回覆碼 $(RETURN_CODE)。
%ENDIF
%}
 

範例 3: 數字比較

%IF (ROW_NUM < "100")
    <p>表格尚未填滿...
%ELIF (ROW_NUM == "100")
    <p>表格已滿...
%ELSE
    <p>表格溢位...
%ENDIF
 

數字比較之所以能完成是 由於隱含的表格變數 ROW_NUM 總是傳回整數值, 且這個被比較的值也是整數。

範例 4: 巢狀 IF 區塊

%IF (MONTH == "January")
  %IF (DATE = "1")
    新年快樂!
%ELSE
    哈,又是另一天。
%ENDIF
%ENDIF
 

INCLUDE 陳述式

目的

讀取且納入檔案到指定陳述式的 Net.Data 巨集中。

Net.Data 在起始設定檔 INCLUDE_PATH 陳述式指定的目錄中,尋找併入檔。

您併入檔的使用方式,可以與大部份的高階語言相同。 您可以插入共用標題及註腳、定義共用變數設定、 或將 FUNCTION 區塊定義的共用次常式程式庫納入 Net.Data 巨集中。

只有在處理巨集並插入參考檔案內容在巨集檔中 INCLUDE 陳述式的位置時, Net.Data 才會執行 INCLUDE 陳述式。 分析參考檔案名稱的任何變數參照的時刻 最先是在執行 INCLUDE 陳述式時, 而不是在執行參考檔案內容時。

當 INCLUDE 陳述式位於 ROW 或 WHILE 區塊中時, Net.Data 不會重複執行 INCLUDE 陳述式。Net.Data 第一次執行 ROW 或 WHILE 區塊時會執行 INCLUDE 陳述式, 納入參考檔案內容到區塊,然後用參考檔案內容重複執行 ROW 或 WHILE 區塊。

授權要訣:確定 Net.Data 執行時所用的使用者 ID, 有權存取 INCLUDE 陳述式所參照的任何檔案。有關設定 Web 伺服器使用 Net.Data 檔案之存取權的詳細資料, 請參閱 Net.Data 管理及程式設計指南中的架構章節部分。

要訣: 如果您要從一個區域 Web 伺服器併入 HTML 檔案, 可使用如範例 3 所顯示的 INCLUDE_URL 結構。 只要使用示範的語法,您就不須更新 Net.Data 起始設定檔案中的 INCLUDE_PATH, 去設定 Web 伺服器已經知道的目錄。

語法

                  .---------------.
                  V               |
>>-%INCLUDE----"----+-字串-----+--+---"------------------------><
                    '-變數參照-'
 

%INCLUDE
此關鍵字用於顯示被讀取且納入 Net.Data 巨集中的檔案。

名稱
一個以英文字母或底線開頭的英文或數字字串, 可以是英文字母、數字或底線字元的任意組合。

字串
字串中可使用任何英文字母、數字與標點符號,但不能使用換行字元。

變數參照
傳回先前定義的變數值,並以 $ 號及 () 號加以指定。例如: 如果 VAR='abc', 則 $(VAR) 傳回值 'abc'。有關語法的詳細資訊, 請參閱變數參照

上下文

在這些上下文中可找到 INCLUDE 陳述式:

限制

INCLUDE 陳述式可以包含這些元素:

不容許字串中的函數呼叫。

範例

範例 1:HTML 區塊中的 INCLUDE 陳述式

%HTML(start){
%INCLUDE "header.hti"
...
%}

範例 2:REPORT 區塊中的 INCLUDE 陳述式

%REPORT {
  %INCLUDE "report_header.txt"
  %ROW {
    %INCLUDE "row_include.txt"
  %}
  %INCLUDE "report_footer.txt"
%}

範例 3: INCLUDE 陳述式中的變數參照

%define library = "/qsys.lib/mylib.lib/"
%define filename = "macros.file/incfile.mbr"
 
%include "$(library)$(filename)"

INCLUDE_URL 陳述式

目的

讀取並納入另一個檔案到指定此陳述式的 Net.Data 輸出結果中。 指定的檔案,可能在區域或遠端伺服器中。

使用 INCLUDE_URL 陳述式,您可以從一個巨集呼叫另一個巨集,而不須應用程式使用者選取「提出」按鈕。

只有在處理巨集並插入參考檔案內容在巨集檔中 INCLUDE_URL 陳述式的位置時, Net.Data 才會執行 INCLUDE_URL 陳述式。 分析參考檔案名稱的任何變數參照的時刻 最先是在執行 INCLUDE_URL 陳述式時, 而不是在執行參考檔案內容時。

當 INCLUDE_URL 陳述式位於 ROW 或 WHILE 區塊中時, Net.Data 不會重複執行 INCLUDE_URL 陳述式。Net.Data 第一次執行 ROW 或 WHILE 區塊時會執行 INCLUDE_URL 陳述式, 納入參考檔案內容到區塊,然後用參考檔案內容重複執行 ROW 或 WHILE 區塊。

語法

                       .---------------.
                       V               |
>>-%INCLUDE_URL---"------+-字串-----+--+--"--------------------><
                         '-變數參照-'
 

%INCLUDE_URL
此關鍵字用於顯示將從區域或遠端伺服器讀取且納入一個檔案 Net.Data 巨集中。

字串
字串中可使用任何英文字母、數字與標點符號,但不能使用換行字元。

變數參照
傳回先前定義的變數值,並以 $ 號及 () 號加以指定。例如: 如果 VAR='abc', 則 $(VAR) 傳回值 'abc'。有關語法的詳細資訊, 請參閱變數參照

上下文

在這些上下文中可找到 INCLUDE_URL 陳述式:

限制

INCLUDE_URL 陳述式可以包含這些元素:

INCLUDE_URL 檔案有下列檔案大小限制:

INCLUDE_URL 沒有 在 OS/400 環境中受支援。

範例

範例 1:從另一個伺服器併入 HTML 檔案

 %include_url "http://www.ibm.com/path/myfile.html"

範例 2:藉由呼叫遠端伺服器名稱從該伺服器併入 HTML 檔案

 %include_url "myserver/path/myfile.html"

其中 myserver 即為伺服器名稱。

範例 3:從區域 Web 伺服器併入 HTML 檔案

 %include_url "/path/myfile.html"

要訣: 只要使用這個方法,您就不須更新 Net.Data 架構檔中的 INCLUDE_URL 路徑,去設定 Web 伺服器已經知道的目錄。如果字串 不是以斜線開始,Net.Data 會假設該字串是一個伺服器名稱, 並嘗試用對應的名稱從伺服器取回檔案。

範例 4:從遠端伺服器併入其他 Net.Data 巨集

%REPORT{
<P>現行新選擇為 @DTW_rTIME():
%include_url "http://www.ibm.com/cgi-bin/db2www/hotpic.mac/report?custno=$(custno)"

在這個範例中, 巨集檔 hotpic.mac 被呼叫而 custno 被作為變數傳送。如果字串是以斜線開始, 則 Net.Data 將從區域 Web 伺服器取回 INCLUDE 檔案。

LIST 陳述式

目的

建置一個定界限的值列示。當您用多重項目建立結構 SQL 查詢時,可以使用 LIST 陳述式, 就像某些 WHERE 或 HAVING 子句一般。

語法

             .----------------.
             V                |
>>-%LIST--"-----+----------+--+---"----變數名稱----------------><
                +-字串-----+
                +-變數參照-+
                '-函數呼叫-'
 

%LIST
此關鍵字指定使用變數來建置以分隔符號區隔的值的列示。

字串
字串中可使用任何英文字母、數字與標點符號,但不能使用換行字元。

變數參照
傳回先前定義的變數值,並以 $ 號及 () 號加以指定。例如: 如果 VAR='abc', 則 $(VAR) 傳回值 'abc'。有關語法的詳細資訊, 請參閱變數參照

函數呼叫
呼叫一或多個先前定義的 FUNCTION 或 MACRO_FUNCTION 區塊, 或一個具有指定引數的 Net.Data 內建函數。 有關語法及範例,請參閱函數呼叫 (@)

變數名稱
可為一或多個名稱,每一個額外名稱連接在句點之後(.)。 有關語法的詳細資訊,請參閱變數名稱

上下文

在這些上下文中可找到 LIST 陳述式:

限制

LIST 陳述式可以包含這些元素:

範例

範例 1:變數列示

 %DEFINE{
DATABASE="custcity"
%LIST " OR " conditions
conditions="cond1='Sao Paolo'"
conditions="cond2='Seattle'"
conditions="cond3='Shanghai'"
whereClause=conditions ? "WHERE $(conditions)" : ""
%}

MACRO_FUNCTION 區塊

目的

定義一個可以從 Net.Data 巨集呼叫的次常式。 在 MACRO_FUNCTION 區塊中的可執行的陳述式必須是 Net.Data 巨集語言來源陳述式。

語法

>>-%MACRO_FUNCTION--函數名稱--| 參數傳送規格 |------------------>
 
                         .----------------------.
                         V                      |
>-----{--| 函數本體 |-------+----------------+--+--%}----------><
                            |          (3)   |
                            '-報告區塊-------'
 
參數傳送規格
 
|---(--+-----------------------------+---)----------------------|
       |  .-,---------------------.  |
       |  |      (1)              |  |
       |  V .-IN-------.          |  |
       '----+----------+---名稱---+--'
            +-OUT------+
            '-INOUT----'
 
函數本體
 
    .-------------------------------.
    V                               |
|------+-------------------------+--+---------------------------|
       +-exec_sql 陳述式---------+
       +-變數參照----------------+
       +-if 區塊-----------------+
       +-函數呼叫----------------+
       +-HTML 陳述式-------------+
       +-include 陳述式----------+
       |                    (2)  |
       +-include_url 陳述式------+
       '-while 區塊--------------'
 

註:

  1. 在參數列示開頭沒有指定的參數類型時,引用預設值參數 IN 類型。 無參數類型的參數使用最新指定在參數列示 上的類型,或若無指定類型時使用 IN 類型。 例如, 在參數列示 (parm1,INOUT parm2parm3,OUT parm4parm5)中, 參數 parm1parm3parm5 沒有參數型類。 因為沒有指定最初的參數類型,所以參數 parm1 是 IN 類型。 參數 parm3 是 INOUT 類型,因為它是最新指定的參數類型。 同樣地,參數 parm5 有 OUT 的類型, 因為它是最近在參數列示中指定的參數類型。

  2. OS/400 不支援 INCLUDE_URL 陳述式。

  3. 只有 OS/400 才支援 MACRO_FUNCTION 區塊包含 REPORT 區塊。 重複的報表區塊對呼叫語言環境的函數有效。

%MACRO_FUNCTION
一種關鍵字,指定一個可以從 Net.Data 巨集呼叫的次常式。在 MACRO_FUNCTION 區塊中的可執行的陳述式必須包含 Net.Data 可以直接解譯的語言陳述式。

函數名稱
定義的函數名稱。一個以英文字母或底線開頭的英文或數字字串, 可以是英文字母、數字或底線字元的任意組合。

參數傳送規格:

IN
指定 Net.Data 傳送輸入資料給語言環境。 IN 是預設值。

OUT
指定語言環境傳回輸出資料給 Net.Data。

INOUT
指定 Net.Data 傳送輸入資料給語言環境, 及語言環境傳回輸出資料給 Net.Data。

名稱
一個以英文字母或底線開頭的英文或數字字串, 可以是英文字母、數字或底線字元的任意組合。name 可以代表 Net.Data 表格或結果設定。

函數本體:

exec_sql
這是為了提供相容性才支援的 DB2WWW 版次 1 語言元素。 請參閱附錄 A. DB2 WWW 連線或「DB2 全球資訊網版次 1」文件。

變數參照
傳回先前定義的變數值,並以 $ 號及 () 號加以指定。例如: 如果 VAR='abc', 則 $(VAR) 傳回值 'abc'。有關語法的詳細資訊, 請參閱變數參照

IF 區塊
此為 IF 區塊。 執行條件字串處理。 條件列示中的字串值, 如果是代表整數且前端或尾端沒有白色空間時,將被作為數字來比較。 它們可以有單一加號 (+) 或減號 (-) 置於前端。

函數呼叫
呼叫一或多個先前定義的 FUNCTION 或 MACRO_FUNCTION 區塊, 或一個具有指定引數的 Net.Data 內建函數。 有關語法及範例,請參閱函數呼叫 (@)

HTML 陳述式
包含任何英數字元,以及為從屬站瀏覽器製作格式的 HTML 標籤。

include 陳述式
INCLUDE 陳述式。讀取及納入檔案到 Net.Data 巨集。 有關語法及範例,請參閱INCLUDE 陳述式

include_url 陳述式
INCLUDE_URL 陳述式。讀取另一個檔案,納入指定此陳述式的 Net.Data 巨集中。 指定的檔案,可能在區域或遠端伺服器中。 有關語法及範例,請參閱INCLUDE_URL 陳述式

WHILE 區塊
WHILE 區塊。以條件式字串處理程序執行迴路。 有關語法及範例,請參閱WHILE 區塊

報告區塊
REPORT 區塊。為函數呼叫的輸出製作格式的指示。 您可以在報告中使用表頭及註腳資訊。 有關語法及範例,請參閱REPORT 區塊

上下文

在這些上下文中可找到 MACRO_FUNCTION 區塊:

限制

這個結構不適用於 OS/390 作業系統。

MACRO_FUNCTION 區塊可以包含這些元素:

範例

範例 1: 指定訊息處理的巨集函數

%MACRO_FUNCTION setMessage(IN rc, OUT message) {
%IF (rc == "0")
  @dtw_assign(message, "函數呼叫順利完成。")
%ELIF (rc == "-1")
  @dtw_assign(message, "函數失敗,記憶體不足。")
%ELIF (rc == "-2")
  @dtw_assign(message, "函數失敗,參數無效。")
%ENDIF
%}

範例 2: 指定表頭資訊的巨集函數

%MACRO_FUNCTION setup(IN browserType) {
%{ 在巨集中每一個 HTML 區塊頂端呼叫這個函數 %}
%INCLUDE "header_info.html"
@dtw_rdate()
%IF (browserType == "IBM")
  @setupIBM()
%ELIF (browserType == "MS")
  @setupMS()
%ELIF (browserType == "NS")
  @setupNS()
%ELSE
  @setupDefault()
%ENDIF
%}
 

MESSAGE 區塊

目的

根據函數回覆碼,指定顯示的訊息及採行的建議動作。

在 MESSAGE 區塊中定義一組回覆碼、對應訊息、以及建議動作。函數呼叫完成後, Net.Data 比較它的回覆碼與 MESSAGE 區塊中定義的回覆碼。如果函數的回覆碼符合 MESSAGE 區塊中定義的回覆碼, Net.Data 立即顯示訊息,並評估動作作,判斷應該繼續處理或跳出 Net.Data 巨集。

MESSAGE 區塊可以是整體範圍,也可以是區域單一 FUNCTION 區塊。 巨集最外層次定義的 MESSAGE 巨集,作為整體範圍。如果定義多個整體 MESSAGE 區塊, 僅最後一個區塊有效。如果 MESSAGE 區塊定義在 FUNCTION 區域中, 則該區域在所屬 FUNCTION 區塊的區域範圍中。有關回覆碼處理程序規則, 請參閱 Net.Data 管理程式設計指南 中的 MESSEAGE 部分。

語法

>>-%MESSAGE--{-------------------------------------------------->
 
      .-------------------------------------------------------------------.
      V                                                                   |
>--------+-------------------------------------------------------------+--+>
         '--+-| 回覆碼規格 |--+--:---| 訊息文字規格 |----| 動作規格 |--'
            '-| SQLSTATE |----'
 
>----%--}------------------------------------------------------><
 
動作規格
 
|--+---------------+--------------------------------------------|
   '-| 動作規格 |--'
 
回覆碼規格
 
|---+-DEFAULT----------+----------------------------------------|
    +-+DEFAULT---------+
    +- -DEFAULT--------+
    +-+----+---訊息碼--+
    | +- --+           |
    | '-+--'           |
    '-include 陳述式---'
 
SQLSTATE
 
|---SQLSTATE--:----+-state_id---+-------------------------------|
                   '-英數字字串-'
 
訊息文字規格
 
          .----------------.
          V                |
|----+-"-----+----------+--+---"---+----------------------------|
     |       +-字串-----+          |
     |       +-變數參照-+          |
     |       +-函數呼叫-+          |
     |       '-換行-----'          |
     |    .----------------.       |
     |    V                |       |
     +-{-----+----------+--+---%}--+
     |       +-字串-----+          |
     |       +-變數參照-+          |
     |       '-函數呼叫-'          |
     '-include 陳述式--------------'
 
動作規格
 
         .-EXIT-----.
|---+-:--+----------+-+-----------------------------------------|
    |    '-CONTINUE-' |
    '-include 陳述式--'
 

%MESSAGE
此區塊關鍵字定義一組回覆碼、相關訊息、以及傳回函數呼叫時 Net.Data 執行的動作。

回覆碼規格
一個正整數或負整數。Net.Data RETURN_CODE 變數值符合回覆碼規格值時, 訊息陳述式的剩餘資訊可以用來處理函數呼叫。您也可以為未特別在 MESSAGE 區塊中輸入的回覆碼,指定訊息。

+DEFAULT
此關鍵字可用來指定預設正訊息碼。 若 RETURN_CODE 大於 0,並且未 指定完全相符時,則 Net.Data 使用此訊息陳述式中的資訊將用來處理此函數呼叫。

-DEFAULT
此關鍵字可用來指定預設負訊息碼。若 RETURN_CODE 小於 0, 並且未指定完全相符時,則 Net.Data 使用此訊息陳述式中的資訊將用來處理此函數呼叫。

DEFAULT
此關鍵字可用來設定預設訊息碼。若下列條件皆符合時, Net.Data 使用此訊息陳述式中的資訊將用來處理此函數呼叫:

  • 若 RETURN_CODE 大於或小於零,且不為零

  • 若沒有完全相符指定的回覆碼時

  • 若 RETURN_CODE 大於或小於零,而 +DEFAULT 或 -DEFAULT 沒有指定的回覆碼時

訊息碼
此訊息碼指定處理期間可能發生的錯誤及警告。為一串從 0 到 9 的數字。

SQLSTATE
此關鍵字提供應用程式一般錯誤條件的一般碼。 SQLSTATE 值是根據併入在 SQL 標準中的 SQLSTATE 規格建立, 而撰寫程式碼方式在所有 IBM 上所施行的 SQL 都一樣。 限制: 在 OS/400 平台上不受支援。

state_id
一個以英文字母或底線開頭的英文或數字字串, 可以是英文字母、數字或底線字元的任意組合。

英數字字串
英文字或數字字串可以包含任何英文字母或數值字元的組合。 它無法包含標點。

訊息文字規格
當 RETURN_CODE 符合現行訊息陳述式中的回覆碼值時, 被傳送給 Web 瀏覽器的字串。

字串
字串中可使用任何英文字母、數字與標點符號。 如果字串出現在雙引號內,則不容許使用換行字元。

變數參照
傳回先前定義的變數值,並以 $ 號及 () 號加以指定。例如: 如果 VAR='abc', 則 $(VAR) 傳回值 'abc'。有關語法的詳細資訊, 請參閱變數參照

函數呼叫
呼叫一或多個先前定義的 FUNCTION 或 MACRO_FUNCTION 區塊, 或一個具有指定引數的 Net.Data 內建函數。 有關語法及範例,請參閱函數呼叫 (@)

動作規格
決定當 RETURN_CODE 符合現行訊息陳述式中的回覆碼 值時,Net.Data 採行的動作。

EXIT
此關鍵字指定當發生訊息碼對應的錯誤或警告時,立即跳出巨集。 這是預設值。

CONTINUE
此關鍵字指定當發生訊息碼對應的錯誤或警告時,繼續處理。

include 陳述式
INCLUDE 陳述式。讀取及納入檔案到 Net.Data 巨集。 INCLUDE 陳述式可以出現在 MESSAGE 的任何地方。 有關語法及範例,請參閱INCLUDE 陳述式

上下文

在這些上下文中可找到 MESSAGE 區塊:

限制

MESSAGE 區塊可以包含這些元素:

SQLSTATE 在 OS/400 平台上不受支援。

範例

範例 1:區域 MESSAGE 區塊

%{ FUNCTION 區塊中的區域訊息區塊 %}
%FUNCTION(DTW_REXX) my_function() {
  %EXEC { my_command.cmd %}
%MESSAGE{
-601: {<H3>已建立表格,請返回並輸入您的名稱。</H3>
<P><a href="input">Return</a>
%}
default: "<H3>無法繼續執行,因為發生錯誤 $(RETURN_CODE)</H3>"%}      : exit
  %}

範例2:整體 MESSAGE 區塊

%{ global message block %}
  %MESSAGE {
     -100     : "回覆碼 -100 的訊息"    : exit
      100     : "回覆碼 100 訊息"    : continue
   +default : {
此為超出一行的長訊息。
您可以在此訊息中使用包括鏈結和套表
的 HTML 標籤。 %}   : continue
%}
 
%{ FUNCTION 區塊中的區域訊息區塊 %}
%FUNCTION(DTW_REXX) my_function() {
  %EXEC { my_command.cmd %}
  %MESSAGE {
     -100     : "回覆碼 -100 的訊息"    : exit
      100     : "回覆碼 100 訊息"    : continue
     -default : {
此為超出一行的長訊息。
您可以在此訊息中使用包括鏈結和套表
的 HTML 標籤。 %}   : exit
  %}

範例 3:包含 INCLUDE 陳述式的 MESSAGE 區塊

 %message {
   %include "rc1000.msg"
   %include "rc2000.msg"
   %include "defaults.msg"
 %}                         

REPORT 區塊

目的

製作函數呼叫之輸出的格式。您可以輸入一個表格名稱參數, 來設定這個表格使用被命名表格內的資料。否則, 所產生的表格會使用函數參數列示中第一個輸出表格上的資料, 或是當參數列示上沒有表格名稱時,使用預設的表格資料。

語法

>>-%REPORT----+-------------+--{-------------------------------->
              '-(--名稱--)--'
 
      .--------------------------.
      V                          |
>--------+--------------------+--+---+----------+--------------->
         +-字串---------------+      '-row 區塊-'
         +-if 區塊------------+
         +-變數參照-----------+
         +-函數呼叫-----------+
         +-HTML 陳述式--------+
         +-include 陳述式-----+
         +-include_url 陳述式-+
         '-while 區塊---------'
 
      .--------------------------.
      V                          |
>--------+--------------------+--+--%}-------------------------><
         +-字串---------------+
         +-if 區塊------------+
         +-變數參照-----------+
         +-函數呼叫-----------+
         +-HTML 陳述式--------+
         +-include 陳述式-----+
         +-include_url 陳述式-+
         '-while 區塊---------'
 

%REPORT
此關鍵字指定製作函數呼叫輸出指示的格式。 您可以在報告中使用表頭及註腳資訊。

名稱
此值代表 Net.Data 表格或結果設定。有關詳細資訊, 請參閱 Net.Data 管理 & 程式設計手冊中的「報表區塊」章節。

字串
字串中可使用任何英文字母、數字與標點符號。

IF 區塊
此為 IF 區塊。 執行條件字串處理。 條件列示中的字串值, 如果是代表整數且前端或尾端沒有白色空間時,將被作為數字來比較。 它們可以有一個加號 (+) 或減號 (-) 置於前端。 關於語法及範例,請參閱IF 區塊

變數參照
傳回先前定義的變數值,並以 $ 號及 () 號加以指定。例如: 如果 VAR='abc', 則 $(VAR) 傳回值 'abc'。有關語法的詳細資訊, 請參閱變數參照

函數呼叫
呼叫一或多個先前定義的 FUNCTION 或 MACRO_FUNCTION 區塊, 或一個具有指定引數的 Net.Data 內建函數。 有關語法及範例,請參閱函數呼叫 (@)

HTML 陳述式
包含任何英數字元,以及為從屬站瀏覽器製作格式的 HTML 標籤。

include 陳述式
INCLUDE 陳述式。讀取及納入檔案到 Net.Data 巨集。 有關語法及範例,請參閱INCLUDE 陳述式

include_url 陳述式
INCLUDE_URL 陳述式。讀取另一個檔案,納入指定此陳述式的 Net.Data 巨集中。 指定的檔案,可能在區域或遠端伺服器中。 有關語法及範例,請參閱INCLUDE_URL 陳述式

row 區塊
ROW 區塊。顯示一次函數呼叫傳回的資料各列的 HTML 格式化資料。 有關語法及範例,請參閱ROW 區塊

WHILE 區塊
WHILE 區塊。以條件式字串處理程序執行迴路。 有關語法及範例,請參閱WHILE 區塊

上下文

在這些上下文中可找到 REPORT 區塊:

限制

報告區塊可以包含這些元素:

範例

範例 1:顯示一列姓名及位置的雙欄 HTML 表格

%FUNCTION(DTW_SQL) mytable() {
%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>
%}

選取表格中的一個名稱,可呼叫 name.mac Net.Data 巨集的明細 HTML 區塊, 將這二個值當作 URL 的一部份來傳送給它。您可以在本例的 name.mac 中使用這些值來尋找名稱的其它明細。

ROW 區塊

目的

處理函數呼叫傳回的每一個表格列。 Net.Data 只為各列處理一個 ROW 區塊中的陳述式。

語法

              .--------------------------.
              V                          |
>>-%ROW--{-------+--------------------+--+--%}-----------------><
                 +-字串---------------+
                 +-if 區塊------------+
                 +-變數參照-----------+
                 +-函數呼叫-----------+
                 +-HTML 陳述式--------+
                 +-include 陳述式-----+
                 +-include_url 陳述式-+
                 '-while 區塊---------'
 

%ROW
此關鍵字指定函數呼叫傳回的資料各列的 HTML 格式化資料,只顯示一次。

字串
字串中可使用任何英文字母、數字與標點符號。

IF 區塊
此為 IF 區塊。 執行條件字串處理。 條件列示中的字串值, 如果是代表整數且前端或尾端沒有白色空間時,將被作為數字來比較。 它們可以有單一加號 (+) 或減號 (-) 置於前端。 關於語法及範例,請參閱IF 區塊

變數參照
傳回先前定義的變數值,並以 $ 號及 () 號加以指定。例如: 如果 VAR='abc', 則 $(VAR) 傳回值 'abc'。有關語法的詳細資訊, 請參閱變數參照

函數呼叫
呼叫一或多個先前定義的 FUNCTION 或 MACRO_FUNCTION 區塊, 或具有指定引數的內建函數。 有關語法及範例,請參閱函數呼叫 (@)

HTML 陳述式
包含任何英數字元,以及為從屬站瀏覽器製作格式的 HTML 標籤。

include 陳述式
INCLUDE 陳述式。讀取及納入檔案到 Net.Data 巨集。 有關語法及範例,請參閱INCLUDE 陳述式

include_url 陳述式
INCLUDE_URL 陳述式。讀取另一個檔案,納入指定此陳述式的 Net.Data 巨集中。 指定的檔案,可能在區域或遠端伺服器中。 有關語法及範例,請參閱INCLUDE_URL 陳述式

WHILE 區塊
WHILE 區塊。以條件式字串處理程序執行迴路。 有關語法及範例,請參閱WHILE 區塊

上下文

在這些上下文中可找到 ROW 區塊:

限制

ROW 區塊可以包含這些元素:

範例

範例 1:顯示一列姓名及位置的雙欄 HTML 表格

%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>
%}

選取表格中的一個名稱,可呼叫 name.mac Net.Data 巨集的明細 HTML 區塊, 將這二個值當作 URL 的一部份來傳送給它。您可以在本例的 name.mac 中使用這些值來尋找名稱的其它明細。

TABLE 陳述式

目的

定義一套相關資料的變數。 它裡面有一個相同記錄或橫列的陣列、以及一個說明各列欄位的直欄名稱陣列。 表格陳述式只能用於 DEFINE 陳述式或區塊。

語法

>>-%TABLE--| 上限 |--------------------------------------------><
 
上限
 
|---+------------------+----------------------------------------|
    '-(--+-號碼-+---)--'
         '-ALL--'
 

%TABLE
此關鍵字指定相關資料的集合定義, 裡面有一個相同記錄或橫列的陣列、以及一個介紹各列欄位的直欄名稱陣列。

上限
可以併入表格的列數。 如果未指定上限值,則表格可含有無限制的列數。

號碼
為一串從 0 到 9 的數字。「零」可以作為表格不受限制的列數。

ALL
此關鍵字容許表格列數不受限制。

上下文

在這些上下文中可找到 TABLE 陳述式:

限制

TABLE 陳述式可以包含這些元素:

範例

範例 1: 列數上限為 30 的 Net.Data 表格

%DEFINE myTable1=%TABLE(30)

範例 2: 使用所有列數預設值的 Net.Data

%DEFINE myTable2=%TABLE

範例 3: 指定所有列數的 Net.Data 表格

%DEFINE myTable3=%TABLE(ALL)

WHILE 區塊

目的

提供根據條件式字串處理程序的迴路結構。 您可以在 HTML 區塊、報告區塊、 ROW 區塊、IF 區塊及 MACRO_FUNCTION 區塊中使用 WHILE 區塊。條件列示中的字串值, 如果是代表整數且前端或尾端沒有白色空間時,將被作為數字來比較。 它們可以有單一加號 (+) 或減號 (-) 置於前端。

語法

                               .-----------------------.
                               V                       |
>>-%WHILE--| 條件列示 |---{-------+-----------------+--+--%}---><
                                  +-exec_sql 陳述式-+
                                  +-函數呼叫--------+
                                  +-HTML 陳述式-----+
                                  +-if 區塊---------+
                                  +-while 區塊------+
                                  +-變數參照--------+
                                  '-字串------------'
 
條件列示
 
|---(--+-(--條件列示--)----------+---)--------------------------|
       +-條件列示--&&--條件列示--+
       +-條件列示--||--條件列示--+
       +-!--條件列示-------------+
       +-| 條件 |----------------+
       '-| 詞彙 |----------------'
 
條件
 
|---詞彙--+-<--+---詞彙-----------------------------------------|
          +->--+
          +-<=-+
          +->=-+
          +-!=-+
          '-==-'
 
詞彙
 
|---+-變數名稱-------------+------------------------------------|
    '-"--+-字串-----+---"--'
         +-變數參照-+
         '-函數呼叫-'
 

%WHILE
此關鍵字指定迴路處理程序。

條件列示
比較條件及詞彙的值。使用布林運算子,可以連接條件列示。 您可以在另一個條件列示中建立巢狀條件列示。

條件
使用比較運算子,比較兩個項目。 如果下列兩個條件為真,則 IF 條件被作為數字比較:

如果其中一個條件非真,則執行一般字串比較。

詞彙
一個函數呼叫的變數名稱、字串及變數參照。

EXEC_SQL 陳述式
這是為了提供相容性才支援的 DB2WWW 版次 1 語言元素。 請參閱附錄 A. DB2 WWW 連線或「DB2 全球資訊網版次 1」文件。

函數呼叫
呼叫一或多個先前定義的 FUNCTION 或 MACRO_FUNCTION 區塊, 或具有指定引數的內建函數。 有關語法及範例,請參閱函數呼叫 (@)

HTML 陳述式
包含任何英數字元,以及為從屬站瀏覽器製作格式的 HTML 標籤。

IF 區塊
此為 IF 區塊。 執行條件字串處理。 條件列示中的字串值, 如果是代表整數且前端或尾端沒有白色空間時,將被作為數字來比較。 它們可以有一個加號 (+) 或減號 (-) 置於前端。 關於語法及範例,請參閱IF 區塊

WHILE 區塊
WHILE 區塊。以條件式字串處理程序執行迴路。 有關語法及範例,請參閱WHILE 區塊

變數參照
傳回先前定義的變數值,並以 $ 號及 () 號加以指定。例如: 如果 VAR='abc', 則 $(VAR) 傳回值 'abc'。有關語法的詳細資訊, 請參閱變數參照

字串
字串中可使用任何英文字母、數字與標點符號。 條件列示之詞彙內的字串,可以包括換行字元的任何字元。

變數名稱
可為一或多個名稱,每一個額外名稱連接在句點之後(.)。 有關語法的詳細資訊,請參閱變數名稱

上下文

在這些上下文中可找到 WHILE 區塊:

限制

WHILE 區塊可以包含這些元素:

範例

範例 1:產生表格列數的 WHILE 區塊

%DEFINE loopCounter = "1"
 
%HTML(build_table) {
%WHILE (loopCounter <= "100") {
  %{ 產生表格標籤及欄位標題 %}
  %IF (loopCounter == "1")
     <TABLE BORDER>
  <TR>
     <TH>Item #
     <TH>Description
  </TR>
%ENDIF
 
  %{ 產生個別的列 %}
  <TR>
  <TD>
  <TD>$(loopCounter)
  <TD>@getDescription(loopCounter)
  </TR>
 
  %{ 產生終止表格標籤 %}
  %IF (loopCounter == "100")
     </TABLE>
%ENDIF
 
  %{ 增量迴路計數器 %}
  @dtw_add(loopCounter, "1", loopCounter)
%}
%}
 
 
 


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