IBM Books

OS/400 版管理及程式設計指南


持續巨集的範例

下列簡單巨集含有會在單一異動中執行的多個 HTML 區塊:

@dtw_static()
%define a = "0"
%define(transient) b = "0"
%define handle = ""
@dtw_rtvhandle(handle)
 
%html(report) {
@dtw_accept(handle)
a = $(a)<br>
b = $(b)<br>
@dtw_add(a, "2", a)
@dtw_add(b, "2", b)
<a href="/cgi-bin/db2www/$(handle)/qsys.lib/mylib.lib/macros.file/pcgi1.mbr/report2">
click here to continue</a><br>
<a href="/cgi-bin/db2www/$(handle)/qsys.lib/mylib.lib/macros.file/pcgi1.mbr/quit">
click here to quit</a><br>
%}
 
%html(report2) {
@dtw_accept(handle)
a = $(a)<br>
b = $(b)<br>
@dtw_add(a, "2", a)
@dtw_add(b, "2", b)
<a href="/cgi-bin/db2www/$(handle)/qsys.lib/mylib.lib/macros.file/pcgi1.mbr/report3">
Click here to continue</a><br>
<a href="/cgi-bin/db2www/$(handle)/qsys.lib/mylib.lib/macros.file/pcgi1.mbr/quit">
Click here to quit</a><br>
%}
 
%html(report3) {
@dtw_accept(handle)
a = $(a)<br>
b = $(b)<br>
@dtw_add(a, "2", a)
@dtw_add(b, "2", b)
<a href="/cgi-bin/db2www/$(handle)/qsys.lib/mylib.lib/macros.file/pcgi1.mbr/quit">
Click here to quit</a><br>
%}
 
%html(quit) {
@dtw_terminate()
a = $(a)<br>
b = $(b)<br>
done
%}

假定第一個呼叫是要呼叫 HTML 區塊 report,則 Net.Data 將:

  1. 呼叫 DTW_STATIC() 函數,指出這個巨集是持續的。
  2. 建立變數 a 作為 STATIC 變數,因為持續巨集的預設值為 STATIC。
  3. 建立變數 b 作為 TRANSIENT 變數,因為將透過 TRANSIENT 屬性, 以明確方式定義它。
  4. 呼叫 DTW_RTVHANDLE(),產生一個異動 handle 並將它置於變數 handle 中。
  5. 開始處理 HTML 區塊 report 並呼叫 DTW_ACCEPT(), 告訴 Net.Data 哪一個異動 handle 是供這個異動使用。
  6. 尋找要傳送到瀏覽器的輸出,這使得 Net.Data 會將 HTTP 表頭傳送到 Web 伺服器, 指出異動正在啟動中。
  7. 顯示 HTML 頁面。變數 ab 均具有 0 值。

在第一個頁面輸出傳送到瀏覽器之後,使用者可以選擇要繼續異動或退出。 如果他們選擇繼續,Web 伺服器將呼叫 URL:

/cgi-bin/db2www/$(handle)/qsys.lib/mylib.lib/macros.file/pcgi1.mbr/report2

Web 伺服器會將異動 handle 識別為 Net.Data 在 HTTP 表頭中設定的 handle。 它會呼叫 Net.Data 作為持續 CGI 程式,表示巨集呼叫是現行異動的一部份。

當呼叫 HTML 區塊 report2 時,Net.Data 將:

  1. 呼叫 DTW_STATIC() 函數,指出這個巨集是持續的。
  2. 承認變數 a 是一個 STATIC 變數,且保存現行值, 而不是將它重新起始設定為 0。
  3. 承認變數 b 是 TRANSIENT 變數,建立變數的新案例, 然後將它起始設定為 0。
  4. 呼叫 DTW_RTVHANDLE(),產生一個異動 handle 並將它置於變數 handle 中。
  5. 開始處理 HTML 區塊 report2 並呼叫 DTW_ACCEPT(), 告訴 Net.Data 哪一個異動 handle 是供這個異動使用。
  6. 尋找要傳送到瀏覽器的輸出,這使得 Net.Data 會將 HTTP 表頭傳送到伺服器, 指出異動正在作用中。
  7. 顯示 HTML 頁面。變數 a 將具有值 2, 而變數 b 將具有值 0。會從先前呼叫中儲存變數 a 的值, 因為它是靜態變數。 變數 b 的值將重設為 0。

在第兩個頁面傳送到瀏覽器之後,使用者可以選擇要繼續異動或退出。 如果他們選擇退出,Web 伺服器將呼叫下列 URL:

/cgi-bin/db2www/$(handle)/qsys.lib/mylib.lib/macros.file/pcgi1.mbr/quit

Web 伺服器會將異動 handle 識別為 Net.Data 在 HTTP 表頭中設定的 handle, 且會呼叫 Net.Data 作為持續 CGI 程式,表示巨集呼叫是現行異動的一部份。

當呼叫 HTML 區塊 quit 時,Net.Data 將:

  1. 呼叫 DTW_STATIC() 函數,指出這個巨集是持續的。
  2. 承認變數 a 是一個 STATIC 變數,且保存現行值, 而不是將它重新起始設定為 0。
  3. 承認變數 b 是 TRANSIENT 變數,建立變數的新案例, 然後將它起始設定為 0。
  4. 呼叫 DTW_RTVHANDLE(),產生一個異動 handle 並將它置於變數 handle 中。
  5. 開始處理 HTML 區塊 quit 並呼叫 DTW_TERMINATE(), 告訴 Net.Data 這是這個異動中的最後一個呼叫。
  6. 尋找要傳送到瀏覽器的輸出,這使得 Net.Data 會將 HTTP 表頭傳送到伺服器, 指出正在終止異動。
  7. 顯示 HTML 頁面。變數 a 具有值 4,而變數 b 具有值 0。
  8. 清除所有變數及其他具有異動層次範圍的資源, 因為已執行了 DTW_TERMINATE() 呼叫。


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