在 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 會執行數字比較:
有效字串的範例:
+1234567890 -47 000812 92000
無效字串的範例:
- 20 (包含空白字元) 234,000 (包含逗號) 57.987 (包含小數點)
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 不支援非整數數字的數值比較。