Oracle Apex - загрузка CSV создает пустой отчет

В настоящее время я использую Oracle Apex версии 18.2.0.00.12 в Internet Explorer на компьютере под управлением Windows 10.

У меня возникла проблема с загрузкой интерактивной сетки в виде файла CSV.

На моей странице Apex есть интерактивная сетка и три элемента страницы. Два элемента страницы, P200_DATE_FROM и P200_DATE_TO, являются элементами выбора даты. Другой элемент - это кнопка с именем «Отправить» и ее действие - «Отправить страницу».

Это запрос для моей интерактивной сетки:

select * from kat_test
where repairdate between :P200_DATE_FROM and :P200_DATE_TO;

Интерактивная сетка состоит из четырех столбцов:

Проблема - Varchar2

Месяц - Число

Неделя - Номер

Дата ремонта - Дата

Единственные настройки, которые я изменил в интерактивной таблице, - это заголовок и SQL-запрос.

Я изменил источник P200_DATE_FROM на выражение PL / SQL, которое возвращает первый день текущего месяца. Он настроен на использование «Только когда текущее значение в состоянии сеанса равно нулю». Выражение:

trunc(last_day(sysdate)-1, 'mm')

Я изменил источник выражения P200_DATE_TO PL / SQL, которое возвращает текущую дату. Он также настроен на использование «Только когда текущее значение в состоянии сеанса равно нулю». Выражение:

sysdate

Когда я запускаю страницу, она загружается точно так, как ожидалось, в том смысле, что элемент страницы P200_DATE_FROM заполняется первой датой текущего месяца, элемент P200_DATE_TO заполняется текущей датой, а интерактивная сетка отображает правильные данные.

Проблема: когда я выбираю Действия -> Загрузить -> CSV, файл CSV загружается и открывается как файл Excel, НО отображаются только имена заголовков. Все ячейки под заголовками пусты. Однако, если я изменю одну из дат (или обе) в элементе страницы P200_DATE_FROM и / или элементе страницы P200_DATE_TO и затем нажму кнопку отправки, страница будет отправлена, а затем, когда я нажму Действия -> Загрузить -> CSV, Файл Excel открывается, и все данные отображаются безупречно (как заголовки столбцов, так и данные под заголовками).

Я не понимаю, почему при первоначальной загрузке страницы файл CSV для интерактивной сетки не загружается правильно, но после того, как я нажимаю кнопку отправки, файл CSV загружается правильно.

У кого-нибудь есть какие-либо идеи?

Заранее спасибо.


person Katherine Reed    schedule 29.10.2018    source источник


Ответы (2)


Я думаю, вам просто нужно указать имена этих элементов в поле «Элементы для отправки» рядом с вашим SQL. Когда он загружается, я думаю, что он повторно обрабатывает SQL, используя значения элементов, которые находятся в сеансе. Если вы не поместите эти элементы туда, значения не поступят в сеанс. Введите названия элементов через запятую. После этого, думаю, в вашем SQL необходимо внести какие-либо изменения.

person romeuBraga    schedule 30.10.2018

Запрос отчета, вероятно, содержит предложение WHERE, которое выглядит так:

where some_date between :P200_DATE_FROM and :P200_DATE_TO

Измените его так, чтобы он включал функцию NVL, второй параметр которой отражает значения элементов по умолчанию, т.е.

where some_date between nvl(:P200_DATE_FROM, trunc(last_day(sysdate)-1, 'mm'))
                    and nvl(:P200_DATE_TO, sysdate)

Запускаем страницу, скачиваем CSV; какое-нибудь улучшение?

person Littlefoot    schedule 29.10.2018
comment
Это исправило! Спасибо! Если вы не возражаете, поясните, почему это изменение запроса необходимо для правильной загрузки файла CSV? - person Katherine Reed; 29.10.2018
comment
Пожалуйста. Я понятия не имею, почему это работает не так, как вы ожидали (т.е. путем установки значений элементов по умолчанию). Я столкнулся с той же проблемой и узнал на собственном опыте, как ее исправить. Если бы я знал почему, я бы сказал вам, но ... я не знаю. Извините. - person Littlefoot; 29.10.2018
comment
Нет проблем, Литтлфут, я ценю помощь! - person Katherine Reed; 29.10.2018
comment
Я думаю, вам просто нужно указать названия этих элементов в поле Items to submit рядом с вашим SQL. Когда он загружается, я думаю, что он повторно обрабатывает SQL, используя значения элементов, которые находятся в сеансе. Если вы не поместите эти элементы туда, значения не поступят в сеанс. Введите названия элементов через запятую. После этого, думаю, в ваш SQL нужно вносить какие-то изменения ... - person romeuBraga; 29.10.2018
comment
Ага! @romeu, в этом есть смысл. Спасибо за идею, попробую запомнить. - person Littlefoot; 30.10.2018
comment
Этот ответ полезен, но неверен - комментарий @ romeuBraga указывает правильный ответ. - person Jeffrey Kemp; 30.10.2018
comment
Я согласен, @ Джеффри. Если romeuBraga отправит его в качестве ответа, я бы посоветовал Кэтрин принять его (и я с радостью проголосую за него). - person Littlefoot; 30.10.2018
comment
Джеффри и Литтлфут, спасибо всем за помощь! Я был бы рад принять ответ @romeuBraga, если он решит опубликовать его как таковой. - person Katherine Reed; 30.10.2018