Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Формирование файла из модального окна (APEX5)
|
|||
|---|---|---|---|
|
#18+
Привет! Ранее пользовался простой и испытанной конструкцией для формирования файла и записи его на диск или обработки соотв. приложением: В Before Header прописывал Process, формирующий двоичный контекст файла и отправлющий его ОС с помощью WPG_DOCLOAD.DOWNLOAD_FILE Но это работало на типовой странице. В модельном диалоге это не работает. Точнее - не отображается контент самого окна после формирования файла. Подскажите, плз, модный сейчас путь генерации файлов. Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2017, 14:11 |
|
||
|
Формирование файла из модального окна (APEX5)
|
|||
|---|---|---|---|
|
#18+
У нас работает так: 1. По клику на кнопке идет сабмит 2. Запускается процесс, который готовит файл и ссылку для его скачивания (пакет для этого делал другой человек, я внутрь не заглядывал пока). 3. Потом идет бранч по урлу, созданному на предыдущем шаге Но это все работает в обычном окне, не в модальном. В принципе, в модальном тоже должно. КурдльВ модельном диалоге это не работает. Точнее - не отображается контент самого окна после формирования файла.Не знаю как в апексе 5.х, а в версиях 4.х контент окна тоже не отображался, даже если оно не модальное (а модальных тогда и не было). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2017, 14:53 |
|
||
|
Формирование файла из модального окна (APEX5)
|
|||
|---|---|---|---|
|
#18+
Никанор КузьмичУ нас работает так: 2. Запускается процесс, который готовит файл и ссылку для его скачивания (пакет для этого делал другой человек, я внутрь не заглядывал пока). Файл на сервере что ли готовится? Кто ж мне даст файлы на сервере формировать?.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2017, 16:30 |
|
||
|
Формирование файла из модального окна (APEX5)
|
|||
|---|---|---|---|
|
#18+
Курдль, Делал таким способом. Для подготовки файла делается специальная страница, которая только выгружает файл. На модальном окне делается кнопка с Action Javascript window.location.href="f?p=&APP_ID.:<<PAGE>>:&SESSION."; Файл выгружается, окно модальное остается, при необходимости можно закрыть отдельно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2017, 16:47 |
|
||
|
Формирование файла из модального окна (APEX5)
|
|||
|---|---|---|---|
|
#18+
Курдль, В версии 4.1 были изменения, касающиеся размещения подобного кода в before header. Логично поместить код WPG_DOCLOAD в page processing или ondemand, тогда не будет проблем с отрисовкой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.06.2017, 18:28 |
|
||
|
Формирование файла из модального окна (APEX5)
|
|||
|---|---|---|---|
|
#18+
SvDevКурдль, В версии 4.1 были изменения, касающиеся размещения подобного кода в before header. Логично поместить код WPG_DOCLOAD в page processing или ondemand, тогда не будет проблем с отрисовкой. Не могу добиться вывода потока из AJAX. Процедура отрабатывает, но браузер ничего не предпринимает. Все советы на форумах сводятся к выделению отдельной страницы, которая будет отвечать за download, а сама оставаться невидимой, благодаря Код: plsql 1. Но как специально обученной странице передать BLOB для download? APEX_APPLICATION_TEMP_FILES - доступна только на чтение. Заводить для этого таблицу, даже временную - криво... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2017, 18:07 |
|
||
|
Формирование файла из модального окна (APEX5)
|
|||
|---|---|---|---|
|
#18+
Курдль, Вы пишите выгрузку файла так ? Зачем вам APEX_APPLICATION_TEMP_FILES не понял. Если вы отдаете файл через WPG_DOCLOAD.DOWNLOAD_FILE, какая разница в какой таблице он лежит или не лежит, у вас есть сгенерированный blob, который вы отдаете. 1. Изолируете код: Код: plsql 1. 2. 3. 4. 5. Код выгрузки можно поместить много куда, см. выше. 2. У браузеров есть проблемы с загрузкой файлов через аякс. Используйте не аяксный POST или GET, можно через js, в том числе методом GET, например, просто нажав на ссылку определенного формата, можно вызвать ondemand процесс. 3. Если выбрали метод POST в 5.1 отключите Reload on Submit: Only For Success, если включен, чтобы избежать аякс вызова на submit. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2017, 20:36 |
|
||
|
Формирование файла из модального окна (APEX5)
|
|||
|---|---|---|---|
|
#18+
SvDevКурдль, Зачем вам APEX_APPLICATION_TEMP_FILES не понял. ...у вас есть сгенерированный blob, который вы отдаете. Во всех примерах, что я нашел, BLOB сохранялся в какой-то пользовательской таблице на одной форме, а извлекался и выгружался в файл - на другой. А что, можно просто передать его параметром вызова, в страничный ITEM? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2017, 23:43 |
|
||
|
Формирование файла из модального окна (APEX5)
|
|||
|---|---|---|---|
|
#18+
КурдльВо всех примерах, что я нашел, BLOB сохранялся в какой-то пользовательской таблице на одной форме, а извлекался и выгружался в файл - на другой. Не обязательно. С wpg_docload простого blob достаточно. КурдльА что, можно просто передать его параметром вызова, в страничный ITEM? Если нужно просто вывести содержимое на страницу - см htp.prn + region type: pl/sql dynamic content ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2017, 00:35 |
|
||
|
Формирование файла из модального окна (APEX5)
|
|||
|---|---|---|---|
|
#18+
SvDev, Я имею поразительный дар - объяснять так, чтобы меня никто не понял :D Поясню выбранное мной решение из имеющихся в интернете примеров. 1. Page1 (modal dialog) формирует BLOB для последующего скачивания на комп. 2. Page1 вызывает Page2 (универсальный скачиватель для всего приложения) и передает в неё BLOB, MIME_TYPE и FILE_NAME. 3. Page2 отдает сформированный из BLOB поток (файл) в браузер, при этом не отображаясь. Это, мне кажется, изящное решение, позволяющее осуществлять функцию скачивания одной странице. Другие страницы при необходимости отдать что-то на скачивание, обращаются к ней. Сейчас не приходит в голову решение, как лучше оформить вызов этой страницы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2017, 10:11 |
|
||
|
Формирование файла из модального окна (APEX5)
|
|||
|---|---|---|---|
|
#18+
Курдль, Смысла в Page2 не вижу. Вместо Page2, лучше использовать, например: либо onDemand, либо onSubmit Application Process. Далее, мне непонятно, чем конкретно вызвано разделение формирования и выгрузки файлов на 2 запроса, с учетом, если я правильно понял, сформированные файлы не хранятся сейчас в таблице ? В типовых ситуациях, файлы либо хранятся в таблицах, либо blob формируется в том же запросе, что и выгрузка файла. Еще есть вариант выгрузки файла браузером средствами html5, но такое пока что современными браузерами поддерживается плохо. Касательно AJAX, XMLHttpRequest не выведет диалога с сохранением файла, потому что для него предусмотрен другой способ обработки ответа сервера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2017, 13:11 |
|
||
|
Формирование файла из модального окна (APEX5)
|
|||
|---|---|---|---|
|
#18+
SvDevКурдль, Смысла в Page2 не вижу. Вместо Page2, лучше использовать, например: либо onDemand, либо onSubmit Application Process. Далее, мне непонятно, чем конкретно вызвано разделение формирования и выгрузки файлов на 2 запроса, с учетом, если я правильно понял, сформированные файлы не хранятся сейчас в таблице ? В типовых ситуациях, файлы либо хранятся в таблицах, либо blob формируется в том же запросе, что и выгрузка файла. Еще есть вариант выгрузки файла браузером средствами html5, но такое пока что современными браузерами поддерживается плохо. Касательно AJAX, XMLHttpRequest не выведет диалога с сохранением файла, потому что для него предусмотрен другой способ обработки ответа сервера. 1. Смысл в Page2 такой: Page1 типа "модальный диалог" я не могу заставить работать по ранее понятным мне правилам. Код, взятый из примера, по-разному отрабатывает в стандартной и модальной странице (модальная открывается, несмотря ни на что и висит без всякого контента поверх вызывающей). Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 2. Поправьте, если я путаю, но в АРЕХ 5 нет OnDemand процессов. Теперь все они AJAX Callback. After Submit процессы не влекут за собой рендеринг на браузере, поэтому приведенный выше код не может ничего выводить. Если Вы знаете, как из такого вывести файловый поток - сообщите, пожалуйста, а то я даже в интернете ничего не нашел по этой теме. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2017, 13:37 |
|
||
|
Формирование файла из модального окна (APEX5)
|
|||
|---|---|---|---|
|
#18+
Курдль2. Поправьте, если я путаю, но в АРЕХ 5 нет OnDemand процессов. Теперь все они AJAX Callback. on-demand / Ajax callback одно и то же. в api guide так и пишут: Код: plaintext 1. About Running an On Demand Process from a Page Request КурдльЕсли Вы знаете, как из такого вывести файловый поток - сообщите, пожалуйста, а то я даже в интернете ничего не нашел по этой теме. см. 20685029 п.1 Еще есть вариант через public functions, но их настраивать сложнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2017, 14:10 |
|
||
|
Формирование файла из модального окна (APEX5)
|
|||
|---|---|---|---|
|
#18+
Пример: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2017, 14:49 |
|
||
|
Формирование файла из модального окна (APEX5)
|
|||
|---|---|---|---|
|
#18+
SvDev, Да, Вы в самом начале дали мне правильную подсказку. Но дальше, к сожалению, у меня ума не хватает ею воспользоваться. Ваши советы слишком умны для меня :( Мне следует отказаться от WPG_DOCLOAD.DOWNLOAD_FILE? Тогда как? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2017, 16:37 |
|
||
|
Формирование файла из модального окна (APEX5)
|
|||
|---|---|---|---|
|
#18+
Курдль, Вы спрашивали общих советов, но так и не описали свою задачу , что вы хотите сделать. Вывести модальное окно и окно скачивания файла одновременно ? Я не могу представить, зачем такое может быть нужно, я бы поменял подход, потому что выглядит плохо. Или же вы что-то другое хотите сделать ? Если то, то есть несколько способов, например в модальном окне сделайте DA onload, в нём action: execute javascript code, вызовите apex.navigation.redirect (вам выше подсказывали window.location.href если работаете со старыми версиями) или apex.submit (если работаете с версией 5.1 см. так же reloadOnSubmit параметр) и будет вам скачивание файла хоть через before header процесс, хоть через on submit процесс, хоть через on demand (Ajax callback) процесс. Пример кода я привел. Формат ссылки вызова on demand тоже, выше есть ссылка на документацию c on demand. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2017, 17:14 |
|
||
|
Формирование файла из модального окна (APEX5)
|
|||
|---|---|---|---|
|
#18+
SvDev, Задача. 1. Необходимо создать одну страницу типа модальный диалог "Детальные данные документа" 2. Обеспечить функцию генерации документа из БД и выгрузке его на ПК при нажатии кнопки "Download" на вышеуказанной странице. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2017, 17:25 |
|
||
|
Формирование файла из модального окна (APEX5)
|
|||
|---|---|---|---|
|
#18+
Курдль, Я чаще всего в таких случаях в кнопке download формирую простую ссылку, которая вызывает On Demand Process (формат описан в About Running an On Demand Process from a Page Request) В этой ссылке можно передать так же application items: тип источника данных, ид источника данных, по которым можно сформировать или выбрать файл. Если данные вводятся на форме, можно ссылку сформировать динамически в DA. Можно просто выполнить apex.submit вместо этого, как уже написано, способов много. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2017, 17:34 |
|
||
|
Формирование файла из модального окна (APEX5)
|
|||
|---|---|---|---|
|
#18+
SvDevКурдль, Я чаще всего в таких случаях в кнопке download формирую простую ссылку, которая вызывает On Demand Process (формат описан в About Running an On Demand Process from a Page Request) Я худо-бедно умею вызывать AJAX процессы, но не умею формировать из них поток для загрузки файлов. Как следует формировать и передавать поток из AJAX процесса? С помощью WPG_DOCLOAD.DOWNLOAD_FILE? Или HTP.p? Или Htp.Prn? SvDevкак уже написано, способов много. Мне бы хватило и одного, но подробно описанного :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2017, 21:19 |
|
||
|
Формирование файла из модального окна (APEX5)
|
|||
|---|---|---|---|
|
#18+
Курдльно не умею формировать из них поток для загрузки файлов. Как следует формировать и передавать поток из AJAX процесса? С помощью WPG_DOCLOAD.DOWNLOAD_FILE? Или HTP.p? Или Htp.Prn? SvDevкак уже написано, способов много. Мне бы хватило и одного, но подробно описанного :( Вы имеете ввиду, как отдать файл через Ajax callback процесс ? С WPG_DOCLOAD, пример кода уже приведен, apex_application.stop_apex_engine; разве что в данном случае, пожалуй, лишний. htp.p не подойдёт, врят ли вам нужны лишние символы перевода строки. htp.prn можно, если данные текстовые (результат будет принудительно сконвертирован в UTF-8 для не UTF-8 базы), и если это удобно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2017, 21:34 |
|
||
|
Формирование файла из модального окна (APEX5)
|
|||
|---|---|---|---|
|
#18+
КурдльЯ худо-бедно умею вызывать AJAX процессы, но не умею формировать из них поток для загрузки файлов. Вы может и умеете, но как я уже писал, вы не можете просто так вызвать диалог скачивания файла сделав AJAX запрос (т.е. асинхронно, используя htmldb_get, apex.server.process или др. подобные функции ) А вот не AJAX методами: apex.navigation.redirect или просто кликнув мышкой по простой ссылке (что я и предлагаю) можете. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2017, 21:53 |
|
||
|
Формирование файла из модального окна (APEX5)
|
|||
|---|---|---|---|
|
#18+
КурдльAPEX_APPLICATION_TEMP_FILES - доступна только на чтение. Заводить для этого таблицу, даже временную - криво... А в чем кривость? Типа, использовать созданную апексом нормально, а свою точно такую же криво? Я пытался решить такую же проблему, и в итоге создал себе таблицу подобную апексовой и таскаю блобы/клобы между страницами в ней. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2017, 22:31 |
|
||
|
Формирование файла из модального окна (APEX5)
|
|||
|---|---|---|---|
|
#18+
SvDev, У меня не получается с таким вызовом: Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. Когда я снимаю комментарий с присвоения и алерта - в его поле выводится корректное содержание файла, сформированного на стороне сервера. А в противном случае - ничего не происходит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2017, 22:33 |
|
||
|
Формирование файла из модального окна (APEX5)
|
|||
|---|---|---|---|
|
#18+
Курдль, Дык, а я что твержу уже сколько времени, про htmldb_Get уже даже явно написал ? Ваш код неявно использует XMLHttpRequest, и не будет он выводить диалог, потому что работает он другим образом, выводит результат в обработчик. Пишите ссылку <a href="f?p=...">, так же как пишите обычные ссылки (см. About Running an On Demand Process from a Page Request) и тогда будет вызван on demand (Ajax callback) процесс с предложением скачать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2017, 22:46 |
|
||
|
Формирование файла из модального окна (APEX5)
|
|||
|---|---|---|---|
|
#18+
SvDevКурдль, Дык, а я что твержу уже сколько времени, про htmldb_Get уже даже явно написал ? Ваш код неявно использует XMLHttpRequest, и не будет он выводить диалог, потому что работает он другим образом, выводит результат в обработчик. Пишите ссылку <a href="f?p=...">, так же как пишите обычные ссылки (см. About Running an On Demand Process from a Page Request) и тогда будет вызван on demand (Ajax callback) процесс с предложением скачать... Каюсь, просмотрел это важное примечание. Однако при генерации URL-а натыкаюсь опять же на неприятные особенности модального диалога. Сейчас попытаюсь синтезировать URL при помощи apex_util.prepare_url К тому же промелькнули обсуждения какого-то бага в 5.0 при таком вызове модального диалога. А потом буду придумывать, как запихать в URL параметры. MigelleКурдльAPEX_APPLICATION_TEMP_FILES - доступна только на чтение. Заводить для этого таблицу, даже временную - криво... А в чем кривость? Типа, использовать созданную апексом нормально, а свою точно такую же криво? Я пытался решить такую же проблему, и в итоге создал себе таблицу подобную апексовой и таскаю блобы/клобы между страницами в ней. Структурой БД я не могу распоряжаться по своему усмотрению. Подумываю над временной, но плохо представляю себе, как сессия АРЕХ соотносится с сессией оракла. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2017, 23:23 |
|
||
|
|

start [/forum/topic.php?fid=50&msg=39497050&tid=1874328]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
34ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
| others: | 12ms |
| total: | 141ms |

| 0 / 0 |
