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