|
как сохранить результат интерактивного отчета в таблице
|
|||
---|---|---|---|
#18+
условие: Есть страница для поиска клиентов по полям Фамилия, Имя, Отчество, Дата рождения, Номер удостоверения/паспорта. На странице есть интерактивый отчет, на нем ограниечение на вывод строк на странице, максимум можно 15 строк увидеть, если запрашиваемых данны больше, выводятся первые 15 и сообщение, что по данному запросу найдено больше чем 15 строк, предлагается отфильтровать данные с помощью встренных фильтров интерактивного отчета. задание: Нужно сохранять введенные в формы поиска данные и отображаемые в отчете на странице данные в лог_таблицу. С первой частью я уже справилься. Повесил на кнопку поиск процесс, при каждом нажатии на кнопку в лог записываются systimestamp, имя пользователя, IP адрес, данные полей поиска. Для результата отчета есть в таблице поле varchar2(2048). Должно поместиться. Теперь как сохранить туда результат отчета - вот в чем проблема. Можно было бы в процедуре сделать ту же самую выборку, что и для Инт. отчета, а потом 15 строк сконвертировать в varchar и сохранить их, но если юзер будет фильтровать данные с помощью фильтра, процесс на кнопке Поиск уже не будет задейтствован. Может на жаваскрипте можно что-то придумать? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2009, 08:01 |
|
как сохранить результат интерактивного отчета в таблице
|
|||
---|---|---|---|
#18+
я так понял , что при фильтрации уже Ajax работает. придумал, нужно узнать , какое значение передается при сабмите фильтра, затем повесить Он_лоад процесс с условием request = <значение сабмита при фильтре> и тогда можно будет поймать данные после фильтрации. Щас буду пробовать =) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2009, 08:09 |
|
как сохранить результат интерактивного отчета в таблице
|
|||
---|---|---|---|
#18+
Боюсь что бесполезно пытаться перехватывать сабмиты фильтра IR процессами со страницы, содержащей этот IR (если это не так, переубедите меня, пожалуйста). Я применял такую конструкцию для перехвата событий IR: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26.
Первый запуск onIRUpdate надо повесить на загрузку страницы, например, с помощью addLoadEvent(onIRUpdate). Там происходит проверка доступности объекта gReport (реализация IR), выполняется <полезный код>, а в конце ч-з setTimeout вешаются перехватчики на ajax-обновление IR (смена фильтра, набора колонок, и т.д.), заставляющие при обновлении опять запускать onIRUpdate(). Там, где <полезный код>, можно ч-з htmldb_Get вызвать необходимый процесс записи в лог. Если нет необходимости как-то специально обрабатывать содержимое табл., записываемое в лог, то я бы просто сохранял весь ее html-код: $x('apexir_DATA_PANEL').innerHTML, передавая параметром в htmldb_Get (если влезет в 4000 симв.). ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2009, 13:15 |
|
как сохранить результат интерактивного отчета в таблице
|
|||
---|---|---|---|
#18+
Спасибо kvad , помогло, то что надо. Вот только одно но: когда Аякс работает, исходный код страницы не обновляется, и даже если я и фильтрую данные отчета, в $x('apexir_DATA_PANEL').innerHTML лежат те данные , что были при первой загрузке страницы. Нехорошо получается :-( ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2009, 10:14 |
|
как сохранить результат интерактивного отчета в таблице
|
|||
---|---|---|---|
#18+
Как-то я не заметил, чтобы innerHTML был неактуальным. Можно пример? Вот что присутствует, так это "ложные" срабатывания onIRUpdate, т.е. в момент вызова контрола для установки параметров IR (например, нового фильтра, или выбор колонок) ф-ция тоже исполнится, т.к. аякс-вызов при этом тоже произойдет ибо панелька эта строится на стороне сервера. Эту ситуацию можно дополнительно отлавливать, добавив проверку на видимость панельки "apexir_CONTROL_PANEL_DROP": Код: plaintext 1. 2.
Тупо в лоб, но должно работать. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.09.2009, 13:08 |
|
как сохранить результат интерактивного отчета в таблице
|
|||
---|---|---|---|
#18+
kvad, А да, простите неуча, невнимательно осмотр результата проводил. Да, срабатывает Аякс и на щелчок по фильтру, и потом на применении фильтра еще 2 раза. ЩАс буду пробовать отлавливать. Огроменное СПАСИБО. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.09.2009, 13:58 |
|
как сохранить результат интерактивного отчета в таблице
|
|||
---|---|---|---|
#18+
Аааа, не получается. apexir_CONTROL_PANEL_DROP после установки фильтра остается. К тому же нужно чтобы только после фильтра лог срабатывал. А тут он и при выборе колонок, и при сохранении отчета страбатывает. Чото я не пойму , что именно делается в этом куске кода: if (gReport.valid_action.toString().indexOf('onIRUpdate') == -1){ var valid_action_0 = gReport.valid_action; gReport.valid_action = function(pTest){ valid_action_0(pTest); onIRUpdate(); }; }; В частности что за pTest и с чем ее едят. Может кто-нибудь сможет объяснить ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2009, 09:27 |
|
как сохранить результат интерактивного отчета в таблице
|
|||
---|---|---|---|
#18+
AbdysamatАааа, не получается. apexir_CONTROL_PANEL_DROP после установки фильтра остается. К тому же нужно чтобы только после фильтра лог срабатывал. А тут он и при выборе колонок, и при сохранении отчета страбатывает. Чото я не пойму , что именно делается в этом куске кода: Код: plaintext 1. 2. 3. 4. 5. 6.
В частности что за pTest и с чем ее едят. Может кто-нибудь сможет объяснить pTest - это формальный параметр. В этом куске кода переопределяется функция - метод gReport.valid_action - таким образом, чтобы вначале отрабатывало всё, что было в старой функции , а потом - Ваша функция onIRUpdate(). ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2009, 12:48 |
|
как сохранить результат интерактивного отчета в таблице
|
|||
---|---|---|---|
#18+
Abdysamat, apexir_CONTROL_PANEL_DROP после установки фильтра остается, но скрывается. Я предлагал проверять hide она (style.display == 'none') или нет. Если hide, то обрабатываем сохранение; если произошел ее показ с аякс-запросом и активацией (нам не нужной) onIRUpdate, то код не выполнять. Код: plaintext
- это проверка, была ли уже модифицирована gReport.valid_action ранее (здесь же). ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2009, 13:43 |
|
как сохранить результат интерактивного отчета в таблице
|
|||
---|---|---|---|
#18+
Наконец то! Сделал все намного проще: В заголовке кода страницы вижу ссылку на родной апексовский жаваскрипт Код: plaintext
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
В коде своей страницы вставляю функцию: Код: plaintext 1. 2. 3. 4. 5. 6.
и в футере своей страницы дописал: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
И все! Правда, для других страниц, использующих /i/javascript/apex_ns_3_1.js он тоже будет пытаться найти CallLogging(), ну да ничего. Запарился уже с этой проблемой. Можно было наверно на своей странице написать свою функцию для gReport.column.filter = ... Но что-то не получилось. Наверно не хватило знаний ЖаваСкрипта. Вот, всем спасибо за помощь и за внимание! ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2009, 16:25 |
|
|
start [/forum/topic.php?fid=50&tid=1877260]: |
0ms |
get settings: |
7ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
39ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
2ms |
others: | 276ms |
total: | 403ms |
0 / 0 |