Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Получить значение в column report (или IR) асинхронно
|
|||
|---|---|---|---|
|
#18+
Отчет основан на следующем запросе: Код: sql 1. 2. 3. 4. 5. function1 выполняется долго (возвращает html), так как использует CTX_DOC.SNIPPET который на больших документах может выполняется до секунды, если в Отчете к примеру 20 записей то получаем 20 секунд ожидания, хотя сам запрос выполняется менее секунды. В попытках решить вопрос получается два решения: 1) В поле отчета func_result изначально писать ID, после после полной загрузки страницы пробежаться по всем записям и через apex.server.process собрать результат. Запрос будет выглядеть так: Код: sql 1. 2. 3. 4. 5. 2) Использовать apex_items, значение которого заменять в javascript для каждого поля отдельно. Запрос будет выглядеть так: Код: sql 1. 2. 3. 4. 5. 6. Готовых примеров найти не получилось, подскажите куда копать? Какой вариант в данной ситуации применять? Гугл дает только примеры реализации обратной связи на изменение значений в apex_items и последующим сохранением их в базе, а вот получение данных из базы и их асинхронное отображение найти не смог (( В js я lol, помогите с магией.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2017, 12:24 |
|
||
|
Получить значение в column report (или IR) асинхронно
|
|||
|---|---|---|---|
|
#18+
AlexProOra, Цель именно асинхронно загрузить или избавится от 20 секунд? Ваш второй вариант, построчный запрос на получение результата, даст нагрузку на сервер. Если бы пошел этим вариантом, я бы сделал это одни AJAX запросом. Вариант №3 Код: plsql 1. 2. 3. 4. 5. Вариант №4 Репорт целиком грузиться со всеми столбцами грузиться Ajax-ом. Т.е. при загрузки страницы репорт пустой, а после загрузки идет запрос на сервер и обновляется заполненный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2017, 13:02 |
|
||
|
Получить значение в column report (или IR) асинхронно
|
|||
|---|---|---|---|
|
#18+
blkangel, Хочу избавить пользователя от ожидания 20 сек. В отчете есть множество других данных которые пользователь может изучать до "подгрузки" остальных. Нагрузка на сервер не беспокоит, можно ее распределить (REST сервисы), главно чтобы пользователь получал данные сразу после запроса - без ожидания его полного формирования на стороне сервера.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2017, 13:50 |
|
||
|
Получить значение в column report (или IR) асинхронно
|
|||
|---|---|---|---|
|
#18+
AlexProOraВ отчете есть множество других данных которые пользователь может изучать до "подгрузки" остальных. тогда уберите ту тормозящую функцию и либо грузите позже, либо в отдельную таблу либо меняете её на быструю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2017, 14:16 |
|
||
|
Получить значение в column report (или IR) асинхронно
|
|||
|---|---|---|---|
|
#18+
вариант грузить позже возможен с подгрузкой при наведении мышкой (контекст всплыв. окно) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2017, 14:18 |
|
||
|
Получить значение в column report (или IR) асинхронно
|
|||
|---|---|---|---|
|
#18+
вариант №5 тут была таблица с развёртыванием подтаблицы на плюсик. Если она подгружает асинхронно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2017, 14:19 |
|
||
|
Получить значение в column report (или IR) асинхронно
|
|||
|---|---|---|---|
|
#18+
AlexProOraunction1 выполняется долго (возвращает html), так как использует CTX_DOC.SNIPPET посмотрел API. Если без неё никак, то вариант№6 - триггер на изменение текста и заранее формирование VIEW текста вместо апекса. А потом быстрый-быстрый его показ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2017, 14:33 |
|
||
|
Получить значение в column report (или IR) асинхронно
|
|||
|---|---|---|---|
|
#18+
Petro123, Для удобства понимания можно представить поисковик по названию лекарства, который выводит результаты запроса с подсвеченными поисковыми словами + имя файла и т.д. Мы сначала покажем таблицу с 20 строками, один столбец - имя файла, второй - имя аптеки, третий - самое продаваемое лекарство, четвертый наши данные, которые подгружаются по мере выполнения ajax запросов. Я готов RESTсервисы написать и json возвращать, но вот как все это на js реализовать в привязке к отчету APEX? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2017, 14:42 |
|
||
|
Получить значение в column report (или IR) асинхронно
|
|||
|---|---|---|---|
|
#18+
AlexProOraЯ готов RESTсервисы написать и json возвращать, но вот как все это на js реализовать в привязке к отчету APEX? с учётом что вы junior в JS? AlexProOraВ js я lol, помогите с магией.... т.к. REST сервисы тут делают не для самого апекса, а для клиентов например на JS. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2017, 14:59 |
|
||
|
Получить значение в column report (или IR) асинхронно
|
|||
|---|---|---|---|
|
#18+
AlexProOraДля удобства понимания можно представить поисковик по названию лекарства, который выводит результаты запроса с подсвеченными поисковыми словами + имя файла и т.д. т.к. долгий запрос на 20сек УЖЕ работает - покажи скриншот как это выглядит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2017, 15:04 |
|
||
|
Получить значение в column report (или IR) асинхронно
|
|||
|---|---|---|---|
|
#18+
AlexProOra, Зря вы третий вариант обходите стороной, он скорее всего снимет проблему... Но второй вариант тоже интересен мне в реализации, я нигде не применял, но наверное интересно получиться. Например вместо данных с нужном нам столбце, в каждой строчке GIF загрузки (колесик, часы песочные и т.д.). Потом идет Ajax запрос (один это правильно). Возращается JSON и расставляет значения вместо GIF-ок. Ну как минимум красиво получится. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2017, 15:38 |
|
||
|
Получить значение в column report (или IR) асинхронно
|
|||
|---|---|---|---|
|
#18+
Petro123, Пример только столбцов побольше... Как правило знаний хватает адаптировать примеры js под себя, когда примеров нет - "сажусь в лужу". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2017, 15:41 |
|
||
|
Получить значение в column report (или IR) асинхронно
|
|||
|---|---|---|---|
|
#18+
blkangelAlexProOra, Зря вы третий вариант обходите стороной, он скорее всего снимет проблему... Ни в коем разе, просто данный подход для меня новый, сначала надо попробовать, если получится то отпишусь обязательно! blkangelAlexProOra, Например вместо данных с нужном нам столбце, в каждой строчке GIF загрузки (колесик, часы песочные и т.д.). Потом идет Ajax запрос (один это правильно). Возращается JSON и расставляет значения вместо GIF-ок. Ну как минимум красиво получится. :) Вот это было бы просто мега круто! я раньше писал про это, но реальных решений найти не получилось.... Поэтому тему переформулировал с учетом нарытых вариантов.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2017, 15:49 |
|
||
|
Получить значение в column report (или IR) асинхронно
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2017, 15:50 |
|
||
|
Получить значение в column report (или IR) асинхронно
|
|||
|---|---|---|---|
|
#18+
AlexProOraКак правило знаний хватает адаптировать примеры js под себя а заявки на гуглопоиск? Придётся вам ходить на JS ветку за советами. Динамического выделения в рантайме в апексе нету. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2017, 15:52 |
|
||
|
Получить значение в column report (или IR) асинхронно
|
|||
|---|---|---|---|
|
#18+
AlexProOraя раньше писал про это, блин! Прошло 2 года? Хочется сказать вам до свидания). Баловство у вас всё. Раз пару лет прошло. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2017, 15:55 |
|
||
|
Получить значение в column report (или IR) асинхронно
|
|||
|---|---|---|---|
|
#18+
AlexProOrablkangelAlexProOra, Например вместо данных с нужном нам столбце, в каждой строчке GIF загрузки (колесик, часы песочные и т.д.). Потом идет Ajax запрос (один это правильно). Возращается JSON и расставляет значения вместо GIF-ок. Ну как минимум красиво получится. :) Вот это было бы просто мега круто! я раньше писал про это, но реальных решений найти не получилось.... Поэтому тему переформулировал с учетом нарытых вариантов.... В принципе реализация не сложная. Надо немного знаний по JS или Jquery, разметку Апексойдовую изучить, Ajax, Json, всего помаленьку. Звучит как ах... как много всего, на деле все выйдет в 10 строчный код... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2017, 15:59 |
|
||
|
Получить значение в column report (или IR) асинхронно
|
|||
|---|---|---|---|
|
#18+
Petro123AlexProOra Пример только столбцов побольше... ))) выделяй на клиенте в JS без SNIPPET Для "грамотной" подсветки нужно иметь весь документ, чтобы извлечь наиболее релевантные фразы и т.д. Все это тянуть на клиента - затратно.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2017, 16:19 |
|
||
|
Получить значение в column report (или IR) асинхронно
|
|||
|---|---|---|---|
|
#18+
AlexProOraДля "грамотной" подсветки нужно иметь весь документ, чтобы извлечь наиболее релевантные фразы и т.д. Все это тянуть на клиента - затратно.... да. Делают так https://ru.wikipedia.org/wiki/Lucene ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2017, 16:24 |
|
||
|
Получить значение в column report (или IR) асинхронно
|
|||
|---|---|---|---|
|
#18+
blkangelВ принципе реализация не сложная. Надо немного знаний по JS или Jquery, разметку Апексойдовую изучить, Ajax, Json, всего помаленьку. Звучит как ах... как много всего, на деле все выйдет в 10 строчный код... Вот где такова гуру найти, который все эти технологии в голове держит и имеет "желание" эти 10 строк кода людям выложить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2017, 16:41 |
|
||
|
Получить значение в column report (или IR) асинхронно
|
|||
|---|---|---|---|
|
#18+
Petro123AlexProOraДля "грамотной" подсветки нужно иметь весь документ, чтобы извлечь наиболее релевантные фразы и т.д. Все это тянуть на клиента - затратно.... да. Делают так https://ru.wikipedia.org/wiki/Lucene Я уже подсел на Oracle Text + RCO for Oracle.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2017, 16:57 |
|
||
|
Получить значение в column report (или IR) асинхронно
|
|||
|---|---|---|---|
|
#18+
AlexProOraЯ уже подсел на Oracle Text + RCO for Oracle.... которых ждать 20 сек? Тогда выдавайте по одной записи с часиками. Я вам написал 6 вариантов реализации. Вы упёрлись в один вариант. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2017, 17:11 |
|
||
|
Получить значение в column report (или IR) асинхронно
|
|||
|---|---|---|---|
|
#18+
Petro123AlexProOraЯ уже подсел на Oracle Text + RCO for Oracle.... которых ждать 20 сек? Тогда выдавайте по одной записи с часиками. Я вам написал 6 вариантов реализации. Вы упёрлись в один вариант. )) я же писал что траблов с выполнением запроса нет, он выполняется очень быстро, вопрос в том как асинхронно получить данные в ячейке отчета... + представьте себе поисковик который выводит записи по одной, хотя если Вы покажите пример как это сделать то будет полезно всем.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2017, 17:20 |
|
||
|
Получить значение в column report (или IR) асинхронно
|
|||
|---|---|---|---|
|
#18+
AlexProOraя же писал что траблов с выполнением запроса нет, он выполняется очень быстро, у меня с пагинацией любой размер строк выводится за 0,2 сек. Поэтому вы написали неправду. AlexProOraвопрос в том как асинхронно получить данные в ячейке отчета... дал 6 вариантов. Большинство требуют JS. Тот что с таблой - не требует. AlexProOra+ представьте себе поисковик который выводит записи по одной, хотя если Вы покажите пример как это сделать то будет полезно всем.... такая странная задача с 15-го года только у вас. Решается на JS костылём. Я делал костыль с селекторами по замене текста в таблице после открытия. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2017, 17:28 |
|
||
|
Получить значение в column report (или IR) асинхронно
|
|||
|---|---|---|---|
|
#18+
Petro123такая странная задача с 15-го года только у вас. Решается на JS костылём. Я делал костыль с селекторами по замене текста в таблице после открытия. Мне многие говорят что я странный и задачи у меня соответствующие ) Спасибо Вам что тратите на меня свое время! Выложите плиз js скрипт который земеняет значения в таблице после открытия. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2017, 17:35 |
|
||
|
Получить значение в column report (или IR) асинхронно
|
|||
|---|---|---|---|
|
#18+
blkangelAlexProOra, Зря вы третий вариант обходите стороной, он скорее всего снимет проблему... Погуглил, вроде как эффекта от pipelined function получить не получится, так как сервер приложений сначала дождется получения всех данных для отчета, сформирует html и отдаст клиенту, тут видимо как Вы и писали js+ajax+... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2017, 17:42 |
|
||
|
Получить значение в column report (или IR) асинхронно
|
|||
|---|---|---|---|
|
#18+
AlexProOrablkangelВ принципе реализация не сложная. Надо немного знаний по JS или Jquery, разметку Апексойдовую изучить, Ajax, Json, всего помаленьку. Звучит как ах... как много всего, на деле все выйдет в 10 строчный код... Вот где такова гуру найти, который все эти технологии в голове держит и имеет "желание" эти 10 строк кода людям выложить? Я могу кратко план написать. AlexProOrablkangelВ принципе реализация не сложная. Надо немного знаний по JS или Jquery, разметку Апексойдовую изучить, Ajax, Json, всего помаленьку. Звучит как ах... как много всего, на деле все выйдет в 10 строчный код... Вот где такова гуру найти, который все эти технологии в голове держит и имеет "желание" эти 10 строк кода людям выложить? Я могу кратко план написать. 1. Думаю как гиф вставить, вы собразите, главное нумерация ID значений значенмй. Все упрощается если ID уникальный. То ячейки подлежащие замене, должны содержать ИД строки и какой нибудь префикс, например запрос будет так Код: plsql 1. 2. 3. 4. 2. После загрузки запускаеится JS, примерно такого вида Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 3. Application Процесс GET_VALUE_FOR_REPORT Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2017, 17:46 |
|
||
|
Получить значение в column report (или IR) асинхронно
|
|||
|---|---|---|---|
|
#18+
Пункт 3 ошибочка Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2017, 17:48 |
|
||
|
Получить значение в column report (или IR) асинхронно
|
|||
|---|---|---|---|
|
#18+
AlexProOraВыложите плиз js скрипт который земеняет значения в таблице после открытия. готовое вам никто не выложит. Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. т.е. ваш REST нафиг не нужен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2017, 17:48 |
|
||
|
Получить значение в column report (или IR) асинхронно
|
|||
|---|---|---|---|
|
#18+
AlexProOra, оооо Вот вам меценаты уже делают. Так что удачи! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2017, 17:51 |
|
||
|
Получить значение в column report (или IR) асинхронно
|
|||
|---|---|---|---|
|
#18+
blkangel, Спасибо Вам добрый человек! Попробую прикрутить, результаты выложу... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2017, 17:55 |
|
||
|
Получить значение в column report (или IR) асинхронно
|
|||
|---|---|---|---|
|
#18+
AlexProOra, еще косячок Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2017, 20:35 |
|
||
|
Получить значение в column report (или IR) асинхронно
|
|||
|---|---|---|---|
|
#18+
blkangel, Все ОК, один трабл - с обратной связью не получается Код: sql 1. Не присваивает новые значения в ячейки отчета (пробовал простой отчет и IR), пробовал через DA(Event->Page Load) + указывал в Affected Elements -> Column + название столбца. Тестил разные варианты: Код: sql 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2017, 20:45 |
|
||
|
Получить значение в column report (или IR) асинхронно
|
|||
|---|---|---|---|
|
#18+
AlexProOra, Блин, простите меня, туплю, все ОК ))) скоро выложу пример, если еще на грабли не наступлю... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.04.2017, 20:48 |
|
||
|
Получить значение в column report (или IR) асинхронно
|
|||
|---|---|---|---|
|
#18+
blkangelAlexProOra, Но второй вариант тоже интересен мне в реализации, я нигде не применял, но наверное интересно получиться. Второй вариант не получился ( В консоли браузера: Код: sql 1. 2. Рано начинает выполняться видимо.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2017, 14:25 |
|
||
|
Получить значение в column report (или IR) асинхронно
|
|||
|---|---|---|---|
|
#18+
Мозг начинает на полную работать только после публикации... )) Трабл побежден путем добавления ссылок на desktop.min.js + jquery-2.2.3.min.js Но второй вариант все равно не жилец... Вот что у меня в запросе получилось: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Оно кстати реально работает ) Бага в том, что репорт не отображается пользователю - пока все асинхронные вызовы не завершаться... ??? очередной грабль... Давайте оживим второй вариант, помогайте пожалуйста!! )) Текст ondemand - AJAX_GO: Код: sql 1. 2. 3. 4. 5. 6. P.S. Огромнейший респект и уважуха blkangel за профессионализм! Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2017, 15:39 |
|
||
|
Получить значение в column report (или IR) асинхронно
|
|||
|---|---|---|---|
|
#18+
AlexProOra, 1. Очень плохо так писать, тем более в тексте запроса. Вынесите подключение библиотек на уровень страницы. Там есть поле у страницы для Javascript File URLs . использовать подставленный префикс картинок-тоже плохо, есть подстановка #IMAGE_PREFIX#. В итоге у вас должно получиться что-то такое: #IMAGE_PREFIX#libraries/jquery/2.2.3/jquery-2.2.3.min.js #IMAGE_PREFIX#libraries/apex/minified/desktop.min.js версию тоже можно подрубить, если хочется, там в хелпе есть пример. 2. Выполнять скрипты при загрузке-тоже очень плохо. Вам выше вроде предлагал blkangel использовать в селекте APEX_ITEM.HIDDEN(50, t.id)|| гифку ожидания. Причём гифку даже наверно будет лучше в HTML Expression вписать, но это ладно, потом можно подумать. в атрибутах hidden я бы проставил какой-нибудь класс типа "asyncUpload", чтоб по нему потом писать селектор а не по name f50(не люблю) 3. Далее blkangel предлагал при загрузке, мне кажется правильней сделать динамик экшн на обновление репорта, который бы вызывал бы apex.server.process в цикле по всем найденным элементам с классом asyncUpload. Т.е. входным параметром в on demand process будет айдишник. Ну или массив айдищников как и было, если устраивает, что он разом всё подгрузит, а не по частям. 4. Т.к. апекс 5.1 то имхо лучше использовать apex.server.process в джаваскрипте и apex_json в процессе. 5. Если у вас такое планируется только на одной странице, то рекомендую использовать не application process, а on demand на странице. ну с работы неудобно делать пример, но если будет актуально попробую из дома сваять на апекс оракл ком. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2017, 16:37 |
|
||
|
Получить значение в column report (или IR) асинхронно
|
|||
|---|---|---|---|
|
#18+
heavysideAlexProOra, 1. Очень плохо так писать, тем более в тексте запроса. Вынесите подключение библиотек на уровень страницы. Там есть поле у страницы для Javascript File URLs . использовать подставленный префикс картинок-тоже плохо, есть подстановка #IMAGE_PREFIX#. В итоге у вас должно получиться что-то такое: #IMAGE_PREFIX#libraries/jquery/2.2.3/jquery-2.2.3.min.js #IMAGE_PREFIX#libraries/apex/minified/desktop.min.js версию тоже можно подрубить, если хочется, там в хелпе есть пример. 2. Выполнять скрипты при загрузке-тоже очень плохо. Вам выше вроде предлагал blkangel использовать в селекте APEX_ITEM.HIDDEN(50, t.id)|| гифку ожидания. Причём гифку даже наверно будет лучше в HTML Expression вписать, но это ладно, потом можно подумать. в атрибутах hidden я бы проставил какой-нибудь класс типа "asyncUpload", чтоб по нему потом писать селектор а не по name f50(не люблю) 3. Далее blkangel предлагал при загрузке, мне кажется правильней сделать динамик экшн на обновление репорта, который бы вызывал бы apex.server.process в цикле по всем найденным элементам с классом asyncUpload. Т.е. входным параметром в on demand process будет айдишник. Ну или массив айдищников как и было, если устраивает, что он разом всё подгрузит, а не по частям. 4. Т.к. апекс 5.1 то имхо лучше использовать apex.server.process в джаваскрипте и apex_json в процессе. 5. Если у вас такое планируется только на одной странице, то рекомендую использовать не application process, а on demand на странице. ну с работы неудобно делать пример, но если будет актуально попробую из дома сваять на апекс оракл ком. Блин, я минут 10 Вам ответ писал и не ту кнопку нечайно нажал..... Вобщем Вы во многом ошибаетесь, просьба еще раз вникнуть в то что предлагалось blkangel и то что предложил я. Я до 3 утра разбирался с вариантом от blkangel , все верно, понятно и вопросов нет. Я реализовывал второй вариант и он не противоречит бест практик Apex. Если Вы подготовите реальный практический пример (сделанный по феншую) все Вам на этом форуме будут очень благодарны! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2017, 17:51 |
|
||
|
Получить значение в column report (или IR) асинхронно
|
|||
|---|---|---|---|
|
#18+
Во вложении прототип . user - test1978 password - test Трабл с синхронной загрузкой проявляется только если зайти в воркспэйс админом, если заходить простым юзером то все ОК. Единственное что добавил - APEX_UTIL.PAUSE(dbms_random.value(1,20)); в ondemand чтобы данные выполнялись разное время. Спасибо всем кто вложил свои силы в решение задачи! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2017, 19:46 |
|
||
|
Получить значение в column report (или IR) асинхронно
|
|||
|---|---|---|---|
|
#18+
Баг с синхронным выполнением проявляется если нажать refresh страницы, это объясняет то что под девелопером баг проявляется постоянно... Если сделать logout и снова войти то работает ок. Что то нужно кильнуть при refresh страницы? Пробовал на разных браузерах, баг повторяется, значит ошибка на стороне приложения, но при обновлении страницы все ее содержимое пересоздается заново, только куки остаются... Вобщем без старших товарищей тут я врятли смогу разобраться, подсобите плиз! Завтра попробую на продуктивной среде запустить, чтобы исключить влияние apex.oracle.com ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2017, 21:38 |
|
||
|
Получить значение в column report (или IR) асинхронно
|
|||
|---|---|---|---|
|
#18+
AlexProOra, Я к счастью не повторил вашей ошибки и сохранил предварительно текст) Мне очень интересно, где же я не прав. Хотя бы пару примеров. Best practices - это очень расплывчатое понятие, но: Использование /i/ - точно плохо. Мы например чаще всего инсталим с префиксом /i511/, т.е. с номером версии, это позволяет через 1 веб сервер держать разные версии апекса в разных базах. Вы выгрузите и зальёте в продакшн, где префикс иной и придётся везде в приложении менять префикс. Насколько я помню, раньше в эдвайзере (когда он появился в 4-й версии) была отдельная проверка на неиспользование image_prefix подставленным в коде. Видимо сейчас полагают, что с 3-й версии все перешли и перестали использовать /i/ Далее вы прописали подключение библиотек столько раз, сколько будет строк будет показано (включая все последующие обновления отчета), а требуется подключить ровно 1 раз на странице. Зачем плодить лишний текст, да ещё в таком количестве? Даже банально зачем гнать лишнее по сети. Кстати мне в моём примере не потребовалось подключать библиотеки. Прописывать много кода про отображение в тексте запроса плохо потому, что происходит смешение самих данных и представления данных. Этого желательно избегать. В апексе специально есть в атрибутах столбца Column Formatting - HTML Expression для описания вывода. А вам пришлось Escape special characters выставить в No. В данному случае, т.к. id не вводится пользователем это не имеет значения, а вот если бы участвовало текстовое поле, я бы в него ввёл хтмл, который бы попортил верстку коллегам или например выполнил бы какой-нибудь левый джаваскрипт (срочно перечислите деньги на карту или информация что вы на самом деле делаете в рабочее время будет отправлена начальнику) )) Почему я предлагаю json использовать - предположим в некоторых случаях функция падает с ошибкой. Тогда вы выводите текст ошибки. Предположим вам нужна более сложная обработка ошибки. Как вы определите ошибка или нет? По наличию слова ORA? В случае с json за счет отдельных полей это легко решается. Небольшие комментарии по моему примеру (Login/Password: TEST/TEST): от hidden я решил отказаться, on demand я создал на странице, но если подобная функция будет использоваться на нескольких страницах приложения, то тогда в application process перенести и джаваскрипт обернуть в функцию и вынести во внешний файл js. В данном случае мне нравится, что весь код на одной странице. Демо схема у меня не загружена, поэтому connect by в запросе чтоб нагенерить строки. Описание бага я не понял, поэтому проверить не смог. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2017, 22:45 |
|
||
|
Получить значение в column report (или IR) асинхронно
|
|||
|---|---|---|---|
|
#18+
AlexProOra, А и ещё чем плохо запихивание хтмл и скриптов в запрос - вы теряете возможность это всё нормально отформатировать и использовать подсветку кода, что влияет на читаемость и дальше на поддержку этого кода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2017, 23:33 |
|
||
|
Получить значение в column report (или IR) асинхронно
|
|||
|---|---|---|---|
|
#18+
heavysideAlexProOra, А и ещё чем плохо запихивание хтмл и скриптов в запрос - вы теряете возможность это всё нормально отформатировать и использовать подсветку кода, что влияет на читаемость и дальше на поддержку этого кода. Я обхаять тоже могу любое решение, даже идеальное... ))) у моего начальника 5 высших образований, я привык к ... Бла бла людям читать не интересно, ждем от Вас реального высококачественного вклада в общую копилку знаний.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2017, 23:57 |
|
||
|
Получить значение в column report (или IR) асинхронно
|
|||
|---|---|---|---|
|
#18+
AlexProOra, Я не буду в отличие от вас переходить на личности. Я вообще-то выложил свое решение и старался быть максимально корректным в оценках и подробным в обосновании. Жду с нетерпением, где я был не прав в своем первом посте, в котором, между прочим, предложил вам помочь и написать вечером решение. А обхаивание мне неинтересно, мне интересна аргументированая позиция. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2017, 00:06 |
|
||
|
Получить значение в column report (или IR) асинхронно
|
|||
|---|---|---|---|
|
#18+
heavysideAlexProOra, Я не буду в отличие от вас переходить на личности. Я вообще-то выложил свое решение и старался быть максимально корректным в оценках и подробным в обосновании. Жду с нетерпением, где я был не прав в своем первом посте, в котором, между прочим, предложил вам помочь и написать вечером решение. А обхаивание мне неинтересно, мне интересна аргументированая позиция. Блин, сорики, виноват........ Пропустил Ваш пост, думал Вы продолжаете искать траблы не предлагая решений, внимание сбито под конец дня, реально я гад... Как себя самому забанить? (( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2017, 00:10 |
|
||
|
Получить значение в column report (или IR) асинхронно
|
|||
|---|---|---|---|
|
#18+
AlexProOra, Ничего страшного, я уж полез проверять ту ли ссылку я скинул. Бывает. Банить не надо и так вон blkangela нет к сожалению из-за бана ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2017, 00:19 |
|
||
|
Получить значение в column report (или IR) асинхронно
|
|||
|---|---|---|---|
|
#18+
heavysideЯ к счастью не повторил вашей ошибки и сохранил предварительно текст) Мне очень интересно, где же я не прав. Хотя бы пару примеров. Теперь я ученый, пишу в блокноте.. )) Примеры: Пункт 3 blkangel предлагал сделать ondemand (а не DA) + после загрузки страницы (не обновления репорта) + который бы вызвал htmldb_Get (а не apex.server.process) Пункт 4 например, я же как раз и использую apex.server.process в js. Пункт 5 ну я как раз его и использовал. остальные пункты по мелочи: Пункт 1 js я использую дефолтные, уже загруженные и закэшированные браузером, соотв. трафик не должен страдать + решение делал не на продакшен а проверить метод возможно/невозможно. Пункт 2 Выполнять скрипты при загрузке плохо, почему? если они в тему будут... heavysideBest practices - это очень расплывчатое понятие, но: Использование /i/ - точно плохо. Мы например чаще всего инсталим с префиксом /i511/, т.е. с номером версии, это позволяет через 1 веб сервер держать разные версии апекса в разных базах. Вы выгрузите и зальёте в продакшн, где префикс иной и придётся везде в приложении менять префикс. Насколько я помню, раньше в эдвайзере (когда он появился в 4-й версии) была отдельная проверка на неиспользование image_prefix подставленным в коде. Видимо сейчас полагают, что с 3-й версии все перешли и перестали использовать /i/ Согласен, но валить кучу логики в select отчета норма, даже если абстрагироваться от apex (OBIEE, Oracle Forms...). C относительным путем не спорю, всегда нужно стратегию обновления продумывать.... heavysideДалее вы прописали подключение библиотек столько раз, сколько будет строк будет показано (включая все последующие обновления отчета), а требуется подключить ровно 1 раз на странице. Зачем плодить лишний текст, да ещё в таком количестве? Даже банально зачем гнать лишнее по сети. Кстати мне в моём примере не потребовалось подключать библиотеки. Вобщем я просто продублировал библиотеки которые уже подключены но не доступны так как на момент загрузки их видимо еще сервер не подгрузил или они не доступны из за правил изоляции js, я еще только учусь и решил задачу так как хватило знаний, если есть более изящное решение .... heavysideПрописывать много кода про отображение в тексте запроса плохо потому, что происходит смешение самих данных и представления данных. Этого желательно избегать. В апексе специально есть в атрибутах столбца Column Formatting - HTML Expression для описания вывода. А вам пришлось Escape special characters выставить в No. В данному случае, т.к. id не вводится пользователем это не имеет значения, а вот если бы участвовало текстовое поле, я бы в него ввёл хтмл, который бы попортил верстку коллегам или например выполнил бы какой-нибудь левый джаваскрипт (срочно перечислите деньги на карту или информация что вы на самом деле делаете в рабочее время будет отправлена начальнику) )) Смешение данных и всего всего - главная фишка APEX, тут реально стык разных технологий. Но в целом согласен. heavysideПочему я предлагаю json использовать - предположим в некоторых случаях функция падает с ошибкой. Тогда вы выводите текст ошибки. Предположим вам нужна более сложная обработка ошибки. Как вы определите ошибка или нет? По наличию слова ORA? В случае с json за счет отдельных полей это легко решается. Да я 100% за json, просто на стадии выработки технического решения приоритетно выработать рабочую модель, а далее ее уже приводить к продакшен.. heavyside Описание бага я не понял, поэтому проверить не смог. В моем варианте сразу на сервер посылается параллельно 17 onDemand процессов (запросов) - по количеству строк в отчете, на каждую строчку один запрос. Баг оказался следствием ограничения на apex.oracle.com параллельно выполнять более шести процессов на сессию, соответственно все вызовы становятся в очередь + все события форм тоже, поэтому страница полностью зависает пока не выполнятся предыдущие процессы. Завтра на продуктиве проверю, в Вашем варианте таких проблем нет, но загрузка страницы не распараллеливается - иначе уперлись бы в соотв. ограничения. Пытался найти где это ограничение выставляется (ORDS config - нет), может кто знает как его увеличить? )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2017, 01:13 |
|
||
|
Получить значение в column report (или IR) асинхронно
|
|||
|---|---|---|---|
|
#18+
heavysideAlexProOra, Небольшие комментарии по моему примеру (Login/Password: TEST/TEST) Посмотрел Ваш код, приятно, спасибо! На какой счет выслать пиво и коньяк? )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2017, 01:41 |
|
||
|
Получить значение в column report (или IR) асинхронно
|
|||
|---|---|---|---|
|
#18+
THE END Вобщем ограничение на 6 ajax запросов никак не связано с apex.oracle.com, это ограничение браузера! В firefox на это влияет параметр network.http.max-persistent-connections-per-server. Как решить трабл читаем тут . Из за данного ограничения Вариант №2 признается нежизнеспособным, так как заставлять пользователей "тюнить" свой браузер .... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2017, 07:40 |
|
||
|
Получить значение в column report (или IR) асинхронно
|
|||
|---|---|---|---|
|
#18+
AlexProOraПосмотрел Ваш код, приятно, спасибо! На какой счет выслать пиво и коньяк? )) Приятно, но спасибо, не надо) Тем более вместе. Я предпочитаю их по отдельности) AlexProOraПункт 3 blkangel предлагал сделать ondemand (а не DA) + после загрузки страницы (не обновления репорта) + который бы вызвал htmldb_Get (а не apex.server.process) Так мне это как раз и не понравилось. On demand у меня тоже используется, но уровня страницы, а не application process. Но тут зависит от частоты использования, о чем я и написал. Далее, если выполнять после загрузки страницы, то при обновлении репорта этот код уже не выполнится. Я полагаю, что blkangel просто оставил этот момент на потом, и когда получится при загрузке, дописать строку чтобы было и при обновлении. htmldb_Get вроде не рекомендуют использовать. Но на тот момент вроде не было никакого указания версии апекс, так что предложение было логичное. Не обратил внимание, что используется у вас (apex.server.process/htmldb_Get), т.к. всё время шло ещё обсуждение различных вариантов, поэтому видимо излишне предостерёг. Сорри. AlexProOraПункт 1 js я использую дефолтные, уже загруженные и закэшированные браузером, соотв. трафик не должен страдать + решение делал не на продакшен а проверить метод возможно/невозможно. Ну трафик страдает как минимум просто из-за большого кол-ва текста там, где его может быть и должно быть меньше. в данном случае это около 250 байт разницы на строку в моём варианте и в вашем. 50 строк на странице по умолчанию - 12КБ. Я хз какие у вас сети, но у нас у клиентов по стране весьма разные и стараемся максимально убрать лишний трафик, даже такой относительно небольшой. Про не продакшн - принимается, ок. AlexProOraПункт 2 Выполнять скрипты при загрузке плохо, почему? если они в тему будут... Здесь надо посмотреть, что будет в случае ошибки в скрипте. Если это не будет прекращать загрузку или как-то тормозить, то тогда наверно уместно. Лень проверять) По остальным пунктам вроде предмета спора нет. Ещё некоторые размышления про безопасность, это не относится к тестовому примеру, просто чтоб в теме было всё). Т.к. передаётся айди, то получается можно будет выполнить любому пользователю с данной страницы для любого айдишника. Так что если присутствуют ограничения на выдачу в разделе и айдишники где-то светятся/инкрементальные, то надо и в этой долгой функции проверять права на конкретную запись. Ну и небольшие доработки явно требуются в моём варианте - проверить дефолтные значения apex.server.process и возможно убрать лишнее, дописать секцию fail для apex.server.process, и я б ещё вынес джаваскрипт в функцию, в примере решил не писать, чтоб не запутать, куда смотреть. Может ещё что-то, но мне уже надоело думать на эту тему, может кто ещё раскритикует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2017, 10:58 |
|
||
|
Получить значение в column report (или IR) асинхронно
|
|||
|---|---|---|---|
|
#18+
heavyside, Согласен с Вами! Тема раскрыта очень хорошо, надеюсь многим принесет пользу... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2017, 12:34 |
|
||
|
Получить значение в column report (или IR) асинхронно
|
|||
|---|---|---|---|
|
#18+
heavyside, Эх, не суждено ветке устнуть... )) Попробуйте в своем примере запрос расширить до 55 записей: Код: sql 1. Не дожидаясь обновления всех 50 значений нажать стрелку перехода к следующим 5-ти записям подряд раз 9. Эффект будет интересный )) Получается у Вас тоже все упирается в магическое ограничение - 6 процессов! Его можно наблюдать если внести изменения в ajax callback и убрать рандом - APEX_UTIL.PAUSE( 7 ); - значения синхронно будут отрисовываться по 6 ячеек. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2017, 15:25 |
|
||
|
Получить значение в column report (или IR) асинхронно
|
|||
|---|---|---|---|
|
#18+
AlexProOra, Да, прикольно, не знал. Ну тогда я вижу варианты: 1. всё запихнуть в один json, как это предлагал blkangel 2. Запрашивать сериями по 4-5 запросов 3. Поделить на группы так, чтобы уместилось в 5 запросов (в каждом по 10 записей), т.е. это распараллеливание 1-го варианта 4. убрать параллельность и оставить лишь асинхронность, чтоб не блокировать работу. По завершению загрузки одного переходить к загрузке следующего, аналогично по времени исходному запросу, но зато быстро выводит страницу и не блокирует. 5. если есть возможность предсказать время выполнения в зависимости от размера файла, то можно часть грузить в запросе (быстрые, например по условию, что файл размером меньше 40кб, зависит от реальной скорости функции), а часть грузить асинхронно с использованием 1-4 метода. Мне больше всего нравятся 1 и 4 варианты. 4-й даже больше: Обеспечена последовательность загрузки и на каждом шаге можно проверять, а надо ли грузить следующий, или пользователь уже перелистнул страницу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2017, 16:11 |
|
||
|
Получить значение в column report (или IR) асинхронно
|
|||
|---|---|---|---|
|
#18+
heavyside, 4 тоже видится самым эффективным... Сначала обновляется первая строчка и т.д. для пользователя тоже очень наглядно и понятно будет... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2017, 16:18 |
|
||
|
Получить значение в column report (или IR) асинхронно
|
|||
|---|---|---|---|
|
#18+
Ну я смотрю Вы и без меня все разрулили :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2017, 11:53 |
|
||
|
Получить значение в column report (или IR) асинхронно
|
|||
|---|---|---|---|
|
#18+
блкангелНу я смотрю Вы и без меня все разрулили :) Как без Вас, все крутилось вокруг Вашего первого варианта. Теперь ждем кто сможет осилить последний предложенный - Вариант №4 )) У меня мозга на данном этапе развития точно не хватит... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2017, 14:39 |
|
||
|
Получить значение в column report (или IR) асинхронно
|
|||
|---|---|---|---|
|
#18+
AlexProOra, Хм, я не думал, что вы ждете реализации) Напишу на выходных, если никто не напишет раньше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2017, 15:56 |
|
||
|
Получить значение в column report (или IR) асинхронно
|
|||
|---|---|---|---|
|
#18+
heavyside я действительно забыл про то, что код JS надо запихнуть в событие After Refresh, тут Вы правы, видимо название темы сбило. heavyside - Посмотрел пример, уже даже очень, хорошо смотрится. Но вот проблема одновременного выполнения 4-6 ajax запросов не знал. Да и не надо это, как я и писал, надо один Ajax запрос. Если Вы даже захотите красиво сделать, чтобы заполнение было плавное, это можно сделать на JS. Но это уже феншуй. Есть сложность в формировании одного большого JSON? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2017, 17:38 |
|
||
|
Получить значение в column report (или IR) асинхронно
|
|||
|---|---|---|---|
|
#18+
heavysideAlexProOra, Хм, я не думал, что вы ждете реализации) Напишу на выходных, если никто не напишет раньше. Я с удовольствие посмотрю на правильное + красивое решение данной задачи ) + опыт по работа с массивом json... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2017, 18:11 |
|
||
|
Получить значение в column report (или IR) асинхронно
|
|||
|---|---|---|---|
|
#18+
AlexProOra, Ну уж не знаю про правильность и красоту, мои знания джаваскрипта тут тоже могут давать сбой. Демка доступна там же, с тем же логином-паролем. Предлагаю потестить. Это вариант последовательной загрузки. Если репорт обновили, пока выполнялся запрос, то результат в грид попадает (Я ЖАДНЫЙ!! Не хочу ничего терять), если этот айдишник есть после обновления. Далее грузится по порядку. Вариант с подгрузкой всего разом - лень. Там ничего интересного - формирование json апишкой и перебор элементов в джаваскрипте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2017, 22:27 |
|
||
|
Получить значение в column report (или IR) асинхронно
|
|||
|---|---|---|---|
|
#18+
heavysideAlexProOra, Ну уж не знаю про правильность и красоту, мои знания джаваскрипта тут тоже могут давать сбой. Демка доступна там же, с тем же логином-паролем. Предлагаю потестить. Это вариант последовательной загрузки. Если репорт обновили, пока выполнялся запрос, то результат в грид попадает (Я ЖАДНЫЙ!! Не хочу ничего терять), если этот айдишник есть после обновления. Далее грузится по порядку. Вариант с подгрузкой всего разом - лень. Там ничего интересного - формирование json апишкой и перебор элементов в джаваскрипте. Спасибо! ну слов нет... даже не знаю чего полезно со своей стороны предложить.... Надеюсь народ который в своей работе будет использовать Ваши наработки, тоже не будет забывать говорить - Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2017, 05:59 |
|
||
|
|

start [/forum/topic.php?all=1&fid=50&tid=1874397]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
177ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
73ms |
get tp. blocked users: |
1ms |
| others: | 10ms |
| total: | 297ms |

| 0 / 0 |
