IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

BIRT Discussion :

[2.5.1] Grid dynamique dans un rapport


Sujet :

BIRT

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 93
    Points : 37
    Points
    37
    Par défaut [2.5.1] Grid dynamique dans un rapport
    Bonjour,

    J'ai des rapports avec un grid en tant que rappel des paramètres passées L'idée était de factoriser cette grid de façon à ce qu'on la fasse qu'une fois, nous avon donc utiliser un template. J'aimerais maintenant pouvoir créer de façon dynamique cette grid.
    -Puis je créer un script dans le initialize pour créer dynamiquement la grid?
    -Ou bien puis je utiliser une classe java que j'associerai avec un élément du rapport dans laquelle je crée un tableau dynamique bien ordonné, rangé etc...?

    Merci,
    Bonne journée

  2. #2
    BiM
    BiM est déconnecté
    Expert éminent sénior
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Points : 10 765
    Points
    10 765
    Par défaut
    Bonjour,

    Ol faudrait peut-être essayer de voir si params.length ou params.size() existe.

    Tu peux créer une liste dans le initialize :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    maListe = new java.util.ArrayList();
    maListe.add(params[0].value); // Je crois que ça fonctionne avec un chiffre (à essayer aussi)
    Je crois que pour un ScriptedDataSet, il n'est pas trop tard de la lire après initialisation (on verra ce morceau après). Sinon on aura d'autres solutions (pas forcément simples mais efficaces).

    Autres petites choses à tenter, l'accessibilité au nom d'un paramètre : params[0].name peut être ou .displayName ou .text.

    Et dans quelle version es-tu ?

    On est bien d'accord que le tableau est intégré à un template et non à une librairie ?

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 93
    Points : 37
    Points
    37
    Par défaut
    Version 2.5.1

    Oui le grid est bien intégré à un template.
    Et bien en fait nous avons simplifiée la chose en créent des paramètres "concatLabel" et "concatDisplayedValue" que nous "spliton" dans un tableau, ce tableau nous le parsons en faisant une boucle, puis on recupère les valeurs de chaque label, displayedValue...bref juste une petite précision pour qu'on soit d'accord!

    je ne comprends pas comment utiliser ce arrayList(). Comment l'afficher ensuite dans le rapport?

    EDIT: pour info, j'utilise une servlet pour appeler mon rapport. Peut être pouvons nous passer par là?

  4. #4
    BiM
    BiM est déconnecté
    Expert éminent sénior
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Points : 10 765
    Points
    10 765
    Par défaut
    J'ai une idée !

    Tu suis ceci : http://business-intelligence.develop...n_donnees_java

    A savoir, que ta liste, au lieu de la récupérer dans un paramètre, tu la récupères comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    parametres = reportContext.getDesignHandle().getParameters();
    Si tu fais .getContents(), tu obtiens un objet de type List et si tu utilises .iterator(), tu obtiens un itérateur.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 93
    Points : 37
    Points
    37
    Par défaut
    http://www.vogella.de/articles/EclipseBIRT/article.html

    J'ai aussi parcouru ce lien et ca m'a l'air pas mal. Bon je vais parcourir pendant le week-end ces deux liens puis mettre en pratique dès lundi. :=)

    Merci, je te tiens au courant

  6. #6
    BiM
    BiM est déconnecté
    Expert éminent sénior
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Points : 10 765
    Points
    10 765
    Par défaut
    Bonjour,

    Je pense que dans le cas du lien que tu as cité, tu risques d'avoir quelques difficultés à récupérer la liste des paramètres, mais ça peut se tenter.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 93
    Points : 37
    Points
    37
    Par défaut
    Bonjour,

    J'ai réussi en suivant ton premier lien à faire quelque chose de propre.
    J'essaie maintenant mon lien pour éviter de stocker trop de script dans birt. J'ai donc fait une classe java dans un package Model, qui aura le getter et le setter de mon objet. J'ai ensuite crée une classe java dans un package paramList, pour stocker mes objets dans un arrayList().

    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
    package stockParamList;
     
    import Model.stockParams;
    import java.util.ArrayList;
    import java.util.List;
     
     
    public class stockParamList {
     
    	public void setStockParamList(String label, String displayedValue, int sizeOfParam){
     
    		List<stockParams> response = new ArrayList<stockParams>();
    		for (int i = 0; i <= sizeOfParam ; i++){
    			stockParams data = new stockParams();
    			data.setLabel(label);
    			data.setDisplayedValue(displayedValue);
    			response.add(data);
    		}
     
    	}
     
    }
    J'utilise ensuite cette méthode ( setStockParamList () ) dans ma servlet qui lance le rapport et qui envoie les données necessaires. Seulement comme tu m'as dit, "tu risques d'avoir quelques difficultés à récupérer la liste des paramètres", je ne voie pas pour l'instant comment recupérer cette liste.

    J'ai pense au eventHandlerClass mais je ne sais pas trop. Il faudrait reussir à faire le lien entre la servlet et birt pour cette List de paramètres.

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 93
    Points : 37
    Points
    37
    Par défaut
    Je viens de voir dans préférences "ressources". Peut être y-a t'il moyen de faire pointer toute la servlet dessus...

  9. #9
    BiM
    BiM est déconnecté
    Expert éminent sénior
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Points : 10 765
    Points
    10 765
    Par défaut
    Perso, j'ai réussi à récupérer la liste des paramètres dans le initialize ou dans le open du DataSet (ca marche aussi) du rapport avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    parametres = reportContext.getDesignHandle().getAllParameters();
    Et la taille de cette liste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    taille = parametres.size();
    Et récupérer le contenu n'importe où dans le rapport avec ceci ou dans le onFetch du DataSet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    parametre = parametres.get(0); // Récupération du premier paramètre
    paraName = parametre.getName(); // Nom du paramètre
    paramDisplayText = reportContext.getParameterDisplayText(nom); // Retourne la valeur (???) du paramètre
    paramValue = reportContext.getParameterValue(nom); // Retourne la valeur (???) du paramètre
    Plus qu'à adapter ça côté Java

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 93
    Points : 37
    Points
    37
    Par défaut
    Merci!

    Mais je ne voie toujours pas comment envoyer à birt depuis la servlet la List. Car il faut savoir que les classes List et Model sont dans le projet java, dans src...
    Si je prends l'exemple des paramètres, pour les envoyer au rapport je fais:
    design.getDesignHandle().getModuleHandle().findParameter("titre").setProperty("defaultValue", "value"). Existe t'il pas un moyen de ce type pour envoyer cette list à birt?

    EDIT:
    J'ai peut être trouvé: J'utilise la methode design.getdesignHandme().getModuleHandle.findDataSet(name);
    Et on doit pouvoir lui ajouter les valeurs que l'on veut.
    N'y aurait il pas un site qui référence toutes les méthodes et classes de l'api birt?

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 93
    Points : 37
    Points
    37
    Par défaut
    Bon finalement, on ne peut pas avec cette methode!

    Sinon j'ai ScriptedDataSetEventAdapter et IUpdatableDataSetRow dont le dernier peut être utilisé pour modifier les valeurs des colonnes...Mais je ne sais pas comment recupérer un objet de ce type depuis un moduleHandle...
    L'api birt est quand même compliquée

  12. #12
    BiM
    BiM est déconnecté
    Expert éminent sénior
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Points : 10 765
    Points
    10 765
    Par défaut
    Caste le ModuleHandle en DesignHandle

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 93
    Points : 37
    Points
    37
    Par défaut
    On peut recuperer un objet existant (notre dataset du rapport) et le transformer en IUpdatableDataSetRow? je reste perplexe la

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 93
    Points : 37
    Points
    37
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    MyScriptedDataSetEventAdapter my_scriptedDataset = new MyScriptedDataSetEventAdapter();
     
    							IDataSetInstance myDataSetInstance = (IDataSetInstance) moduleHandle.findDataSet("Data Set1");
    							IUpdatableDataSetRow myUpdatableDataSetRow = (IUpdatableDataSetRow) myDataSetInstance.getColumnMetaData();
    							my_scriptedDataset.fetch(myDataSetInstance, myUpdatableDataSetRow, "mon label");
    J'ai enfin reussi à pondre quelque chose, mais ca ne marche pas (me voilà plus avancé). Tu ne verrais pas où ca peut planter?

  15. #15
    BiM
    BiM est déconnecté
    Expert éminent sénior
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Points : 10 765
    Points
    10 765
    Par défaut
    Tu tiens vraiment à passer par du code Java ?

    Parce que j'ai bien une autre solution :
    • Tu crées un ScriptedDataSet avec deux colonnes : nom et valeur.
    • Dans le open :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      parametres = reportContext.getDesignHandle().getAllParameters();
      taille = 0;
      if (parametres != null)
         taille = parametres.size();
      enCours = 0;
    • Dans le fetch :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      if (enCours >= taille)
      	return false;
       
      var parametre = parametres.get(enCours);
      row["nom"] = parametre.getName();
      row["valeur"] = reportContext.getParameterValue(row["nom"]);
       
      enCours++;
      return true;
    • Dans ta page, tu glisses et déposes le DataSet en question.
    • Tu testes.

  16. #16
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 93
    Points : 37
    Points
    37
    Par défaut
    Oui ma première solution était celle ci, j'ai testé et ca marche niquel

    Mais oui je tiens à passer par du code java

  17. #17
    BiM
    BiM est déconnecté
    Expert éminent sénior
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Points : 10 765
    Points
    10 765
    Par défaut
    Il faut donc procéder en deux étapes :
    1. Transcrire les événements en Java dans un EventHandler
    2. Relier le DataSet au Handler


    Etape 1
    Code Java : 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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    import java.util.List;
     
    import org.eclipse.birt.core.exception.BirtException;
    import org.eclipse.birt.report.engine.api.IParameterDefnBase;
    import org.eclipse.birt.report.engine.api.script.IReportContext;
    import org.eclipse.birt.report.engine.api.script.IUpdatableDataSetRow;
    import org.eclipse.birt.report.engine.api.script.ScriptException;
    import org.eclipse.birt.report.engine.api.script.eventadapter.ScriptedDataSetEventAdapter;
    import org.eclipse.birt.report.engine.api.script.instance.IDataSetInstance;
     
     
    public class MonDataSetHandler extends ScriptedDataSetEventAdapter {
    	private IReportContext contexte = null;
    	private List parametres = null;
    	private int taille = 0;
    	private int enCours = 0;
     
    	public MonDataSetHandler(IReportContext contexte) {	
    		this.contexte = contexte;
     
    		if (contexte != null) {
    			parametres = contexte.getDesignHandle().getAllParameters();
     
    			if (parametres != null) {
    				taille = parametres.size();
    			}
    		}
    	}
     
    	public void open(IDataSetInstance dataSet) {
    		enCours = 0;
    	}
     
    	public boolean fetch(IDataSetInstance dataSet, IUpdatableDataSetRow row) {
    		if (enCours >= taille) {
    			return false;
    		}
     
    		IParameterDefnBase parametre = (IParameterDefnBase)parametres.get(0);
     
    		String nom = parametre.getName();
     
    		try {
    			row.setColumnValue("nom", nom);
    			row.setColumnValue("valeur", contexte.getParameterValue(nom));
    		} catch (ScriptException e) {
    			e.printStackTrace();
    		}
     
    		enCours++;
    		return true;
    	}
    }

    Etape 2
    Je cherche encore

    PS : Rien n'a été testé mais ça compile

  18. #18
    BiM
    BiM est déconnecté
    Expert éminent sénior
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Points : 10 765
    Points
    10 765
    Par défaut
    Pour l'étape 2, ça doit être quelquechose comme ceci :
    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    IReportRunnable design = engine.openReportDesign("C:\\monEtat.rptdesign");
    ReportDesignHandle report = (ReportDesignHandle)design.getDesignHandle();
    ScriptDataSetHandle dataSet = (ScriptDataSetHandle)report.findDataSet("MonDataSet");
    dataSet.setEventHandlerClass("MonDataSetHandler");

  19. #19
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 93
    Points : 37
    Points
    37
    Par défaut
    J'ai essayé avec ton code, ca ne marche pas. Enfin cette fois je n'ai plus de problème de cast, donc logiquement le code est bien. J'ai bien utilisé un scripted dataSet pourtant! Logiquement le

    dataSet.setEventHandlerClass("monDataSetHandle");

    devrait relier au dataSet l' eventHandler correspondant...mais le tableau ne se remplie pas.

  20. #20
    BiM
    BiM est déconnecté
    Expert éminent sénior
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Points : 10 765
    Points
    10 765
    Par défaut
    Tu peux rajouter des traces dans ton appli ?

    Comme dataSet.getOpen() par exemple ? Voir ce qu'il te donne...

    EDIT : Attention à bien mettre nom.du.package.complet.NomClasse dans le setEventHandlerClass(...)

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. [2008R2] Changement d'image dynamique dans le rapport
    Par enamorada dans le forum SSRS
    Réponses: 1
    Dernier message: 05/09/2012, 09h30
  2. Report dynamique de colonnes dans un rapport
    Par Ykk_Jeff dans le forum BIRT
    Réponses: 21
    Dernier message: 14/08/2010, 15h19
  3. [Dojo] Afficher des champs dynamiques dans un grid
    Par DevBetty dans le forum Bibliothèques & Frameworks
    Réponses: 2
    Dernier message: 27/10/2009, 10h50
  4. centrer ma grid dans le rapport
    Par skunkies dans le forum BIRT
    Réponses: 7
    Dernier message: 15/06/2009, 00h03
  5. Afficher une image dynamique dans un rapport
    Par Foub dans le forum BIRT
    Réponses: 5
    Dernier message: 01/07/2008, 22h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo