这是一个非常奇怪的问题但是我想知道当用户离开这个特定页面时是否有可能触发一个运行SQL UPDATE的进程,可以通过点击痕迹,选项卡或后退按钮来实现?
我确实设置了在“后退”按钮上运行的过程;但是我遇到了以下问题:如果他/她点击了面包屑或标签,该怎么办。
我搜索了网,发布这个问题是最后的选择。我想知道是否有人能指出我正确的方向?
更新帖子
第1页:
包括文本字段和按钮。用户在文本字段中输入类别,然后单击按钮以进入下一页。该按钮将文本字段中的值传递给第2页上的文本字段。
第2页:
页面上有两个区域。一个区域包含有关类别的信息 - 上一页中的类别名称,类别描述和类别修订号(这是我正在努力工作的)。第二个区域是一个报告,用于提取类别文本字段中类别下列出的项目名称和编号。报告上使用“查看”链接来加载所选特定项目的编辑页面。 “查看”链接将“类别名称”(来自类别文本字段)和“项目编号”从报告传递到第3页。
Page 3
使用两个区域,第一个区域:列出来自第2页的项目编号和项目的名称(我使用简单的查询来检索)。在第二个区域中:报告使用两列:第1列中的项属性列表,以及第2列中每个项属性旁边的文本字段,用于保存可更新的值。 “应用更改”按钮后面有一些PlSql,可在需要时查找更改和更新。它会更新已更改的相关字段,然后将用户返回到第2页(向用户显示为输入的类别列出的项目)。
我无法在第3页的“应用更改”按钮上增加类别修订,因为用户可能会完成对同一类别下的项目的修改。所以我不知道在哪里我可以按类别将类别修订增加1。 P.s如果使用第3页的“应用更改”按钮更改了信息,我已经将每个项目的修订号增加1。
答案 0 :(得分:0)
这样做的一种方法是通过ajax更新页面项的会话状态(不正常提交页面),并通过调用javascript onbeforeunload调用的表更新表的应用程序进程。
创建一个Application On Process来触发On Demand,名为UpdatePageXOnExit或其他东西。在该Application Process的PL / SQL块中,使用SQL update命令以及您要更新的页面上每个项目的项目状态;如下所示:
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:Execute On Page Load部分中,写下如下内容:
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,用于更新页面上已在用户端更改但尚未上传到服务器端的页面项的会话状态,这通常发生在页面提交期间。注意:如果您注释掉return语句,那么将不会有允许用户留在页面上的警告框。如果这是你喜欢的,那就去吧。如果您选择使用警告框,即使用户选择留在页面上,ajax也会执行页面处理。