打开会话状态保护时,如何在Oracle APEX中的树上创建手动链接?

时间:2009-12-21 08:52:43

标签: oracle10g oracle-apex

朋友,

我正面临着APEX的另一项挑战,我希望你能提供帮助。

我使用John& Sons中描述的方法创建了一棵树。斯科特精湛的书“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.

现在调用页面,但参数值已成为文字。所以,我期待一个标识符,我看到&amp; P2_IDENTIFIER和ditto的姓氏。

我做错了什么?如何使用apex_util_prepare_url?

将值传递给我的被调用页面

如有需要,我的环境详细信息为:Apex 3.2.1,Oracle Application Server 10.1.2.3。 Oracle数据库10.2.0.3

提前感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:1)

我认为你需要使用v()函数解决这些变量:

APEX_UTIL.PREPARE_URL('f?p='||:APP_ID
||':'||navigate_to_page
||':'||:APP_SESSION
||'::::'||parameters
||':'||v('P2_IDENTIFIER')||','||v('P2_FAMILY_NAME')) link,

另外,您可能需要注意P2_FAMILY_NAME,因为它已在网址中使用;它听起来像一个包含用户输入数据的纯文本字段?