參考手冊

DTW_CACHE_PAGE


AIX HP-UX Linux OS/2 OS/390 OS/400 PTX SUN Win NT
X






X

目的

快取因巨集處理結果而產生的部份或全部網頁。

格式

@DTW_CACHE_PAGE(cacheID, pageID, age, status)

參數

表 30. DTW_CACHE_PAGE 參數
參數 使用 說明
cacheID IN 一個字串變數用來識別頁面將被放置的快取記憶體。
pageID IN 一個包含識別字的字串變數, 在後續的 DTW_CACHE_PAGE 快取要求中,用來指定快取頁面的位置。 字串可以是一個 URL。
age IN 一個字串變數, 包含了以秒為單位的時間長度。這個參數決定一個頁面是否過期。如果 頁面已經比 age 還要舊時,此頁面就不會被傳送到瀏覽器。

如果 age 被設定為 -1,且頁面存在快取記憶體中,則不論其經歷時間, Net.Data 會直接從快取記憶體中將它傳送到 Web 瀏覽器。 Net.Data 不會置換快取記憶體中的頁面。

status OUT 顯示快取頁面狀態的 字串變數。可能的值是以小寫顯示:
  • ok:當巨集執行終止時,輸出頁面會被送到 快取記憶體。
  • new:頁面不在快取記憶體中。
  • renew:頁面在快取記憶體中,但已過期。
  • no_cache:所指定的快取記憶體識別字 不存在。必須在快取記憶體架構檔中定義。您的巨集可以繼續執行,無須快取頁面。
  • inactive:您指定的快取記憶體已被標示為 非作用中。您的巨集可以繼續執行,無須快取頁面。
  • busy:在這次執行中, 您的巨集已經曾發出 DTW_CACHE_PAGE 內建函數。您的巨集可以繼續執行。
  • error:嘗試與快取記憶體通信時發生錯誤。

回覆碼

表 31. DTW_CACHE_PAGE 回覆碼
回覆碼 說明
-1001 伺服器無法處理 Net.Data 的配置記憶體要求。
1001 輸入參數包含 NULL 值。
1002 輸入參數包含的字串有空字元結尾。
1003 函數呼叫上傳遞的參數數目不正確。
1005 函數呼叫上傳遞的參數必須是字串變數,但卻是不同的變數類型。
1006 文字字串傳遞給函數呼叫中的參數, 但此參數必須是輸出參數。
1007 參數包含的值無效。

用法注意事項

  1. 當 DTW_CACHE_PAGE() 被呼叫時,它會嘗試從快取記憶體取回指定的頁面, 並將該頁面傳送到 Web 瀏覽器,就如同它是由巨集所產生的輸出頁面一樣。如果找到頁面且該頁面未過期, Net.Data 會停止巨集的處理、跳出巨集、並將快取的頁面傳送到 Web 瀏覽器。

    如果所要求的頁面不在快取記憶體中,或現有的快取頁面 已經大於 age 值,Net.Data 會產生新的輸出頁面。 當巨集順利的完成後,Net.Data 會將新頁面傳送到 瀏覽器,並同時快取頁面。

  2. 對於大部份快取應用程式而言, 在巨集頂端設定 DTW_CACHE_PAGE(),以便快取執行巨集時產生的所有網頁。 這個方法可在更新巨集時更容易維護巨集。例如,當函數位於巨集的中間, 一個 HTML 報告區段在較早時加入巨集中,可能會被忽略。 Net.Data 將不會快取新報告輸出。 此外, 這個方法可以增進執行效能,因為當 Net.Data 決定頁面已快取時, 它會停止所有進一步的處理程序。

    對於進階快取應用程式而言,當您需要在處理過程中決定快取的特定位置時, 您可以將函數放置在巨集的特定位置,而不是巨集開頭。 例如, 您可能需要基於在查詢或函數呼叫後要傳回多少列數而來作快取的決定。

範例

範例 1:將 DTW_CACHE_PAGE() 函數放置在巨集的開頭, 以擷取所有 HTML 輸出

%IF (customer_status == "Classic")
 @DTW_CACHE_PAGE("mymacro.mac", "http://www.mypage.org", "-1", status)
%ENDIF
 % DEFINE { ...%}
...
%HTML (OUTPUT) {
 <title>這是頁面標題
 </head>
  <body>
  <center>
 這是主標題
 <p>現在時刻 $(time)。祝您有愉快的一天!
  </body>
  </html>
%} 

範例 2:將函數放置在 HTML 區塊中, 因為快取的決定取決於 HTML 輸出的 預期大小

%DEFINE { ...%}
...
%FUNCTION(DTW_SQL) count_rows(){
  從客戶選取 count(*)
%REPORT{
%ROW{
  @DTW_ASSIGN(ALL_ROWS, V1)
%}
%}
%}
%FUNCTION(DTW_SQL) all_customers(){
  select * from customer
%}
%HTML (OUTPUT) {
  <html>
 <head>
 <title>這是客戶列表
 </head>
  <body>
@count_rows()
 %IF ($(ALL_ROWS) > "100")
 @DTW_CACHE_PAGE("mymacro.mac", "http://www.mypage.org", "-1", status)
%ENDIF
@all_customers()
  </body>
  </html>
%}

在這個範例中,頁面的快取或取回是基於 HTML 輸出 的預期大小。只有當資料庫表格內容超過 100 列時,HTML 輸出頁 才值得快取。執行巨集後,Net.Data 總是將 OUTPUT 區塊中的文字,這是客戶列表,傳送到 瀏覽器;文字從不快取。當 IF 區塊的條件滿足時, @count_rows() 函數呼叫的下幾行, 會被快取或取回。兩者一同形成 完整的 Net.Data 輸出頁面。

範例 3:動態取回快取記憶體 ID 與 快取頁面 ID

%HTML (OUTPUT) {
 %IF (customer == "Joe Smith")
@DTW_CACHE_PAGE(@DTW_rGETENV("DTW_MACRO_FILENAME"), @DTW_rGETENV("URL"),"-1", status)
%ENDIF
...
  <html>
 <head>
 <title>這是頁面標題</title>
 </head>
  <body>
  <center>
 <h3>這是主標題</h3>
 <p>今天是 @DTW_rDATE()。祝您有愉快的一天!</p>
  </center>
  </body>
  </html>
%}


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