SAPфорум.RU
https://sapboard.ru/forum/

Вызов сабмита формы из ABAP в CL_GUI_HTML_VIEWER
https://sapboard.ru/forum/viewtopic.php?f=13&t=95817
Страница 1 из 1

Автор:  Saperx [ Чт, ноя 30 2017, 20:09 ]
Заголовок сообщения:  Вызов сабмита формы из ABAP в CL_GUI_HTML_VIEWER

Народ, добрый день.
Столкнулся с такой напастью.
Есть транзакция, на весь экран растянут контейнер с cl_gui_html_viewer.
На всю страницу одна форма:
Code:
<FORM method="POST" action="SAPEVENT:SUBMIT_PAGE" id="cardForm">
... куча полей
<input type="submit" name="save" value="Сохранить" id="save" />
</FORM>

По нажатию этой кнопки происходит сохранение полей в таблицу, в этом плане все работает корректно.

Задача в следующем: пользователям хочется по кнопкам в статусе не просто выходить из транзакции, а получать уведомление о том, что есть не сохраненные изменения и если понадобится сохранять их перед выходом.
Проблема в том, что не понятно каким образов из PAI можно вызвать событие сабмита формы или клика по кнопке, которое потом отловится в on_sapevent.
Пробовал наследоваться от cl_gui класса и использовать методы set_script и execute_script.
Скрипты вида
Code:
alert("It's alive!");
и
Code:
document.getElementById('save').value = "asdf";
выполняет без проблем, но при попытке выполнить
Code:
document.getElementById('save').click();
нифига не происходит.
На
Code:
document.getElementById('cardForm').submit();
тоже ноль внимания...
Может кто что подскажет?

Автор:  Kengur [ Пт, дек 01 2017, 11:39 ]
Заголовок сообщения:  Re: Вызов сабмита формы из ABAP в CL_GUI_HTML_VIEWER

Можно попробовать вызвать рефреш и вот с этим поиграться https://developer.mozilla.org/en-US/doc ... foreunload

Автор:  Daw [ Пт, дек 01 2017, 12:51 ]
Заголовок сообщения:  Re: Вызов сабмита формы из ABAP в CL_GUI_HTML_VIEWER

Для объекта cl_gui_html_viewer вызывается метод set_registered_events.
После этого в on_sapevent отлавливается action c данными формы.

Пример в SAPHTML_EVENTS_DEMO

Автор:  Saperx [ Пт, дек 01 2017, 20:48 ]
Заголовок сообщения:  Re: Вызов сабмита формы из ABAP в CL_GUI_HTML_VIEWER

Daw написал(а):
Для объекта cl_gui_html_viewer вызывается метод set_registered_events.
После этого в on_sapevent отлавливается action c данными формы.

Пример в SAPHTML_EVENTS_DEMO

Событие в on_sapevent отлавливается корректно. С этим все в порядке.
Вопрос в том как вызвать это событие по нажатию на кнопку в gui статусе.

Хак через onbeforeunload работает частично. Во первых, имеет странную особенность не работать если не вставить в функцию alert() перед вызовом document.getElementById.
Во вторых, он все таки вызывается при refresh, а при рефреше сам факт обновления происходит до вызова обработчика в on_sapevent, так что перед сохранением и выходом пользователь успевает увидеть странную картину, что его данные перезатираются старыми данными при рефреше, хотя в БД сохраняется все корректно.
Если же попытаться сделать e.preventDefault, то появляется окно с ошибкой... В общем, пробы продолжаются.

Автор:  AFH [ Пн, дек 04 2017, 05:03 ]
Заголовок сообщения:  Re: Вызов сабмита формы из ABAP в CL_GUI_HTML_VIEWER

Может быть повесить какой-то обработчик чтобы при потере фокуса срабатывал sapevent и передавались данные есть сохраненные данные или нет. Тогда при клике на кнопку не пришлось бы лезть в html_viewer чтобы узнать есть ли внетри не сохраненные данные.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/