分支不传递项目值

时间:2012-01-16 20:29:42

标签: oracle-apex

我在应用程序快递中遇到以下问题,这让我发疯:

我在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)的想法的加分点。

修改:以下是源页面的屏幕截图: Source page

页面中还有2个分支。第21页的分支就像第22页的分支,只是在点击表中的另一个链接(另一个REQUEST值)时触发,也不起作用。 我真的不知道为什么第20页有一个分支,这是当前页面。这是APEX增加的东西。也许是从APEX 3更新的遗留问题。无论如何我禁用它将条件设置为“never”,所以它不应该影响结果(?)

谢谢!

1 个答案:

答案 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>。如上所述。 对于分支,我将自己的条件分支放在序列中。这很重要,您不希望在此之前触发另一个分支。 branch details

编辑:您的第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,那么它将起作用! (当提交失败时,当然除外)