Джаспер сообщает - преобразование параметра перед передачей в механизм отчетов? - PullRequest
0 голосов
/ 16 ноября 2011

Можно ли каким-либо образом преобразовать параметр отчета (управление вводом) перед его передачей в механизм отчетов?

Я приведу пример. Я использую XML в качестве источника данных:

<Results>
    <Object Id="0042" Val="dfg0bb" DateTime="2011-09-30T22:00:04Z" />
    <Object Id="0097" Val="abf0cc" DateTime="2011-09-30T22:00:06Z" />
    ...
</Results>

Это мой запрос XPath:

//Object[translate(translate(translate(translate(@DateTime, '-', ''), ':', ''), 'T', ''), 'Z', '') <= $P{dateTimeValue}]

Описание полей:

@Id, @DateTime, @Val

Это работает хорошо, я получаю то, что хочу, но атрибут даты является своего рода проблемой, потому что мне нужно представить его как число для сравнения. Как видно, мне нужно убрать все нечисловые символы, чтобы сравнивать даты как простые числа (ограничение XPath 1.0 в Java). Кроме того, я хочу определить в JasperServer элемент управления вводом для этого параметра, и я хочу, чтобы это был тип даты, чтобы пользователь мог выбирать из календаря.

Итак, есть ли способ (скриптлет или что-то в этом роде) преобразовать предоставленный параметр перед его передачей в механизм отчетов? (В этом случае дата в числовое значение, чтобы XPath мог работать)

1 Ответ

1 голос
/ 16 ноября 2011

Идея, которую вам нужно использовать, заключается в том, что один параметр может иметь значение по умолчанию на основе другого параметра. Запросите у пользователя «MyDate», затем преобразуйте его в «StringBasedOnMyDate» для использования в запросе XPath. Это будет выглядеть примерно так в .jrxml:

<parameter name="MyDate" class="java.util.Date" isForPrompting="true">
  <defaultValueExpression><![CDATA[]]></defaultValueExpression>
</parameter>
<parameter name="StringBasedOnMyDate" class="java.lang.String" isForPrompting="false">
  <defaultValueExpression><![CDATA[new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'").format($P{MyDate})]]></defaultValueExpression>
</parameter>
...