|
|
|
Выгрузить несколько файлов в одном процессе
|
|||
|---|---|---|---|
|
#18+
Всем доброго дня! Задача такая: есть таблица с полем-чекбоксом, выбираем несколько записей, и нужно каждую выгрузить отдельным файлом. Решаю так. Процесс по нажатию кнопки: Код: plsql 1. 2. 3. 4. 5. 6. В функции download_file формирую блоб (xml) и выгружаю его таким образом: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Проблема такая: если использовать при выгрузке apex_application.stop_apex_engine, то выгружается только первый файл (это понятно, stop_apex_engine убивает процесс). Если использовать g_unrecoverable_error, то выгружается только последний файл. Подскажите, пожалуйста, что тут можно сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2016, 12:37 |
|
||
|
Выгрузить несколько файлов в одном процессе
|
|||
|---|---|---|---|
|
#18+
Используем Apex 5.0.0.00.31, Oracle 12.1.0.2.0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2016, 12:39 |
|
||
|
Выгрузить несколько файлов в одном процессе
|
|||
|---|---|---|---|
|
#18+
Turingvetil, Боюсь стандартными средствами ни как. У меня закралась мысль, не уверен что сработает, надо пробовать. Пишите асинхроный ajax, который в в цикле запускает APPLICATION_PROCCESS по скачке файлов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2016, 12:56 |
|
||
|
Выгрузить несколько файлов в одном процессе
|
|||
|---|---|---|---|
|
#18+
blkangelкоторый в в цикле запускает APPLICATION_PROCCESS 1) В цикле (яваскриптовом) нужно делать редиректы на процессы которые выдают файлы 2) Пакуете на сервере все файлы в один зип и отдаете пользователю одним файлом. Других вариантов нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2016, 13:09 |
|
||
|
Выгрузить несколько файлов в одном процессе
|
|||
|---|---|---|---|
|
#18+
Casufiblkangelкоторый в в цикле запускает APPLICATION_PROCCESS 1) В цикле (яваскриптовом) нужно делать редиректы на процессы которые выдают файлы 2) Пакуете на сервере все файлы в один зип и отдаете пользователю одним файлом. Других вариантов нет. А чем один APPLICATION_PROCCESS процесс плох, просто параметром передавать какой файл надо качать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2016, 13:14 |
|
||
|
Выгрузить несколько файлов в одном процессе
|
|||
|---|---|---|---|
|
#18+
blkangelА чем один APPLICATION_PROCCESS процесс плох Ни чем не плох, я имел ввиду не разные процессы, а разные редиректы, нужен не аякс запрос, потому что аякс предполагает что вы получаете данные а потом их кудато размещаете, а банальный редирект в цикле, на процессы, которые отдают блобы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2016, 13:21 |
|
||
|
Выгрузить несколько файлов в одном процессе
|
|||
|---|---|---|---|
|
#18+
Ну вот как то так JavaScript : Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. APPLICATION_PROCESS=DOWNLOAD_FILE Код: plsql 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2016, 13:22 |
|
||
|
Выгрузить несколько файлов в одном процессе
|
|||
|---|---|---|---|
|
#18+
Casufiblkangelкоторый в в цикле запускает APPLICATION_PROCCESS 1) В цикле (яваскриптовом) нужно делать редиректы на процессы которые выдают файлы 2) Пакуете на сервере все файлы в один зип и отдаете пользователю одним файлом. Других вариантов нет. Да, вот как раз наткнулась в другой теме на аналогичный совет blkangel: blkangelmld-11, Есть два пути. 1. Сложный. побайтово организовать зип файл. (Я видел пример как побайтово распаковывают на pl/sql) 2. Проще. Выгружаешь все в директорию ORACLE, пакуешь стандартными средствами ОС, и отдаешь на скачивание. Вариант с зипом мне больше нравится. А как его автоматически запаковать, Оракл умеет? Или надо средствами Винды (это было бы не так удобно, т.к. надо просить доступ к серверу)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2016, 13:26 |
|
||
|
Выгрузить несколько файлов в одном процессе
|
|||
|---|---|---|---|
|
#18+
blkangelНу вот как то так JavaScript : Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. APPLICATION_PROCESS=DOWNLOAD_FILE Код: plsql 1. 2. 3. Спасибо большое, попробую! Простите за глупый вопрос, а где функцию на яваскрипте писать? Раньше не пробовала... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2016, 13:28 |
|
||
|
Выгрузить несколько файлов в одном процессе
|
|||
|---|---|---|---|
|
#18+
CasufiblkangelА чем один APPLICATION_PROCCESS процесс плох Ни чем не плох, я имел ввиду не разные процессы, а разные редиректы, нужен не аякс запрос, потому что аякс предполагает что вы получаете данные а потом их кудато размещаете, а банальный редирект в цикле, на процессы, которые отдают блобы. Согласен, тогда наверное так надо переделать JS Код: javascript 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2016, 13:32 |
|
||
|
Выгрузить несколько файлов в одном процессе
|
|||
|---|---|---|---|
|
#18+
blkangel, Я не уверен в том как будет работать window.location, мы используем window.open( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2016, 13:42 |
|
||
|
Выгрузить несколько файлов в одном процессе
|
|||
|---|---|---|---|
|
#18+
Turingvetil, Можно использовать и сборку URL через getFile.addParam только тогда вызывать window.open(getFile.url()) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2016, 13:44 |
|
||
|
Выгрузить несколько файлов в одном процессе
|
|||
|---|---|---|---|
|
#18+
Перепишу итог. Создать APPLICATION ITEM = TMP_ID Создать APPLCATION_PROCESS=DOWNLOAD_FILE Код: plsql 1. 2. 3. javaScript: Код: javascript 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2016, 13:55 |
|
||
|
Выгрузить несколько файлов в одном процессе
|
|||
|---|---|---|---|
|
#18+
CasufiTuringvetil, Можно использовать и сборку URL через getFile.addParam только тогда вызывать window.open(getFile.url()) Поясните, как в GET запросе, можно добавить параметр через getFile.addParam? Я тут гуглил как передать X01-X10 при обращение к процессу через ссылку, ничего не нашел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2016, 13:57 |
|
||
|
Выгрузить несколько файлов в одном процессе
|
|||
|---|---|---|---|
|
#18+
blkangel, Код: javascript 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2016, 14:01 |
|
||
|
Выгрузить несколько файлов в одном процессе
|
|||
|---|---|---|---|
|
#18+
Casufi, ОГРОМНЕЙШЕЕ спасибо. Я не видел такого формата ссылки, выглядит результат примерно так. "/wwv_flow.show?p_request=APPLICATION_PROC…WNLOAD_FILE&p_instance=10887217489688&p_flow_id=602&p_flow_step_id=0&x01=1" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2016, 14:06 |
|
||
|
Выгрузить несколько файлов в одном процессе
|
|||
|---|---|---|---|
|
#18+
blkangelПерепишу итог. Создать APPLICATION ITEM = TMP_ID Создать APPLCATION_PROCESS=DOWNLOAD_FILE Код: plsql 1. 2. 3. javaScript: Код: javascript 1. 2. 3. 4. 5. 6. 7. Простите, а куда javascript писать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2016, 14:46 |
|
||
|
Выгрузить несколько файлов в одном процессе
|
|||
|---|---|---|---|
|
#18+
Turingvetil, Приплыли ))))) Судя по стартовому топику, у вас есть страничка с репортом. Ну вот в header страницы яваскрипт и кидайте. А по кнопке вызывайте. Не забудьте проставить свои индексы (f01-f50) в JS коде. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2016, 15:10 |
|
||
|
Выгрузить несколько файлов в одном процессе
|
|||
|---|---|---|---|
|
#18+
blkangel, спасибо! Буду осмыслять :) Отпишусь, как получится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2016, 16:19 |
|
||
|
Выгрузить несколько файлов в одном процессе
|
|||
|---|---|---|---|
|
#18+
Turingvetil, Я провел эксперимент, у меня получилось... Как то кривовато это выглядит. У меня для эксперимента был репорт 50 строк. После запуска процедуры, начались мелькать вкладки, потом закрываться. Половина файлов,таких как в PDF открылось в новом окне, еще половину внизу побежали, но отобразилось 10 последних только... (Хром). Ну реализуете посмотрите как это выглядит... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2016, 16:36 |
|
||
|
Выгрузить несколько файлов в одном процессе
|
|||
|---|---|---|---|
|
#18+
blkangelКак то кривовато это выглядит. И опять есть два пути 1) Начинать следующую итерацию после конфирма, ну например перед скачиванием второго файла выдать запрос confirm('Скачать следующий?'); Тогда пока пользователь возится с первым файлом, предыдущий будет ждать и не будет мусорки 2) Запаковать все на сервере в один зип и отдать одним файлом, имхо самый эстетичный вариант. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2016, 17:46 |
|
||
|
Выгрузить несколько файлов в одном процессе
|
|||
|---|---|---|---|
|
#18+
Casufi, Я думаю если цель именно скачать, то как указано у автора attachment, нормально будет. У меня стоит inline(мне так надо), поэтому часть файлов, которые браузер может отобразить, он отображает. Мне просто интересно было, я провел эксперимент, а так параметром можно передавать (inline/attachment) и будет более менее красиво. Код: plsql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2016, 17:55 |
|
||
|
Выгрузить несколько файлов в одном процессе
|
|||
|---|---|---|---|
|
#18+
Пока результаты такие. Создала APPLICATION PROCESS DOWNLOAD_FILE: Код: plsql 1. 2. 3. Javascript: Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. Вызываю по нажатию кнопки Redirect to URL, Target - javascript:downloadFiles(); Выгружается нормально, но почему-то только первая строка. Если в функции просто выводить элементы массива: Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. то выводятся значения всех строк, независимо от того, заполнены ли чекбоксы. Разве так должно быть? В массиве же хранятся только выделенные? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2016, 09:30 |
|
||
|
Выгрузить несколько файлов в одном процессе
|
|||
|---|---|---|---|
|
#18+
Turingvetil, Вы путаете с PL/SQL процессом. Если Вас надо только те которые были отмечены, добавьте условие в цикл. Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2016, 09:40 |
|
||
|
Выгрузить несколько файлов в одном процессе
|
|||
|---|---|---|---|
|
#18+
Опечатка Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2016, 09:41 |
|
||
|
Выгрузить несколько файлов в одном процессе
|
|||
|---|---|---|---|
|
#18+
blkangel, спасибо, теперь выводит правильно, и если отметить один файл, то его и выгружает. Но если отметить несколько, выводит только первый. Причем если после выгрузки добавить еще какое-нибудь действие, оно выполняется, т.е. это не выгрузка процесс убивает (?) Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Отмечаю 2 строки, выгружает файл из первой, пишет "ololo". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2016, 10:01 |
|
||
|
Выгрузить несколько файлов в одном процессе
|
|||
|---|---|---|---|
|
#18+
Turingvetil, А где обнуление, я вроде писал везде???? Код: javascript 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2016, 10:06 |
|
||
|
Выгрузить несколько файлов в одном процессе
|
|||
|---|---|---|---|
|
#18+
blkangel, эх, не хотела Вас больше мучить, но никак не выходит каменный цветок... Сейчас код выглядит так: Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Выгружает только первый файл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2016, 11:07 |
|
||
|
Выгрузить несколько файлов в одном процессе
|
|||
|---|---|---|---|
|
#18+
Turingvetilblkangel, эх, не хотела Вас больше мучить, но никак не выходит каменный цветок... Сейчас код выглядит так: Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Выгружает только первый файл. Ну давайте дебажить. результат выкладывайте, чего он в консоль напишет. Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2016, 11:29 |
|
||
|
Выгрузить несколько файлов в одном процессе
|
|||
|---|---|---|---|
|
#18+
blkangel, такое впечатление, что он это действие вообще в дебаг не пишет! А файл грузит. Дебаг запущен, все фильтры сняла, но показывает только событие show. Зато попутно поймала ошибку, у меня-то действие происходит на странице 2, а я тупо с 0 скопировала... Но всё равно не заработало. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2016, 11:46 |
|
||
|
Выгрузить несколько файлов в одном процессе
|
|||
|---|---|---|---|
|
#18+
Turingvetil, Я вам написал код, который пишет в консоль браузера, а не в дебаг. Откройте консоль браузера и запустите JS скрипт ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2016, 11:59 |
|
||
|
Выгрузить несколько файлов в одном процессе
|
|||
|---|---|---|---|
|
#18+
blkangel, прошу прощения, я с яваскриптом вообще первый раз имею дело, да и с Апексом недавно общаюсь, поэтому сильно туплю =( В консоли вот что: f?p=111:2:13416999074070::YES:RP:P2_LOAD_ID,P2_STAVKA_ID:,:310 arrf30.length=2 f?p=111:2:13416999074070::YES:RP:P2_LOAD_ID,P2_STAVKA_ID:,:316 getFile.url() http://kdb1:8081/apex/wwv_flow.show?p_request=APPLICATION_PROCESS=DOWNLOAD_FILE&p_instance=13416999074070&p_flow_id=111&p_flow_step_id=2&x01=33 f?p=111:2:13416999074070::YES:RP:P2_LOAD_ID,P2_STAVKA_ID:,:316 getFile.url() http://kdb1:8081/apex/wwv_flow.show?p_request=APPLICATION_PROCESS=DOWNLOAD_FILE&p_instance=13416999074070&p_flow_id=111&p_flow_step_id=2&x01=61 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2016, 12:13 |
|
||
|
Выгрузить несколько файлов в одном процессе
|
|||
|---|---|---|---|
|
#18+
Turingvetil, В консоле все красиво, выделили две записи, два раза запустилось. JS отрабатывает корректно. Значит pl/sql смотреть надо. процедуру cher_sp.load_ndfl6.download_file Сюда в студию ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2016, 12:17 |
|
||
|
Выгрузить несколько файлов в одном процессе
|
|||
|---|---|---|---|
|
#18+
blkangel, Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. myfile - blob, txt - varchar2. Если нужно, выложу целиком, но до этого куска идет только формирование текста, оно нам наверное не важно? Все-таки грешу на g_unrecoverable_error ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2016, 12:23 |
|
||
|
Выгрузить несколько файлов в одном процессе
|
|||
|---|---|---|---|
|
#18+
Turingvetil, Моя процедура по скачиванию отличается только строкой htp.init; ну и пару параметров которые я передаю, у Вас указано жестко? в остальном все одинаково. А я грешу на неправильный подсчет длинны, myfile blob или clob? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2016, 12:34 |
|
||
|
Выгрузить несколько файлов в одном процессе
|
|||
|---|---|---|---|
|
#18+
Turingvetil, Не заметил выше, blob. Добавьте в APPLICATION_PROCCESS exception when OTHERS then sys.htp.p(sqlerrm); Чего то выдаст в консоль? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2016, 12:37 |
|
||
|
Выгрузить несколько файлов в одном процессе
|
|||
|---|---|---|---|
|
#18+
Turingvetil, И попробуйте в качестве теста, имя фала выдавать на английском, задайте жестко TEST ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2016, 12:38 |
|
||
|
Выгрузить несколько файлов в одном процессе
|
|||
|---|---|---|---|
|
#18+
Turingvetil, О, а это не заметил, зачем оно? Код: plsql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2016, 12:43 |
|
||
|
|

start [/forum/topic.php?all=1&fid=50&tid=1874707]: |
0ms |
get settings: |
12ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
193ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
76ms |
get tp. blocked users: |
1ms |
| others: | 241ms |
| total: | 564ms |

| 0 / 0 |
