IBM Books

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

條件式邏輯

在 Net.Data 巨集中,請使用 IF 區塊來執行條件式處理程序。 該 IF 區塊類似於大部份高階語言中的 IF 陳述式,因其提供測試一個或數個條件, 然後基於條件測試的結果,來執行陳述式區塊的能力。

您幾乎可於巨集中的任意處設定 IF 區塊,且可以使用巢狀。 有關 IF 區塊的語法,請參閱 Net.Data 參考手冊中語言結構一章。

IF 區塊語法的規則,是由區塊在巨集檔中的位置所決定。 IF 區塊的可執行區塊陳述式中,容許的元素是基於 IF 區塊本身的位置而定。 在含有 IF 區塊的區塊中有效之任何元素,在該 IF 區塊之內亦有效。 例如,若您在 HTML 區塊中設定 IF 區塊,則 HTML 區塊中容許的任何元素, 在 IF 區塊中也容許,例如 INCLUDE 陳述式和 WHILE 區塊。

  %HTML 區塊
... 
     %IF 區塊
...   
    %INCLUDE
...
    %WHILE
 

同樣地,若於 Net.Data 巨集之宣告部份的其他區塊以外設定 IF 區塊, 則只有其他區塊 (例如 DEFINE 區塊或 FUNCTION 區塊) 之外容許的那些元素, 在 IF 區塊中才容許。

%IF 
...
%DEFINE
...
  %FUNCTION
 

當某個 IF 區塊巢狀於另一個 IF 區塊內,而後者位於宣告部份中其他區塊之外時, 可以使用外部區塊所使用的任何元素。當某個 IF 區塊巢狀於另一個區塊內,而後者位於某個 IF 區塊中時, 請使用所在區塊的語法規則。

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

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

例外狀況:當 IF 區塊位於 REPORT 區塊之內時, 請勿在 IF 區塊中設定 ROW 區塊。

Net.Data 基於構成條件的詞彙內容所產生的方式之一,來處理 IF 區塊條件列示。 預設動作是將所有詞彙視為字串,並依條件所示執行字串比較。 然而,若下列二條件符合,則 Net.Data 會執行數字比較:

Net.Data 於執行 IF 區塊時評估該區塊,這個時間可不同於 Net.Data 原來讀取它的時間。 例如,若您在 REPORT 區塊中設定 IF 區塊,則 Net.Data 在讀取含有 REPORT 區塊的 FUNCTION 區塊定義時, 不會評估與 IF 區塊相關的條件列示,而是在呼叫並執行函數時才評估。這在 IF 區塊的條件列示部份和要執行的區塊陳述式兩者皆是如此。

範例:含有其他區塊內的 IF 區塊的巨集檔案

%{ 此巨集是從另一個巨集被呼叫,在此套表資料中
   傳送作業系統及版本變數。
%}
 
%IF (platform == "AS400")
  %IF (version == "V3R2")
     %INCLUDE "as400v3r2_def.hti"
  %ELIF (version == "V3R7")
     %INCLUDE "as400v3r7_def.hti"
  %ELIF (version == "V4R1")
     %INCLUDE "as400v4r1_def.hti"
%ENDIF
%ELSE
     %INCLUDE "default_def.hti"
%ENDIF
 
%MACRO_FUNCTION numericCompare(IN term1, term2, OUT result) {
%IF (term1 < term2)
  @dtw_assign(result, "-1")
%ELIF (term1 > term2)
  @dtw_assign(result, "1")
%ELSE
  @dtw_assign(result, "0")
%ENDIF
%}
  
%HTML(report){
  %WHILE (a < "10") {
    外部 while 迴路 #$(a)<BR>
    %IF (@dtw_rdivrem(a,"2") == "0")
      這是奇數迴路<BR>
%ENDIF
    @DTW_ADD(a, "1", a)
  %}
%}

限制:Net.Data 不支援非整數數字的數值比較。


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