Каков алгоритм отчета Джаспера для использования источника данных? - PullRequest
2 голосов
/ 29 апреля 2010

Я создал свой пользовательский источник данных, реализовав интерфейс JRDataSource. Этот интерфейс выглядит следующим образом:

public interface JRDataSource
{
 /**
  * Tries to position the cursor on the next element in the data source.
  * @return true if there is a next record, false otherwise
  * @throws JRException if any error occurs while trying to move 
  * to the next element
  */
 public boolean next() throws JRException;

 /**
  * Gets the field value for the current position.
  * @return an object containing the field value. The object type must 
  * be the field object type.
  */
 public Object getFieldValue(JRField jrField) throws JRException;

}

Мой вопрос заключается в следующем: каким образом отчет jasper вызывает эту функцию для получения полей в .jrxml.

например:

  if( next() )){
     call getFieldValue for every field present in the page header 
     while( next() ){
       call getFieldValue for every field present in detail part
     }
     call getFieldValue for every field present the footer
   }

Предыдущий пример - экспериментально, на самом деле я обнаружил, что на самом деле это не так. Поэтому у меня возник вопрос.

Спасибо!

1 Ответ

1 голос
/ 29 апреля 2010

Я на самом деле думаю, что алгоритм выглядит примерно так (упрощение и использование синтаксиса Java):

while(dataSource.next()) {
   for (JRField field : reportFields)
       currentValues.put(field, dataSource.getFieldValue(field));
}

Поля объявляются в файле jrxml независимо от того, где они отображаются.

Однако, насколько мне известно, по умолчанию только раздел подробностей создается (рисуется или обновляется) для каждой записи. Другими словами, вам придется сделать что-то необычное, если вам нужно обновить информацию в верхнем или нижнем колонтитуле страницы.

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

Лично я обнаружил, что примеры проектов JasperReports полезны, хотя для их извлечения требуется много усилий. Я бы также указал на Полное руководство по JasperReports , имя которого является ложью, но оно служит достойным (а в остальном полностью отсутствует) справочным руководством.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...