在 Net.Data 巨集中,請使用 IF 區塊來執行條件式處理。 該 IF 區塊類似於大部份高階語言中的 IF 陳述式,因其提供測試一個或數個條件, 然後基於條件測試的結果,來執行陳述式區塊的能力。
您幾乎可於巨集中的任意處設定 IF 區塊,且可以使用巢狀。 有關 IF 區塊的語法,請參閱 Net.Data 參考手冊中有關語言結構的章節。
IF 區塊規則:IF 區塊語法的規則,是由區塊在巨集中的位置所決定。IF 區塊的可執行區塊陳述式中,容許的元素是基於 IF 區塊本身的位置而定。
%HTML 區塊 ... %IF 區塊 ... %INCLUDE ... %WHILE ... %ENDIF %}
%IF ... %DEFINE ... %FUNCTION ... %ENDIF
例如,巢狀 IF 區塊必須遵循當它在 HTML 區塊之中時的規則。
%IF ... %HTML { ... %IF ... %ENDIF %} ... %ENDIF
例外狀況:請勿在 IF 區塊中設定 ROW 區塊。
IF 區塊字串比較
Net.Data 基於構成條件的函數項內容所產生的方式之一,來處理 IF 區塊條件列示。 預設動作是將所有函數項視為字串,並依條件所示執行字串比較。 不過,如果在兩個代表整數的字串之間作比較,這是一種數值比較。如果字串僅含有數字,且選用性在前面有 '+' 或 '-' 字元, 則 Net.Data 將假設它為數字。 字串不能包含 '+' 或 '-' 以外的任何非數字字元。 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 區塊的巨集
%{ 此巨集是從另一個巨集被呼叫,在此套表資料中 傳送作業系統及版本變數。 %} %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") { outer while loop #$(a)<br /> %IF (@dtw_rdivrem(a,"2") == "0") this is an even number loop<br /> %ENDIF @DTW_ADD(a, "1", a) %} %}