J'essaie de configurer une source de données scriptée en utilisant pojos de mon application (java 1.8). J'ai intégré un reportengine (4.4.0) dans mon application via maven et j'ai créé un rapport avec un script scénarisé. Les pojos peuvent être vus par le rapport.BIRT: la source de données scriptée ne peut pas accéder aux méthodes publiques
bookSrv = Packages.de.me.service.ReportDataService;
fonctionne.
Je peux accéder aux méthodes statiques de mon objet, mais quoi que j'essaie, l'accès aux méthodes publiques ou aux champs entraîne une exception.
Alors
books = bookSrv.books;
donne
org.mozilla.javascript.EvaluatorException: classe Java "de.me.service.ReportDataService" n'a pas de champ d'instance public méthode nommée "livres". (/ Rapport/ensembles de données/script-ensemble de données [@ id = "5"]/méthode [@ name = "ouvert"] # 11) ou
books = bookSrv.showMyBooks('Peter');
donne
org. mozilla.javascript.EvaluatorException: La classe Java "de.my.service.ReportDataService" n'a pas de champ d'instance publique ou de méthode nommée "showMyBooks". (/ Rapport/ensembles de données/script-ensemble de données [@ id = "5"]/méthode [@ name = "ouvert"] # 11)
Mais:
books = Packages.me.tdesk.service.ReportDataService.myBooksStatic('Peter');
fonctionne comme prévu . (Il suffit d'une enveloppe statique autour de ma méthode)
ici est ma classe java:
package de.me.service;
import de.me.model.dto.BookDto;
import java.util.ArrayList;
import java.util.List;
public class ReportDataService {
public ReportDataService() {
books = showMyBooks("Peter");
System.out.println("ReportDataService.init()");
}
private List<BookDto> books;
public List<BookDto> getBooks() {
return books;
}
public void setBooks(List<BookDto> books) {
this.books = books;
}
public List<BookDto> showMyBooks(String commodity){
BookDto dto = new BookDto(12l, "otto", "My", 12l);
List<BookDto> books = new ArrayList<>();
books.add(dto);
dto = new BookDto(122l, "paul", "My", 122l);
books.add(dto);
return books;
}
public static List<BookDto> myBooksStatic(String commodity){
ReportDataService rep = new ReportDataService();
return rep.showMyBooks(commodity);
}
}
Un grand merci Uli
... ou, si votre ReportDataService est un singleton, peut-être bookSrv = Packages.de.me.service.ReportDataService.getInstance()? – hvb