朋友们,
我在 APEX 中面临另一个挑战,希望您能提供帮助。
我使用 John & Scott 的名著“Pro Application Express”中描述的方法创建了一个树,其中页面链接存储在一个表中。下面是一个例子:
go to a page passing some parameters
f?p=&APP_ID.:3:&SESSION.::::P3_IDENTIFIER,P3_FAMILY_NAME:&P2_IDENTIFIER.,&P2_FAMILY_NAME.
当页面运行时,它按预期工作。如果需要,我可以展开树并导航到传递参数的页面。
但是,当我打开会话状态保护时,这些“手工制作”的链接停止工作。这是我所期望的,因为该链接不包含校验和。
经过一番调查,我发现我必须使用 APEX_UTIL.PREPARE_URL 来生成带有校验和的 URL。不幸的是,这是我遇到问题的地方。我似乎无法将参数值传递给调用页面。
原始的树查询是:
select "IDENTIFIER" id,
"PARENT_IDENTIFIER" pid,
"TITLE" name,
"LINK" link,
null a1,
null a2
from <some table>
然后我将其更改为使用 APEX_UTIL.PREPARE_URL:
....
APEX_UTIL.PREPARE_URL('f?p='||:APP_ID||':3:'||:APP_SESSION||'::::P3_IDENTIFIER,P3_FAMILY_NAME:&P2_IDENTIFIER.,&P2_FAMILY_NAME.') link,
...
这有效,页面被调用,我可以看到传递的参数值。但我不能使用这种方法,因为它仅限于一页!
最后,我尝试将页码、参数和参数值存储在树所基于的表的不同列中,然后将它们组合在一起:
...
APEX_UTIL.PREPARE_URL('f?p='||:APP_ID||':'||navigate_to_page||':'||:APP_SESSION||'::::'||parameters||':'||parameter_values) link,
...
Where:
navigate to page has the value of: 3
parameters has the value of: P3_IDENTIFIER,P3_FAMILY_NAME
parameter_values has the values of: &P2_IDENTIFIER.,&P2_FAMILY_NAME.
这现在调用页面,但参数值已变为文字。所以在我期待一个标识符的地方,我看到 &P2_IDENTIFIER 和同上的姓氏。
我究竟做错了什么?如何使用 apex_util_prepare_url 将值传递给我的调用页面?
如有需要,我的环境详细信息为:Apex 3.2.1、Oracle Application Server 10.1.2.3。Oracle 数据库 10.2.0.3
提前感谢您提供的任何帮助。