我在应用程序快递中遇到以下问题,这让我发疯:
我在APEX 4.1中有一个表格形式,其中包含一个链接列。当用户单击列时,我想保存应用程序的当前状态并将其重定向到另一个页面。我必须将点击链接的行的ID传递给另一页。
使用Google我找到了这个解决方案: https://forums.oracle.com/forums/thread.jspa?threadID=489666&tstart=720
我们的想法是使用特殊的REQUEST值提交页面,并使用从链接调用的javascript函数将所有必需的项值保存在隐藏的页面项中。 然后创建一个页面分支,查找特殊的REQUEST值作为条件并转到所需的页面,将目标页面中的项目设置为您之前保存的当前页面中的页面项目。
我按照说明操作,但是没有用。目标页面已加载,但未设置项目。
在我的javascript中,我发出一个警告,显示传递的ID的值。这有效。我还将表格形式的隐藏页面项目更改为文本字段,并且它们会正确更新并保持不变。
日志也显示如下:
...Session State: Saved Item "P20_PRUEFUNG_ID_AKTIV" New Value="3950"
看起来不错。
但是,在重定向后查看目标页面的URL时,它看起来像这样: ·F P = 110:22:1750507087114492 :: NO :: P22_PRUEFUNG_ID:
P22_PRUEFUNG_ID是我要在目标页面中设置的页面项的名称。请注意,该项目没有传输值。
在目标页面的日志中,我发现:
Session: Fetch session header information
Saving g_arg_names=P22_PRUEFUNG_ID and g_arg_values=
...Session State: Save "P22_PRUEFUNG_ID" - saving same value: ""
由于某种原因,第20页的值未传递到第22页。查看我的分支,我找不到任何错误。我使用以下参数创建了一个正常分支(处理后):
页数:22 设置以下项目:P22_PRUEFUNG_ID 使用以下值:& P20_PRUEFUNG_ID_AKTIV。 条件:请求= EDITSG(我的特殊请求值)。
我必须补充一点,我还是APEX的初学者。所以这可能是愚蠢的事。
解决开头所述问题的其他解决方案当然也很受欢迎。关于如何使用新插入的项目(传递新项目的ID)的想法的加分点。
修改:以下是源页面的屏幕截图:
页面中还有2个分支。第21页的分支就像第22页的分支,只是在点击表中的另一个链接(另一个REQUEST值)时触发,也不起作用。 我真的不知道为什么第20页有一个分支,这是当前页面。这是APEX增加的东西。也许是从APEX 3更新的遗留问题。无论如何我禁用它将条件设置为“never”,所以它不应该影响结果(?)
谢谢!
答案 0 :(得分:3)
我已经完成了您发布的链接和made 2 pages that do this kind of thing中提到的步骤。
第20页:emp上的表格形式,带有列链接。此链接调用javascript函数(页面> javascript),它将选定的empno放在项目P20_P_EMPNO
中(显示在底部以供参考)。
function godetail(nEmpno){
$("#P20_P_EMPNO").val(nEmpno);
doSubmit("EMPDETAIL");
};
例如,当我将BLAKE的佣金更改为10并按下铅笔时,我会转到第21页,其中显示BLAKE的详细信息。我的佣金也更新了。
我不得不改变MRU的状况。标准它绑定到提交按钮,您需要清除此字段。然后将条件更改为Request Is Contained within Expression 1
,并放置SUBMIT,<YOUR_REQUEST>
。如上所述。
对于分支,我将自己的条件分支放在序列中。这很重要,您不希望在此之前触发另一个分支。
编辑:您的第20页分支可能用于在删除时清除缓存?
确保:引用的项目拼写正确。使用上限。如果要使用项目来设置值,请使用静态文本替换字符串:&ITEM.
(许多人忘记将点放在最后)。
所以,我不确定为什么你的结果会出错。如果您愿意,可以在第20页和第21页查看我的工作区,看看您是否发现了任何内容。 http://apex.oracle.com/pls/apex 工作区:TOMPETRUSBE,apex_demo / demo
至于了解新记录的详细信息: 你显然无法通过身份证。您也无法“捕获”它,因为多行更新不会在任何地方返回id,这与单行DML流程不同。说得通。 所以你要做的不是传递一个id,而是传递一个独特的密钥。很明显,您需要使用值来指定要查看的行,因此只有在您可以获取这些行时才能使用。如果你只能使用id,那么你就不幸了。
您还需要在详细信息页面上更改DML-Fetch流程:而不是使用rowid或id,将其更改为您传递的唯一键值。超过3个领域?使用页面处理选择页面项目中的值。
一个例子是人:不是传递person_id,而是传递姓名和姓氏。
但是,如果您允许用户输入某种ID或UK,那么您可以保留它。例如,如果我允许用户在我的示例应用程序中为新行输入empno,那么它将起作用! (当提交失败时,当然除外)