В этой статье представлено использование набора данных из сценария в 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 будет иметь следующую структуру:
- FirstName — String
- LastName — Строка
- Возраст — целое число
- Пол -булево
- 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, как описано в этой статье.