|
Обновление любой страницы приложения по закрытию модального окна в APEX 19.1
|
|||
---|---|---|---|
#18+
Опишу проблему с которой я столкнулся и решение которой нашел в итоге (путем проб и ошибок). Стояла следующая задача. Организовать смену ролей при помощи простой формы (выбор роли из выпадающего списка и кнопка "Применить"). В старой версии ПО форма представляла обычную (не модальную) страницу, и по сабмиту происходил возврат на "Home Page". После обновления апекса до 19.1 возникла задача реализовать это дело в окне диалога. Самая соль в том что вызываться этот диалог должен с любой страницы приложения (в моем случае из "Navigation Bar"). Поэтому реализация динамического действия на событие закрытия диалога в родительской странице не имела смысла (или нужно было делать это для каждой страницы приложения). Решение которое пришло на ум - отлавливать событие закрытие диалога в глобальной странице. Для этого: 1. Определил в диалоговом окне DA по нажатию кнопки "применить" Код: javascript 1. 2.
сам процесс changeRole представляет собой PLSQL процедуру с некоторыми манипуляциями с БД, точка вызова "Processing" 2. В Global Page был определено DA по отлавливанию закрытия именно этого диалога When Event: Dialog Closed Selection Type: Javascript Expression JavaScript Expression: window Client-side Condition Type: Javascript Expression Javascript Expression: Код: javascript 1.
True Action : ... А тут самое интересное. Событие срабатывало, но не происходило обновления нужных частей страницы, зависимых от примененной роли. Что только не пробовал прописывать в "True action": submit, refresh, принудительные клики по лого приложения, переход по window.location.href. При этом если просто нажимал f5 - то все срабатывало и обновлялось. Так бы и бился о стену - пока однажды не поставил в "True action" перед одним из методов обновления вызов alert. И чудо - все заработало. После скрытия сообщения - все элементы нормально обновлялись согласно выбранной роли. Но такая штука совершенно не воспринималась Firefox. Понял, что что-то не так на уровне процесса смены роли, будто закрытие диалога начинает происходить параллельно с выполнением процесса а не после. Поэтому решил попробовать конструкцию Ajax. Определил точку вызова процесса как "Ajax Callback" и переопределил DA на нажатие кнопки следующим образом: Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
И все прекрасно заработало. Потребность в алертах отпала. Работает как на IE так и на Firefox. Надеюсь данная информация будет полезна. Если этот метод не рационален и есть более оптимальные подходы к реализации данной задумки, буду рад услышать. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2019, 08:27 |
|
Обновление любой страницы приложения по закрытию модального окна в APEX 19.1
|
|||
---|---|---|---|
#18+
fenix89Надеюсь данная информация будет полезна. Спасибо! Конечно полезно, недавно бились над похожей проблемой и в итоге не решили. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2019, 09:10 |
|
Обновление любой страницы приложения по закрытию модального окна в APEX 19.1
|
|||
---|---|---|---|
#18+
Я не однократно писал на этом форуме, изучите асинхронное програмирование, хотя бы прочитайте ЧТО ЭТО. И тогда у Вас не будет таких длинных статей и проблем. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2019, 09:28 |
|
Обновление любой страницы приложения по закрытию модального окна в APEX 19.1
|
|||
---|---|---|---|
#18+
blkangel, Это легко говорить, задним числом, когда уже установлено, что проблема в асинхронности. Но сначала надо выявить, что причина именно в ней, а это не всегда очевидно. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2019, 17:59 |
|
Обновление любой страницы приложения по закрытию модального окна в APEX 19.1
|
|||
---|---|---|---|
#18+
Migelle Но сначала надо выявить, что причина именно в ней, а это не всегда очевидно. Да, вы правы. Изначально была проблема без видимых ассоциаций с асинхронным программированием. blkangelЯ не однократно писал на этом форуме, изучите асинхронное програмирование, хотя бы прочитайте ЧТО ЭТО. Что такое асинхронное программирования я более менее знаю, правда применял его в других областях. blkangelИ тогда у Вас не будет таких длинных статей и проблем. Ничего похожего, именно касательно описанной проблемы на форуме не встречал. Поэтому решил описать последовательно. Тот же код перехвата закрытия диалога с глобальной страницы - находил нечто подобное на стороннем ресурсе, но в другой форме, и она мне не подошла. При помощи отладчика составил такую конструкцию, вдруг кому сэкономит время. Поэтому тут нечто более чем познания в области АП. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2019, 01:07 |
|
Обновление любой страницы приложения по закрытию модального окна в APEX 19.1
|
|||
---|---|---|---|
#18+
Как только речь идет о DA+pl/sql или ajax, вы должны понимать, что по умолчанию это асинхронный вызов. Oracle позаботился о разработчиках, и сделал тумблер Wait For Result, который ждет выполнения pl/sql и только потом производит дальнейщие действия. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2019, 09:22 |
|
|
start [/forum/search_topic.php?author=desier&author_mode=last_topics&do_search=1]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
150ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
others: | 27ms |
total: | 283ms |
0 / 0 |