Статьи

Eclipse BIRT: набор сценариев данных

В этой статье представлено использование набора данных из сценария в BIRT затмения. Этот подход я использую начиная с версии BIRT 2.5.1 и, возможно, он работает даже с более старой версией. С новейшей версией BIRT этот подход тоже работает.

Если вы хотите использовать объекты Java в качестве источника данных и набора данных в затмениях BIRT, вам нужно сделать это, используя источник данных со сценариями и набор данных со сценариями. Я попытаюсь объяснить это здесь на примере, используя скрипт [ref] в дизайнере отчетов BIRT.

Для теста вам понадобится проект Java с одним классом Java со ссылкой на список объектов, которые определены в другом классе Java. Метод getter класса используется затем в файле rptdesign. Всем этим классам рекомендуется реализовать интерфейс сериализации. Первый класс, который содержит ссылку на список, может выглядеть так:

package name.stojanok.dzone.scripteddataset;

import java.io.Serializable;
import java.util.ArrayList;

public class PersonDataSet implements Serializable {

private static final long serialVersionUID = 1L;

private ArrayList<Person> person = new ArrayList<Person>();

public void setList(ArrayList<Person> dataStructures) {
person = dataStructures;
}

public ArrayList<Person> getList() {
person.add(createPerson("John", "Doe", 33, true));
person.add(createPerson("Johnny", "Doe", 13, true));
person.add(createPerson("Lisa", "Doe", 33, false));
person.add(createPerson("Jenny", "Doe", 13, false));
return person;
}

private Person createPerson(String firstName, String lastName, Integer age, boolean gender) {
Person person = new Person();
person.setFirstName(firstName);
person.setLastName(lastName);
OtherPersonData otherPersonData = new OtherPersonData();
otherPersonData.setAge(age);
otherPersonData.setGender(gender);
person.setOtherPersonData(otherPersonData);
return person;
}
}

Класс, на который есть ссылки, может быть похож на следующие классы:

package name.stojanok.dzone.scripteddataset;


public class Person {

private String firstName;

private String lastName;

private OtherPersonData otherPersonData;

public String getFirstName() {
return firstName;
}

public void setFirstName(String firstName) {
this.firstName = firstName;
}

public String getLastName() {
return lastName;
}

public void setLastName(String lastName) {
this.lastName = lastName;
}

public OtherPersonData getOtherPersonData() {
return otherPersonData;
}

public void setOtherPersonData(OtherPersonData otherPersonData) {
this.otherPersonData = otherPersonData;
}
}
package name.stojanok.dzone.scripteddataset;


public class OtherPersonData {

private Integer age;

private Boolean gender;

public Integer getAge() {
return age;
}

public void setAge(Integer age) {
this.age = age;
}

public boolean isGender() {
return gender;
}

public void setGender(boolean gender) {
this.gender = gender;
}
}

Чтобы эти объекты были распознаны во время выполнения в конструкторе отчетов, вам нужно установить путь к классу в ссылках дизайнера отчетов в eclispe на путь к классу созданных классов Java. Для этого вы можете добавить классы через окно настроек в Eclipse. Перейдите в: «Настройки» -> «Дизайн отчета» -> «Путь к классам», а затем выберите папку проекта Java (по умолчанию — папку bin), в которой создаются файлы классов.

Скриптовый источник данных

Для такого подхода необходим первый источник псевдоданных. В файле дизайна отчета мы определяем источник данных со сценарием со следующим содержимым сценария в open и close.

Открытый — метод

dummyObject = new Object();

Close — метод

dummyObject = null;

Набор сценариев данных

После определения источника данных нам нужно создать набор данных со сценариями. Структура набора данных должна быть почти такой же, как и структура pojo, потому что данные будут «скопированы» 1: 1 из объекта Java в набор данных BIRT. Для этого случая набор данных scriptd будет иметь следующую структуру:

  1. FirstName — String
  2. LastName — Строка
  3. Возраст — целое число
  4. Пол -булево
  5. OtherPersonData — объект Java

