Ветка не передает значения элемента - PullRequest
3 голосов
/ 17 января 2012

У меня есть следующая проблема в приложении express, которая сводит меня с ума:

У меня есть табличная форма в APEX 4.1, которая включает столбец ссылок. Когда пользователь нажимает на столбец, я хочу сохранить текущее состояние приложения и перенаправить его на другую страницу. Я должен передать идентификатор строки, в которой была нажата ссылка, на другую страницу.

С помощью Google я нашел это решение: https://forums.oracle.com/forums/thread.jspa?threadID=489666&tstart=720

Идея заключается в отправке страницы с использованием специального значения REQUEST и сохранении всех необходимых значений элементов в скрытых элементах страницы с использованием функции JavaScript, вызываемой по ссылке. Затем вы создаете ветвь страницы, ища специальное значение REQUEST в качестве условия и переходя на нужную страницу, устанавливая элементы на целевой странице на элементы страницы на текущей странице, которые вы сохранили ранее.

Я следовал инструкциям, но он не работает. Целевая страница загружается, но элементы не установлены.

В моем javascript я поместил предупреждение, отображающее значение переданного идентификатора. Это работает. Я также изменил скрытые элементы страницы табличной формы на текстовое поле, и они корректно обновляются и сохраняются.

Журнал также показывает что-то вроде этого:

...Session State: Saved Item "P20_PRUEFUNG_ID_AKTIV" New Value="3950"

, который выглядит хорошо.

Однако при просмотре URL целевой страницы после перенаправления это выглядит так: ? Е не р = 110: 22: 1750507087114492 :: NO :: P22_PRUEFUNG_ID:

P22_PRUEFUNG_ID - это имя элемента страницы, который я хочу установить на целевой странице. Обратите внимание, что для элемента не передается значение.

В журнале целевой страницы я нахожу это:

Session: Fetch session header information
Saving g_arg_names=P22_PRUEFUNG_ID and g_arg_values=
...Session State: Save "P22_PRUEFUNG_ID" - saving same value: ""

По какой-то причине значение со страницы 20 не передается на страницу 22. Глядя на мою ветку, я не могу найти никакой ошибки. Я создал нормальную ветку (после обработки) со следующими параметрами:

Страница: 22 Установите эти пункты: P22_PRUEFUNG_ID С этими значениями: & P20_PRUEFUNG_ID_AKTIV. Условие: Запрос = EDITSG (значение моего специального запроса).

Я должен добавить, что я все еще новичок в APEX. Так что это, наверное, что-то глупое.

Другие решения для решения проблемы, описанной в начале, конечно, также приветствуются. Бонусные баллы за идеи, как заставить это работать с вновь вставленными элементами (передавая id нового элемента).

Редактировать : Вот скриншот исходной страницы: Source page

На странице есть еще 2 ветки. Ветка на стр. 21 похожа на ветку на стр. 22, просто срабатывает при нажатии на другую ссылку в таблице (другое значение REQUEST) и тоже не работает. Я действительно не знаю, почему существует ветка на странице 20, которая является текущей страницей. Это то, что добавил APEX. Может быть, это следствие обновления из APEX 3. В любом случае я отключил его, установив условие «никогда», поэтому оно не должно влиять на результаты (?)

Спасибо!

1 Ответ

3 голосов
/ 17 января 2012

Я прошел шаги, которые упомянуты в ссылке, которую вы разместили, и сделал 2 страницы, которые делают подобные вещи . Страница 20: табличная форма на emp, со ссылкой на столбец. Эта ссылка вызывает функцию javascript (page> javascript), которая помещает выбранное empno в элемент P20_P_EMPNO (для справки показан внизу).

function godetail(nEmpno){
   $("#P20_P_EMPNO").val(nEmpno);
   doSubmit("EMPDETAIL");
};

Например, когда я изменяю комиссию за BLAKE на 10 и нажимаю карандаш, меня перенаправляют на страницу 21, где отображаются детали для BLAKE. Моя комиссия также обновлена.

Мне пришлось изменить состояние MRU. Стандартно это связано с кнопкой отправки, вам необходимо очистить это поле. Затем измените условие на Request Is Contained within Expression 1 и введите SUBMIT,<YOUR_REQUEST>. Как описано. Для ветки я ставлю свою собственную условную ветвь первой в последовательности. Это важно, вы не хотите, чтобы другая ветвь срабатывала до этой. branch details

Редактировать: ваша ветка страницы 20, вероятно, используется для очистки кэша при удалении?

Удостоверьтесь: упомянутые предметы написаны правильно. Используйте заглавные буквы. Если вы хотите использовать элемент для установки значения, используйте строки замещения статического текста: &ITEM. (многие сначала забывают поставить точку в конце).

Итак, я не уверен, почему это идет не так с вашей стороны. Если вы хотите, вы можете посмотреть в моем рабочем пространстве на страницах 20 и 21, посмотреть, если вы заметили что-нибудь. http://apex.oracle.com/pls/apex Рабочая область: TOMPETRUSBE, apex_demo / demo

Что касается перехода к деталям новой записи: Вы, очевидно, не можете пройти через идентификатор. Вы также не можете «поймать» его, так как обновление нескольких строк нигде не возвращает идентификаторы, в отличие от однострочного процесса DML. Имеет смысл. Поэтому вместо передачи идентификатора вы будете передавать уникальный ключ. Очевидно, что вам нужны значения, чтобы указать, какую строку вы хотите просмотреть, так что это сработает только тогда, когда вы сможете их получить. Если вы можете работать только с id, то вам не повезет.

Вам также необходимо изменить процесс DML-Fetch на странице сведений: вместо работы с rowid или id измените его на значения уникального ключа, которые вы передаете. Более 3 полей? Используйте процесс страницы, чтобы выбрать значения для элементов вашей страницы.

Примером будет person: вместо передачи person_id вы передадите имя и фамилию.

Если, однако, вы разрешаете пользователю вводить какой-либо идентификатор или Великобританию, тогда вы можете оставить его таким. Например, если бы я позволил пользователям вводить empno для новой строки в моем примере приложения, это сработало бы! (кроме случаев, когда отправка не удалась, конечно)

...