oracle apex值列表 - 选择值并在下一个字段中的SQL查询中使用

时间:2013-06-18 15:46:20

标签: oracle-apex

我正在使用Apex 4.0.2和Oracle XE 11.

我有一个表单,其中一个字段P200_CARD_TYPE是从值列表中设置的。我想要的是使用我在查询中选择的值,该查询设置“仅显示”字段,P200_DESC

P200_DESC的“源”部分中,我将“源类型”设置为“SQL查询”:

SELECT CARD_DESC
  FROM CARDTYPE
 WHERE card_type = :P200_CARD_TYPE;

我遇到的问题是让Apex以这种方式行事。 对于P200_CARD_TYPE,如果我将“值更改后的页面操作”设置设置为“重定向和设置值”,则P200_CARD_TYPE变量似乎已设置(我将其写入表中)但< / p>

  1. 它不会保留在字段显示中,(返回到我的空显示设置)
  2. P200_DESC无法识别P200_CARD_TYPE绑定变量
  3. 如果在P200_CARD_TYPE,我有“更改值时的页面操作”设置,那么我的选择会保留在屏幕上,但我无法坚持到桌面,P200_DESC似乎仍然没有认识到它。

    一旦我从LOV中做出选择,我就会想到P200_CARD_TYPE已设定,我可以在其他地方使用它。

1 个答案:

答案 0 :(得分:5)

您似乎还没有正确理解会话状态。这类问题会在这里和OTN顶点论坛上不断出现。

From the docs:

  

HTTP,最经常传递HTML页面的协议   无国籍协议。 Web浏览器仅连接到服务器   只要下载一个完整的页面。另外,每个   页面请求被服务器视为独立事件,   与先前或可能发生的任何页面请求无关   发生在将来。访问在a上的一个页面上输入的表单值   后续页面,值必须存储为会话状态。神谕   Application Express透明地维护会话状态并提供   能够从中获取和设置会话状态值的开发人员   应用程序中的任何页面。

在您的情况下,这意味着您认为从该LOV中选择一个值会改变该项目的会话状态。它不是。您在客户端选择一个值,该值仅在那里可用,直到以某种方式将其推送到服务器。

这对于在顶点理解至关重要!在继续之前,您需要了解这一点,因为您将再次遇到这样的情况。

所以现在我们已经掌握了这一点,让我们继续讨论如何解决这个问题。

将值推送到服务器的最基本方法?执行页面提交。所有项目的会话状态将使用它们在客户端保存的值进行设置(例外情况适用但现在暂时忽略)。
这是您选择列表操作出错的地方:您执行了重定向。重定向不是页面提交,而只是重定向。通过设置目标项的值,您只需更改该项的会话状态 因此,不是SQL不识别变量,而是它没有任何值,因此无法呈现任何内容。
当然,提交页面可能不是您想要设置字段值的目的。提交可能会导致验证,分支或进程触发。

这就是Tony Andrews所建议的:使用动态动作来动态检索值。例如,您可以将其设置为:

  • 设置选择列表,以便在值发生更改时不执行任何操作。
  • 右键单击树视图中的选择列表,然后选择“创建动态操作”
  • 当事件选择“更改”事件
  • 对于真实操作,请选择“设置值”
  • “Set type”应为“sql statement”
  • 使用您也定义为desc项目的源的SQL:

    SELECT CARD_DESC
      FROM CARDTYPE
     WHERE card_type = :P200_CARD_TYPE;
    
  • 最后非常重要:在“要提交的网页项目”字段中,添加P200_CARD_TYPE。这将导致将P200_CARD_TYPE的当前值提交给服务器,从而设置其会话状态,从而使查询起作用。

现在,当选择列表上的值发生变化时,将对服务器/数据库进行调用,并返回一个值并在描述项中进行设置。
除此之外还有更多,但这应该让你朝着正确的方向前进。