Следующее содержимое должно быть добавлено в метод open, fetch и close из скриптового набора данных.

Открытый — метод

Здесь нам нужно объявить пакет, из которого происходят классы pojo и list, с использованием JacaScript, похожего на синтаксис Rhino. После этого мы создаем в Rhino ссылку на объект Java.

importPackage(Packages.name.stojanok.dzone.scripteddataset);
var myDataSet = new PersonDataSet();
var myData = myDataSet.getList();
myIterator = myData.iterator();

Выборка — метод

В этом методе выполняется итерация по списку, когда данные копируются из объекта Java в набор данных.

if(myIterator.hasNext()){
var node = myIterator.next();
row["FirstName"] = node.getFirstName();
row["LastName"] = node.getLastName();
row["Age"] = node.getOtherPersonData().getAge();
row["Gender"] = node.getOtherPersonData().isGender();
row["OtherPersonData"] = node.getOtherPersonData();
return true;
} else return false;

Close — метод

 Здесь открытые ссылки установлены на ноль.

myDataSet = null;
myArrayList = null;
myIterator = null;
node = null;

Таким образом, данные передаются в набор данных BIRT и готовы для привязки к элементам отчета BIRT, таким как Таблица и Список.

Используя набор данных в текстовом элементе отчета как часть таблицы или списка, содержимое может выглядеть следующим образом:

<VALUE-OF>row["FirstName"]</VALUE-OF>
<VALUE-OF>row["LastName"]</VALUE-OF>
<VALUE-OF>row["Age"]</VALUE-OF>
<VALUE-OF>if (row["Gender"]) {"male"} else {"female"}</VALUE-OF>
<VALUE-OF>row["OtherPersonData"]</VALUE-OF><BR>
<VALUE-OF>row["OtherPersonData"].getAge()</VALUE-OF> <VALUE-OF>row["OtherPersonData"].isGender()</VALUE-OF>

Проблемы при создании этой статьи

Пока я писал эту статью и создавал для нее пример сценариев набора данных, я столкнулся с некоторыми проблемами. Средство рендеринга BIRT не нашло файлы классов Java, которые были заданы в пути к классам. После некоторых экспериментов со старыми версиями BIRT я увидел, что классы Java, компилируемые с Java 1.7, не могут быть распознаны из BIRT. Вот почему рекомендуется компилировать классы с Java 1.6.

Внешние ссылки

Поиск в Интернете со словами «Java-объект BIRT» позволяет найти другие статьи и руководства, в которых используется набор данных сценариев. Некоторые из них:

  • Страница Ларса Фогеля о BIRT и объектах Java [ref] — это статья, в которой диаграмма BIRT связана со сценарием источника данных.
  • eclispe BIRT Tutorial как видео. — объяснение [ссылка] — Одна из ссылок на этой странице ведет к видео, где описан источник данных в сценарии. В этом уроке файлы классов Java добавляются в одну из папок плагина.
  • Блог Ярагаллы: Использование источника данных POJO в BIRT 4.3 [ref] [ref] — Источник сценариев в BIRT 4.3.
  • Тип данных объекта Java BIRT [ref] — Учебное пособие из блога BIRT World.

Резюме

В новейшей версии BIRT вы можете связать Java-объект через графический интерфейс в конструкторе отчетов BIRT. Я до сих пор не тестировал этот способ привязки Java-объектов. После BIRT 2.5.1 я использовал подход, описанный здесь в этой статье. Я надеюсь, что новейшая версия связывания будет более элегантной, что означает, что она не требует особых сценариев.

GitHub

Источники для этого примера можно проверить по адресу : https://github.com/kstojanovski/birt . Используйте папку Script и создайте отчет PDF scripteddataset.rptdesign из папки отчета . Перед этим установите classpath, как описано в этой статье.