Oracle apex 分支机构不';不传递项目值

Oracle apex 分支机构不';不传递项目值,oracle-apex,Oracle Apex,我在application express中遇到以下问题,这让我抓狂: 我在APEX 4.1中有一个表格,其中包括一个链接列。当用户单击该列时,我希望保存应用程序的当前状态并将其重定向到另一个页面。我必须将单击链接所在行的ID传递到另一个页面 使用谷歌,我找到了这个解决方案: 其思想是使用一个特殊的请求值提交页面,并使用从链接调用的javascript函数将所有必需的项值保存在隐藏的页面项中。 然后创建一个页面分支,查找特殊请求值作为条件,并转到所需页面,将目标页面中的项目设置为之前保存的当前

我在application express中遇到以下问题,这让我抓狂:

我在APEX 4.1中有一个表格,其中包括一个链接列。当用户单击该列时,我希望保存应用程序的当前状态并将其重定向到另一个页面。我必须将单击链接所在行的ID传递到另一个页面

使用谷歌,我找到了这个解决方案:

其思想是使用一个特殊的请求值提交页面,并使用从链接调用的javascript函数将所有必需的项值保存在隐藏的页面项中。 然后创建一个页面分支,查找特殊请求值作为条件,并转到所需页面,将目标页面中的项目设置为之前保存的当前页面中的页面项目

我按照指示做了,但不起作用。已加载目标页,但未设置项

在我的javascript中,我放置了一个警报,显示传递的ID的值。这很有效。我还将表格表单的隐藏页面项更改为文本字段,它们得到正确更新并被持久化

日志还显示如下内容:

...Session State: Saved Item "P20_PRUEFUNG_ID_AKTIV" New Value="3950"
看起来不错

但是,在重定向后查看目标页面的URL时,它看起来如下所示: f?p=110:22:1750507087114492::否::P22\u PRUEFUNG\u 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\u PRUEFUNG\u ID 使用这些值:&P20\u PRUEFUNG\u ID\u AKTIV。 条件:Request=EDITSG(我的特殊请求值)

我必须补充一点,我仍然是APEX的初学者。所以这可能是愚蠢的事情

当然,解决开头描述的问题的其他解决方案也会出现。如何使用新插入的项目(传递新项目的id)进行此操作的想法奖励积分

编辑:以下是源页面的屏幕截图:

页面中还有两个分支。到第21页的分支与到第22页的分支类似,只是在单击表中的另一个链接(另一个请求值)时触发,而且也不起作用。 我真的不知道为什么有一个分支到第20页,这是当前页面。这是APEX添加的内容。也许是APEX 3更新后的遗骸。在任何情况下,我禁用了它,将条件设置为“从不”,因此它不应影响结果(?)


谢谢

我已经完成了您发布和发布的链接中提到的步骤。 第20页:emp的表格形式,带有列链接。此链接调用一个javascript函数(页面>javascript),该函数将选定的empno放入一个项目
P20\u P\u empno
(显示在底部以供参考)

例如,当我将布莱克的佣金改为10并按下铅笔时,我会被引导到第21页,那里显示了布莱克的详细信息。我的佣金也更新了

我不得不改变MRU的状况。如果绑定到“提交”按钮,则需要清除此字段。然后将条件更改为
表达式1中包含的请求,并将
提交,
。如上所述。 对于分支,我将自己的条件分支放在序列的第一位。这一点很重要,你不希望在这一个分支之前再触发另一个分支。

编辑:您的第20页分支可能用于在删除时清除缓存

确保:引用的项目拼写正确。使用大写字母。如果要使用项来设置值,请使用静态文本替换字符串:
&item.
(许多人在开始时忘记将点放在末尾)

所以,我不知道你那边为什么出了问题。如果你愿意,你可以在我的工作区第20页和第21页看看,看看你是否发现了什么。 工作区:TOMPETRUSBE,apex_演示/演示

至于查看新记录的详细信息: 显然,您不能传递id。您也不能“捕获”它,因为与单行DML进程不同,多行更新不会在任何地方返回id。有道理。 因此,您要做的不是传递id,而是传递唯一的密钥。很明显,您需要使用值来指定要查看的行,因此只有当您能够获得这些值时,这才起作用。如果你只能用身份证工作,那你就倒霉了

您还需要更改详细信息页面上的DML获取过程:不要使用rowid或id,而是将其更改为传递的唯一键值。超过3个字段?使用页面进程将值选择到页面项目中

例如person:您不需要传递person_id,而是传递姓名和姓氏


但是,如果您允许用户输入某种ID或UK,那么您可以这样保存它。例如,如果我允许用户在我的示例应用程序中为新行输入empno,那么它将起作用!(当然,提交失败时除外)

除了MRU/MRD和除您的分行到p22之外的其他分行,页面上还有其他流程吗?如果是,是在这些过程之前还是之后?也许你可以附加一个页面截图,这样我们就可以看到设置,而不必猜测:)我添加了一个截图。正如您所看到的,没有更多的页面进程。而其他分支具有不正确的条件。我感谢你的帮助!我让它工作了!虽然我不知道为什么。。。我更改了分支的顺序,因此第20页的(已停用)分支位于最后一个,并且有效。所以,为了看看这是否真的是问题所在,我把它改回原来的顺序,然后。。。它仍然有效!?也许某些内部状态是错误的,只是改变了周围的顺序就解决了。。。无论如何,谢谢
function godetail(nEmpno){
   $("#P20_P_EMPNO").val(nEmpno);
   doSubmit("EMPDETAIL");
};