2014-11-04 2 views
0

У меня есть несколько отчетов, в которых используются параметры начальной даты и даты окончания. Цель состоит в том, чтобы эти отчеты планировались и отправлялись по электронной почте клиентам на еженедельной основе, позволяя им входить в систему и выбирать свои собственные даты, когда это необходимо. На стороне отчета у меня есть startdate и enddate java.util параметры даты с выражениями значений по умолчанию, а на стороне сервера есть 2 входных параметра типа даты с точным именем.Параметры динамической даты сервера Jasper для планирования отчетов

Даты по умолчанию рассчитываются по скриптам Groovy. Расчеты даты работают отлично; когда вы входите в Jasperserver и открываете отчет, они всегда правильны, а отчеты запускаются вручную.

Однако планировщик отчетов застревает. Я установил планировщик на определенную дату (в следующий понедельник 00:05) и задал повторение как тип календаря, чтобы повторить один месяц, каждый понедельник в 00:05. Проблема в том, что хотя планировщик работает, он будет ТОЛЬКО использовать текущие параметры даты и не будет обновлять их во втором прогоне. Например, если я установил планировщик сейчас, в следующий понедельник у меня будут отчеты, отправленные на мой адрес электронной почты с датами ввода startdate: 3-11-14, enddate: 10-11-14. Это верно для первого запуска. Однако, все предстоящие недели, он будет использовать эти конкретные параметры и не обновит даты.

Я считаю, что я ищу, ОЧЕНЬ прост. У меня есть мой отчет, который вычисляет все правильно, и все, что мне нужно от Jasperserver, - запускать его каждый понедельник БЕЗ сохранения входных параметров. Если он ТОЛЬКО запускает его, в запланированное время все будет замечательно, но какой-то планировщик сохранит значения параметров, которые верны только на дату установки планировщика!

Я работаю над этим целую вечность и очень раздражен. Я не могу найти постоянного, надежного решения. Любая помощь будет принята с благодарностью.

ответ

0

Возможно, это уже новая функция в более поздних версиях JasperReports Server, но я знаю, что это будет работать в 4,5 и выше (и, вероятно, будет работать и для более старых версий). Вам нужно будет создать класс JAVA, который возьмет «строку», которую вам придется предварительно заполнить такими вещами, как «Этот месяц» и «Последние 10 дней». На основе строки, переданной в, она вернет правильные даты. Вы можете создать падающий параметр с этими предварительно заполненными строками. Метод в этом классе должен быть написан для каждой из ваших дат ввода. Вот некоторые примеры JRXML, как это будет смоделируйте:

<parameter name="DateInputControl" class="java.lang.String"> 
    <defaultValueExpression><![CDATA["This Month"]]></defaultValueExpression> 
</parameter> 
<parameter name="QueryBeginDate" class="java.util.Date" isForPrompting="false"> 
    <defaultValueExpression> 
     <![CDATA[com.your.package.YourClass.getBeginDate($P{DateInputControl})]]> 
    </defaultValueExpression> 
</parameter> 
<parameter name="QueryEndDate" class="java.util.Date" isForPrompting="false"> 
    <defaultValueExpression> 
     <![CDATA[com.your.package.YourClass.getEndDate($P{DateInputControl})]]> 
    </defaultValueExpression> 
</parameter> 

Очевидно, есть немного больше работы, чем это, но, надеюсь, это поможет вам по пути. Я настоятельно рекомендую использовать время JODA в вашем пользовательском классе JAVA.

С помощью этой настройки вы можете планировать использование необходимых пресетов, таких как «Последние 10 дней», и ваш запланированный отчет будет запускаться с использованием дат начала. Даты для вашего отчета теперь будут всегда относительными (или динамическими) на основе текущей даты.

+0

Большое спасибо за ваш ответ. Я полностью получаю часть JRXML, но никогда не писал Java-класс, поэтому теперь вам придется погрузиться в это. Если у вас есть какие-то советы/страницы, на которые я мог бы следовать, это было бы здорово. Спасибо и приветствую. – Martin83

+0

Также потенциальная проблема, которая перешла мне на ум: выпадающее меню с такими параметрами, как «последняя неделя» или «последний месяц» отлично, но мне также потребуется, чтобы у пользователя была возможность выбрать свои собственные даты. Таким образом, третий (?) Вариант должен быть «обычным», который каким-то образом должен открыть календарь, чтобы выбрать даты .... – Martin83

Смежные вопросы