Как создать ссылку на дерево вручную в Oracle APEX, когда включена защита состояния сеанса? - PullRequest
0 голосов
/ 21 декабря 2009

Друзья,

Я столкнулся с еще одной проблемой в APEX и надеюсь, что вы сможете помочь.

Я создал дерево, используя метод, описанный в превосходной книге Джона и Скотта «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

Заранее благодарим за любую помощь, которую вы можете оказать.

1 Ответ

1 голос
/ 21 декабря 2009

Я думаю, вам нужно разрешить эти переменные, используя функцию 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; это звучит как текстовое поле, которое содержит введенные пользователем данные?

...