這樣做的一種方法是更新頁面項目的會話狀態正常提交頁面)通過ajax並調用一個應用程序進程來更新表,當被javascript onbeforeunload調用時。
創建一個應用程序進程以觸發On Demand,命名爲UpdatePageXOnExit或其他。在該應用程序進程的PL/SQL塊中,使用SQL更新命令以及您希望更新的頁面上每個項目的項目狀態;類似如下:
BEGIN
UPDATE table_name SET col1 = :PX_ITEM_1, col2 = :PX_ITEM_2, col3 = :PX_ITEM3, col4 = :PX_ITEM_4, col5 = PX_ITEM_5
WHERE (condition... I would suggest ROWIDs to simplify changes to the
fields of the PK; otherwise you will have to create additional
page items for each field of the PK, then set those items to
the values of the PK when the page loads using a before
header page process, and then use those values in this where
clause like this: where col1 = :PX_ORIGINAL_PK_FIELD_1 AND col2 =
:PX_ORIGINAL_PK_FIELD_2);
END ;
轉到頁設置對特定頁面,並在JavaScript:執行在頁面加載部分,寫類似以下內容:
window.onbeforeunload = updateOnExit;
而且在JavaScript函數和全局變量的聲明,寫類似以下內容:
function updateOnExit() {
var get = new htmldb_Get(null,&APP_ID.,'APPLICATION_PROCESS=UpdatePageXOnExit',&APP_PAGE_ID.);
get.add('PX_ITEM_1',$x('PX_ITEM_1').value)
get.add('PX_ITEM_2',$x('PX_ITEM_2').value)
get.add('PX_ITEM_3',$x('PX_ITEM_3').value)
get.add('PX_ITEM_4',$x('PX_ITEM_4').value)
get.add('PX_ITEM_5',$x('PX_ITEM_5').value)
gReturn = get.get();
get = null;
// Comment out the following line or not, as per the note in the following paragraph
return 'Are you sure you would like to leave the page?';
}
這最後一塊是更新頁面上的頁面項目的會話狀態的AJAX已經在用戶端進行了更改,但尚未上傳到通常在頁面提交期間發生的服務器端。注意:如果您註銷退貨聲明,則不會有警告框允許用戶留在頁面上。如果那是你喜歡的,那就去做吧。如果您選擇使用警告框,即使用戶選擇留在頁面上,ajax也會執行頁面過程。
如果這是一個數據輸入表單,如果進行檢查以查看是否進行了更改並提示用戶執行更新而不是更好,那麼這樣做會不會更好? – Tom
@Tom我找到了一篇關於使用Javascript檢查更改的博客文章;但是頁面只顯示信息,頁面上沒有完成編輯。其實我認爲這可能是你的博客。 – Blob
爲什麼當頁面(以任何方式)由用戶留下時,實際上是否想要觸發更新?訪問該頁面是否必須觸發一些特殊的內容?他們需要以某種方式進行互動嗎?爲什麼,如果沒有條目,是否需要運行某個流程? – Tom