系統語言環境支援執行指令及呼叫外部程式。
將下列架構陳述式新增到起始設定檔案,須在同一行上:
ENVIRONMENT (DTW_SYSTEM) DTWSYS ( OUT RETURN_CODE )
請參閱環境架構陳述式,以瞭解 Net.Data 起始設定檔案及語言環境 ENVIRONMENT 陳述式。
若要發出一個指令,請定義一個使用系統 (DTW_SYSTEM) 語言環境的函數, 而這個語言環境須包括將在 EXEC 陳述式中發出的指令的路徑。例如:
%FUNCTION(DTW_SYSTEM) sys1() { %EXEC { ADDLIBLE.CMD %} %}
如果您使用 EXEC_PATH 架構變數來定義含有物件 (如指令與程式) 的目錄的路徑, 則您可以縮短可執行物件的路徑。請參閱 EXEC_PATH,以學習如何定義 EXEC_PATH 架構變數。
範例 1:發出指令
%FUNCTION(DTW_SYSTEM) sys2() { %EXEC { MYPGM %} %}
範例 2:呼叫程式
%FUNCTION(DTW_SYSTEM) sys3() { %EXEC {MYPGM.EXE %} %
有兩種方式可將資訊傳遞給「系統」(DTW_REXX) 語言環境所呼叫的程式:直接與間接。
%DEFINE INPARM1 = "SWITCH1" %FUNCTION(DTW_SYSTEM) sys1() { %EXEC{ CALL1.CMD $(INPARM1) "literal string" %} %}
Net.Data 變數 INPARM1 將被參照並傳遞到程式。 參數傳遞到程式的方式將同於從指令行中呼叫程式時參數傳遞到程式的方式。 使用這種方法傳遞給程式的參數被視為輸入類型參數 (程式可使用及操作已傳遞到程式的參數, 但對參數所做的變更不會向 Net.Data 反映)。
「系統」語言環境無法直接傳遞或取回 Net.Data 變數, 所以將以下列方式使它們可供程式使用:
name="value"
對於多個資料項目,請以換行或空白字元分隔每一個項目。
如果變數名稱同於輸出參數名稱,且使用上述語法, 則新值將置換現行值。如果變數名稱沒有對應到輸出參數, 則 Net.Data 將不會處理它。
下列範例將顯示 Net.Data 如何從巨集傳遞變數。
%FUNCTION(DTW_SYSTEM) sys1 (IN P1, OUT P2, P3) { %EXEC { UPDPGM %} %}
您可以將 Net.Data 表格傳遞到「系統」語言環境所呼叫的程式。 程式會依據它們的 Net.Data 名稱來存取 Net.Data 巨集表格參數的值。 直欄標題與欄位值包含在以表格名稱與直欄號碼識別的變數中。 例如, 在 myTable 中,直欄標題為 myTable_N_j, 而欄位值為 myTable_V_i_j,其中 i 是橫列號碼,j 為直欄號碼 表格的橫列與直欄數目為 myTable_ROWS 與 myTable_COLS。
不建議您傳遞具有多列的表格,因為處理的環境變數的數目受到限制。
下列範例顯示一個巨集,它有一個具有三個參數 (P1、P2 與 P3) 的函數定義。P1 為輸入 (IN) 參數,而 P2 與 P3 則為輸出 (OUT) 參數。 函數呼叫程式 UPDPGM,以 P1 的值更新參數 P2, 並將 P3 設定為字串。在處理 %EXEC 區塊中的陳述式之前, DTW_SYSTEM 語言環境會將 P1 與對應值儲存在環境空間中。
%DEFINE { MYPARM2 = "ValueOfParm2" MYPARM3 = "ValueOfParm3" %} %FUNCTION(DTW_SYSTEM) sys1 (IN P1, OUT P2, P3) { %EXEC { UPDPGM %} %} %HTML(upd1) { <p> Passing data to a program. The current value of MYPARM2 is "$(MYPARM2)", and the current value of MYPARM3 is "$(MYPARM3)". Now we invoke the Web macro function. @sys1("ValueOfParm1", MYPARM2, MYPARM3) <p> 在函數呼叫後,MYPARM2 的值為 "$(MYPARM2)", MYPARM3 的值為 "$(MYPARM3)"。 %}