1

这是一个非常奇怪的问题,但我想知道当用户离开此特定页面时,是否可以通过单击面包屑、选项卡或后退按钮来触发运行 SQL UPDATE 的进程?

我确实设置了在“返回”按钮上运行的过程;但是我遇到了以下问题:如果她/他点击面包屑或标签怎么办。

我已经在网上搜索并发布这个问题是最后的手段。我想知道是否有人可以指出我正确的方向?

更新后的帖子

第 1 页:
包括一个文本字段和一个按钮。用户在文本字段中输入类别并单击按钮进入下一页。该按钮将文本字段中的值传递到第 2 页上的文本字段。

第 2 页:
页面上的两个区域。一个区域包含有关类别的信息 - 上一页中的类别名称、类别描述和类别修订号(这是我想要工作的内容)。第二个区域是一个报告,它提取在类别文本字段中的类别下列出的项目名称和编号。报告上使用“查看”链接来加载所选特定项目的编辑页面。“查看”链接将“类别名称”(来自类别文本字段)和“项目编号”从报告传递到第 3 页。

第 3 页
使用了两个区域,第一个区域:列出来自第 2 页的项目编号和项目名称(我使用一个简单的查询来检索)。在第二个区域中:报表使用两列:第 1 列中的项目属性列表,以及第 2 列中每个项目属性旁边的文本字段,用于保存可更新的值。“应用更改”按钮后面有一些 PlSql,可在需要时查找更改和更新。它更新已更改的相关字段,然后将用户带回第 2 页(向用户显示为最初输入的类别列出的项目的页面)。

我无法在第 3 页上的“应用更改”按钮上增加类别修订,因为用户可能会完成对同一类别下的项目的编辑。所以我不知道在哪里可以将每个类别的类别修订增加 1 个。Ps 如果使用第 3 页上的“应用更改”按钮更改了信息,我已经将每个项目的修订号加 1。

4

1 回答 1

0

这样做的一种方法是通过 ajax 更新页面项目的会话状态(不正常提交页面),并在由 javascript onbeforeunload 调用时调用更新表的应用程序进程。

创建一个应用程序进程以按需触发,命名为 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: 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 也会执行页面进程。

于 2013-01-17T22:04:11.637 回答