REXX 語言環境可讓您執行 REXX程式。
若要使用 REXX 語言環境,您需要驗證 Net.Data 起始設定的設定值, 並設置語言環境。
請驗證下列架構陳述式是否在起始設定檔案中,且位在同一行上:
ENVIRONMENT (DTW_REXX) DTWREXX ( OUT RETURN_CODE )
請參閱環境架構陳述式,以瞭解 Net.Data 起始設定檔案及語言環境 ENVIRONMENT 陳述式。
在 REXX 語言環境中,您可以執行列入 REXX 程式及外部 REXX 程式。 列入 REXX 程式的 REXX 程式來源位於巨集中。外部 REXX 程式的 REXX 程式來源在外部檔。
若要執行列入 REXX 程式︰
定義一個函數,來使用 REXX (DTW_REXX) 語言環境, 並在函數的語言環境可執行區段中包含 REXX 程式碼。
範例︰包含列入 REXX 程式的函數
%function(DTW_REXX) helloWorld() { SAY 'Hello World' %}
若要執行外部 REXX 程式︰
定義一個函數,它將使用 REXX (DTW_REXX) 語言環境, 並包括將在 EXEC 陳述式中呼叫的 REXX 程式的路徑。
範例︰包含指向外部程式之 EXEC 陳述式的函數
%function(DTW_REXX) externalHelloWorld() { %EXEC{ helloworld.exe%} %}
必要的: 確定 REXX 檔名列示在 Net.Data 起始設定檔案中的 EXEC_PATH 架構變數所指定的路徑中。請參閱EXEC_PATH,以學習如何定義 EXEC_PATH 架構變數。
有兩種方式可將資訊傳遞給 REXX (DTW_REXX) 語言環境所呼叫的 REXX 程式:直接與間接。
%FUNCTION(DTW_REXX) rexx1() { %EXEC{ CALL1.CMD $(INPARM) "literal string" %} %}
Net.Data 變數 INPARM1 將不被參照並傳遞到外部 REXX 程式。 REXX 程式可透過 REXX PARSE ARG 指示參照此變數。 使用這種方法傳遞給程式的參數被視為輸入類型參數 (程式可使用及操作已傳遞到程式的參數, 但對參數所做的變更不會向 Net.Data 反映)。
透過 REXX 程式變數區,間接傳遞參數。 啟動 REXX 程式時, REXX 直譯器會建立並維護一個空間,其中包含所有變數的資訊。此空間稱為變數區。
呼叫 REXX (DTW_REXX) 語言環境函數時,在執行 REXX 程式之前, REXX 語言環境會先將輸入 (IN) 或輸入/輸出 (INOUT) 的任何函數參數儲存在變數區中。 REXX 程式被呼叫時就可以直接存取這些變數。在順利完成 REXX 程式時, DTW_REXX 語言環境便會判斷是否有任何輸出 (OUT) 或 INOUT 函數參數。 若有,語言環境則會從變數區中取回對應於函數參數的值,並以新值更新函數參數值。 當 Net.Data 取得控制時,它會以從 REXX 語言環境中取得的新值, 更新所有 OUT 或 INOUT 參數。例如:
%DEFINE a = "3" %DEFINE b = "0" %FUNCTION(DTW_REXX) double_func(IN inp1, OUT outp1){ outp1 = 2*inp1 %} %HTML(REPORT){ Value of b is $(b), @double_func(a, b) Value of b is $(b) %}
上例中,呼叫 @double_func 傳遞兩個參數 a 及 b。REXX 函數 double_func 重複第一個參數, 將結果儲存在第二個參數中。當 Net.Data 呼叫巨集時,b 值為 6。
您可以將 Net.Data 表格傳遞到 REXX 程式。 REXX 程式會存取 Net.Data 巨集表格參數的值作為 REXX 型變數。 對於 REXX 程式,直欄標題與欄位值包含在以表格名稱與直欄號碼識別的變數中。例如,在表格 myTable 中,直欄標題為 myTable_N.j, 而欄位值為 myTable_N.i.j,其中 i 是橫列號碼,j 為直欄號碼。 myTable_ROWS 是表格中的列數, 而 myTable_COLS 則是表格中的欄數。
若您在 AIX 系統多次呼叫 REXX 語言環境, 您可考慮將 RXQUEUE_OWNER_PID 環境變數設定為 0。 多次呼叫 REXX 語言環境的巨集就可以很容易地產生許多處理程序並清理出大量系統資源。
有三個方法來設定環境變數:
@DTW_rSETENV("RXQUEUE_OWNER_PID", "0")
/etc/environment: RXQUEUE_OWNER_PID = 0
這個方法會影響 REXX 對整個機器的行為。
InheritEnv RXQUEUE_OWNER_PID = 0
這個方法會影響 REXX 對 Web 伺服器的行為。
下列範例顯示一個呼叫 REXX 函數的巨集,以建立具有二個直欄及三個橫列的 Net.Data 表格。 呼叫 REXX 函數之後,會呼叫內建函數 DTW_TB_TABLE(), 以建立要傳回到瀏覽器的 HTML 表格。
%DEFINE myTable = %TABLE %DEFINE DTW_DEFAULT_REPORT = "NO" %FUNCTION(DTW_REXX) genTable(out out_table) { out_table_ROWS = 3 out_table_COLS = 2 /* Set Column Headings */ do j=1 to out_table_COLS out_table_N.j = 'COL'j end /* Set the fields in the row */ do i = 1 to out_table_ROWS do j = 1 to out_table_COLS out_table_V.i.j = '[' i j ']' end end %} %HTML(REPORT){ @genTable(myTable) @DTW_TB_TABLE(myTable) %}
結果:
COL1 COL2 [ 1 1 ] [ 1 2 ] [ 2 1 ] [ 2 2 ] [ 3 1 ] [ 3 2 ]