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. #41
    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
    Citation Envoyé par reportPer Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    IParameterDefnBase parametre = (IParameterDefnBase) parametres.get(_currentRow);
     
    		String nom = parametre.getName();
    C'est ca qui pète et non le beforeOpen!
    J'ai l'impression que tu n'as pas réfléchi... Si tu ne rentres pas dans le if (contexte != null), la variable parametres est nulle donc un get() ou tout autre méthode sur la variable parametres renvoie une NullPointerException (je dirais logique).

    Citation Envoyé par reportPer Voir le message
    ce qui marche: context.getParameterValue("nomduparam")
    Ceci dit, ça c'est ce que j'écris après mais le parametres.get(numero) permet de récupérer le nom avec la methode .getName() et ensuite avec ce nom (comme donné dans l'exemple) on récupère la valeur du paramètre (magie !).

    Enfin, pour finir, je ne comprends quand même pas pourquoi le contexte est nul dans le beforeOpen et ne l'ai plus dans le open Oo (grande question...). Ou alors j'ai loupé un épisode...

  2. #42
    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 disais que même avec un if (contexte != null), dans le else j'avais beau passer une valeur à une variable, celle ci n'était pas remplie, donc finalement le contexte n'était pas null.

    J'ai l'impression que tu n'as pas réfléchi... Si tu ne rentres pas dans le if (contexte != null), la variable parametres est nulle donc un get() ou tout autre méthode sur la variable parametres renvoie une NullPointerException (je dirais logique).
    Tu crois sérieusement qu'étant dans l'informatique, je ne savais pas ca...c''est la base de la base, faut pas exagérer! (sérieusement tu m'as vexé )


    Ceci dit, ça c'est ce que j'écris après mais le parametres.get(numero) permet de récupérer le nom avec la methode .getName() et ensuite avec ce nom (comme donné dans l'exemple) on récupère la valeur du paramètre (magie !).
    Ecoute Avec ces lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    IParameterDefnBase parametre = (IParameterDefnBase) parametres.get(_currentRow);
     
    		String nom = parametre.getName();
    je ne réussissais pas à afficher mes valeurs (ces lignes en commentaires, ca marche, et non en commentaire, ca marchait pas) alors peut être fallait il utiliser une autre méthode ensuite, mais je n'ai pas trouvé de méthode du genre getValue()...alors j'ai essayé une autre solution qui marche pour moi, je ne voie pas où est le problème! Fin(de plus le "magie" n'était pas nécessaire...). Et oui je viens de voir que tu me l'avais écrit, mais j'avais oublié oui!



    Ceci dit, je te remercie quand même de m'avoir aidé car je n'aurais sûrement pas trouvé tout seul!

  3. #43
    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
    Excuse moi d'avoir pu paraître impolie, ce n'était pas mon objectif.

    Bref...

    As-tu une exception générée par les lignes que tu me cites, et si oui, quel est-elle ? Ca m'intrigue.

    Question allant avec : Est-ce que la variable en question est définie dans le rptdesign ou elle est passée directement en Java sans être déclarée dans le rptdesign (ou rpttemplate ou autre) ?

  4. #44
    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
    Mhhh je pense que c'est du au fait qu'on initialise pas notre list.

    Il faut faire
    private List<E> parametres = new ArrayList<E>();
    sinon je crois que java ne comprend pas!

    Mais contexte.getDesignHandle().getAllParameters() nous renvoie un type list, mais de quoi? En général une liste est accompagnée d'un type

    Et oui le paramètre est passé dans le rptdesign d'abord!

  5. #45
    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 la liste, pas besoin de l'initialiser dans notre cas.

    A priori, l'objet le plus général (interface la plus haute) présente dans la liste c'est du IParameterDefnBase. Mais as tu une cast exception ?

  6. #46
    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
    Caused by: java.lang.ClassCastException: org.eclipse.birt.report.model.api.ParameterGroupHandle
    	at DataSetPackage.MyScriptedDataSetEventAdapter.fetch(MyScriptedDataSetEventAdapter.java:75)
    	at org.eclipse.birt.report.engine.script.internal.ScriptDataSetScriptExecutor.handleFetch(ScriptDataSetScriptExecutor.java:145)
    	... 68 more
    Oui effectivement!

  7. #47
    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
    L'erreur vient de moi, le type renvoyé est ParameterHandle ou ParameterGroupHandle tous les deux héritant de ReportElementHandle.

    Par contre, je vérifie autre chose et je re-poste.

  8. #48
    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
    Alors, voilà ce que j'ai fait...

    Regarde bien le "nouveau" fetch

    Pour le handler :
    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    import java.util.List;
     
    import org.eclipse.birt.report.engine.api.script.IReportContext;
    import org.eclipse.birt.report.engine.api.script.IScriptedDataSetMetaData;
    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;
    import org.eclipse.birt.report.model.api.ReportElementHandle;
    import org.eclipse.birt.report.model.api.ScalarParameterHandle;
     
    public class MonDataSetHandler extends ScriptedDataSetEventAdapter {
    	private final static String COLUMN_NAME = "Nom";
    	private final static String COLUMN_VALUE = "Valeur";
     
    	private IReportContext contexte = null;
    	private List<ReportElementHandle> parametres = null;
    	private int taille = 0;
    	private int enCours = 0;
     
    	@Override
    	public boolean describe(IDataSetInstance dataSet, IScriptedDataSetMetaData metaData) {
    		metaData.addColumn(COLUMN_NAME, String.class);
    		metaData.addColumn(COLUMN_VALUE, String.class);
    		return true;
    	}
     
    	@Override
    	@SuppressWarnings("unchecked")
    	public void beforeOpen(IDataSetInstance dataSet, IReportContext reportContext) {
    		contexte = reportContext;
     
    		if (contexte != null) {
    			parametres = contexte.getDesignHandle().getAllParameters();
     
    			if (parametres != null) {
    				taille = parametres.size();
    			}
    		}
    	}
     
    	@Override
    	public void open(IDataSetInstance dataSet) {
    		enCours = 0;
    	}
     
    	@Override
    	public boolean fetch(IDataSetInstance dataSet, IUpdatableDataSetRow row) throws ScriptException {
    		while (enCours < taille) {
    			ReportElementHandle parametre = parametres.get(enCours);
    			enCours++;
     
    			if (parametre instanceof ScalarParameterHandle) {
    				String nom = parametre.getName();
     
    				row.setColumnValue(COLUMN_NAME, nom);
    				row.setColumnValue(COLUMN_VALUE, contexte.getParameterValue(nom));
    				return true;
    			}
    		}
    		return false;
    	}
    }

    Ainsi, je n'affiche les noms et valeurs que des paramètres et non pas des groupes de paramètres.

    COLUMN_NAME et COLUMN_VALUE sont normalement les mêmes pour tous les rapports (tout comme le nom du DataSet d'ailleurs) mais si on les change, tu peux garder la manière dont tu les as utilisé.

    Ensuite j'ai fait comme toi pour lier le Handler au DataSet :
    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    try {
    	ReportDesignHandle report = (ReportDesignHandle)design.getDesignHandle();
    	ScriptDataSetHandle dataSet = (ScriptDataSetHandle)report.findDataSet("Parametres");
    	dataSet.setEventHandlerClass("MonDataSetHandler");
    }
    catch (Exception e) {
    	e.printStackTrace();
    }

    Et dans mon rapport, j'ai simplement un Scripted Data Set nommé Parametres qui contient deux colonnes de type String : Nom et Valeur et j'ai glisser/déposer ce tableau dans mon rapport.

    Dans Report Parameters, j'ai mes paramètres (scalaires (normaux), groupes, ou en cascade).

    Il faut que les paramètres soient déclarés dans le rapport pour être affiché. Car on peut passer des paramètres à un rapport via Java sans nécessairement les déclarer dans le rptdesign. Ces paramètres-ci ne seront alors pas affichés dans le tableau.

+ Répondre à la discussion
Cette discussion est résolue.
Page 3 sur 3 PremièrePremière 123

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