Bonjour,
Je souhaite réaliser un rapport en utilisant l'API BiRT Script pour des raisons de maintenance.
Je ne comprend pas très bien comment effectuer la connexion et exploiter les données, par la suite dans le fetch de ma classe héritant de ScriptedDataSetEventAdapter.
Voici ma classe qui s'applique sur le Event Handler du rapport :
Et celle ou s'effectue l'insertion dans les colonnes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 public class ReportEH extends ReportEventAdapter { public MainReport mrpt; //Classe perso qui définit toutes les données public void initialize(IReportContext reportContext) { } public void beforeFactory(IReportDesign report, IReportContext reportContext) { // TODO Auto-generated method stub this.mrpt = new MainReport(); String contract = reportContext.getParameterDisplayText("contrat"); String debut = reportContext.getParameterDisplayText("dateDebut"); String fin = reportContext.getParameterDisplayText("dateFin"); //Connexion JDBC + instanciation d'objets me permettant de garder les données try { mrpt.loadExternalData("D:\\FICHIERS\\scripts\\file.csv"); mrpt.loadData(contract, debut, fin); } catch (IOException e) { e.printStackTrace(); } reportContext.setGlobalVariable("mrpt", mrpt); super.beforeFactory(report, reportContext); } }
Voici juste une simple utilisation, sauf que mon DataSet est vide et je souhaite l'alimenter avec mes données récupérées dans le loadData.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 public class LoadDataEH extends ScriptedDataSetEventAdapter { final static String PKEY = "pkey"; final static String CREATED = "created"; final static Date CREATED_TYPE = new Date(); final static String ISSUESTATUS = "issuestatus"; public static MainReport myReport; public void beforeOpen(IDataSetInstance dataSet, IReportContext reportContext) { this.myReport = (MainReport) reportContext.getGlobalVariable("mrpt"); super.beforeOpen(dataSet, reportContext); } public boolean describe(IDataSetInstance dataSet, IScriptedDataSetMetaData metaData) { metaData.addColumn(PKEY, PKEY.getClass()); metaData.addColumn(ISSUESTATUS, ISSUESTATUS.getClass()); metaData.addColumn(CREATED, CREATED_TYPE.getClass()); return super.describe(dataSet, metaData); } public boolean fetch(IDataSetInstance dataSet, IUpdatableDataSetRow row) { try { row.setColumnValue(PKEY, ((Project)myReport.getProjects().get(0)).getPname() ); } catch (ScriptException e) { e.printStackTrace(); } return super.fetch(dataSet, row); } }
J'ai me semble t il un problème de conception de mes classes, car je ne vois pas très bien comment m'y prendre. Bien entendu, j'ai correctement fait les liens avec les Event Handler de chacun des éléments concernés, dans le designer.
J'ai également une autre question, est il possible d'utiliser une classe héritant de ScriptedDataSetEventAdapter sur un DataSet de type JDBC Connection ? Car j'ai cru comprendre que seul les classes héritant de ScriptedDataSetEventAdapter permettent de modifier les ligne notamment avec une instance de IUpdatableDataSetRow.
Merci pour vos futures réponses.
Partager