2013-01-15 31 views
0

這是一個非常奇怪的問題,但我想知道是否有可能在用戶離開這個特定頁面時觸發一個運行SQL UPDATE的進程,通過點擊麪包屑,標籤或後退按鈕?當離開APEX頁面時觸發一個進程(SQL更新)

我確實設置了在'返回'按鈕上運行的過程;但是我遇到了這樣的問題:如果他/他點擊麪包屑或標籤來代替。

我搜查了網絡,發佈這個問題是最後的手段。我想知道是否有人可以指出我正確的方向?

更新的帖子

第1頁:
包含一個文本字段和一個按鈕。用戶將該類別輸入到文本字段中,然後單擊按鈕進入下一頁。該按鈕通過在文本字段中的文本字段上的頁面2.

第2頁的值:在網頁
兩個區域。一個區域保存關於類別的信息 - 來自前一頁的類別名稱,類別描述和類別修訂號(這正是我想要工作的)。第二個區域是一個報告,用於提取類別文本字段中類別下列出的項目名稱和編號。報告使用「查看」鏈接加載所選特定項目的編輯頁面。在「查看」鏈接傳遞「類別名稱」(從類別文本字段),從第3頁。

第3頁
兩個區域使用,第一區域報告中的「項號」:列表來自第2頁的商品編號和商品名稱(我使用簡單的查詢進行檢索)。在第二個區域中:報告與兩列一起使用:第1列中的項目屬性列表以及第2列中每個項目屬性旁邊的文本字段用於保存可更新的值。 「應用更改」按鈕有一些PlSql,後面會根據需要查找更改和更新。它會更新已更改的相關字段,然後將用戶帶回第2頁(頁面顯示用戶列出的用於最初輸入類別的項目)。

我無法增加第3頁上的「應用更改」按鈕上的類別修訂,因爲用戶可能會完成相同類別下項目的編輯。所以我不知道我在哪裏可以將類別修訂增加1次。 Ps如果使用第3頁上的「應用更改」按鈕更改了信息,則已將每個項目的版本號增加1.

+0

如果這是一個數據輸入表單,如果進行檢查以查看是否進行了更改並提示用戶執行更新而不是更好,那麼這樣做會不會更好? – Tom

+0

@Tom我找到了一篇關於使用Javascript檢查更改的博客文章;但是頁面只顯示信息,頁面上沒有完成編輯。其實我認爲這可能是你的博客。 – Blob

+0

爲什麼當頁面(以任何方式)由用戶留下時,實際上是否想要觸發更新?訪問該頁面是否必須觸發一些特殊的內容?他們需要以某種方式進行互動嗎?爲什麼,如果沒有條目,是否需要運行某個流程? – Tom

回答

0

這樣做的一種方法是更新頁面項目的會話狀態正常提交頁面)通過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也會執行頁面過程。

相關問題