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