我正在使用Apex 4.0.2和Oracle XE 11.
我有一个表单,其中一个字段P200_CARD_TYPE,是从值列表中设置的.我想要的是使用我在设置"仅显示"字段的查询中选择的值,P200_DESC
在Source部分中P200_DESC,我将"Source Type"设置为"SQL Query":
SELECT CARD_DESC
FROM CARDTYPE
WHERE card_type = :P200_CARD_TYPE;
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是让Apex以这种方式行事.因为P200_CARD_TYPE,如果我将"值更改后的页面操作"设置设置为"重定向和设置值",则该P200_CARD_TYPE变量似乎已设置(我将其写入表中)但
P200_DESC无法识别P200_CARD_TYPE绑定变量如果打开P200_CARD_TYPE,我有"当值更改时的页面操作"设置,所以没有,我的选择保留在屏幕上,但我不能坚持到表,P200_DESC但仍然似乎无法识别它.
我曾经想过,一旦我从LOV中做出选择P200_CARD_TYPE,我就可以在其他地方使用它了.
您似乎还没有正确理解会话状态.这类问题会在这里和OTN顶点论坛上不断出现.
HTTP是最经常传递HTML页面的协议,是无状态协议.只要下载完整页面,Web浏览器就只能连接到服务器.此外,服务器将每个页面请求视为独立事件,与之前发生的或将来可能发生的任何页面请求无关.要访问在后续页面上的一个页面上输入的表单值,必须将这些值存储为会话状态.Oracle Application Express透明地维护会话状态,并使开发人员能够从应用程序中的任何页面获取和设置会话状态值.
在您的情况下,这意味着您认为从该LOV中选择一个值会改变该项的会话状态.它不是.您在客户端选择一个值,该值只能在那里使用,直到它以某种方式被推送到服务器.
这对于在顶点理解至关重要!在继续之前,您需要了解这一点,因为您将再次遇到这样的情况.
所以现在我们有了这个,让我们继续讨论如何解决这个问题.
将值推送到服务器的最基本方法?执行页面提交.所有项目的会话状态将使用它们在客户端保存的值进行设置(例外情况适用,但暂时忽略它).
这是您选择列表操作出错的地方:您执行了重定向.重定向不是页面提交,而只是重定向.通过设置目标项的值,您只需更改该项的会话状态.
因此,不是SQL不识别变量,而是它没有任何值,因此无法呈现任何内容.
当然,提交页面可能不是您想要设置字段值的目的.提交可能会导致验证,分支或进程触发.
这就是Tony Andrews建议的:使用动态动作来动态检索值.例如,您可以将其设置为:
使用您也定义为desc项的源的sql:
SELECT CARD_DESC
FROM CARDTYPE
WHERE card_type = :P200_CARD_TYPE;
Run Code Online (Sandbox Code Playgroud)P200_CARD_TYPE.这将导致将当前值P200_CARD_TYPE提交给服务器,从而设置其会话状态,从而使查询起作用.现在,当选择列表上的值发生更改时,将对服务器/数据库进行调用,并返回一个值并在描述项中进行设置.
还有更多的东西,但这应该让你朝着正确的方向前进.