1

朋友们,

我在 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

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

4

1 回答 1

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因为它在 url 中使用;听起来像是一个包含用户输入数据的纯文本字段?

于 2009-12-21T11:00:46.890 回答