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 :

[Debutant] Afficher les colonnes horizontalement


Sujet :

BIRT

  1. #1
    Futur Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 10
    Points : 7
    Points
    7
    Par défaut [Debutant] Afficher les colonnes horizontalement
    Bonjour,

    Je suis débutant avec Birt et je suis en train de créer un rapport sur les charges de travail d'employés pour un projet.

    Pour info, voir l'image jointe.

    Le problème est que je ne vois pas comment aligner horizontalement les données
    (qui dépendent des semaines en colonne et des employés en rangée).

    Quelqu'un a-t-il déjà fait quelque chose de similaire?

    merci d'avance.
    Images attachées Images attachées  

  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

  3. #3
    Futur Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    J'ai été voir sur le site de BIRT. Il y a bien une cross data table, mais mon problème est que je veux que le nombre de mes colonnes soit lui aussi dynamique.


    J'ai pas l'impression que ce soit possible...
    Mais je suis ouvert à toutes proprosition.

  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
    Le problème du nombre de colonnes dynamiques c'est qu'il y a bien un moment où il n'y aura plus de place sur ta page... Il n'y a pas encore de solution de retour à la ligne automatique au bout de X colonnes. Cependant j'avais remédié à ce problème.

    http://www.developpez.net/forums/sho...d.php?t=176415

    Le bug a été résolu depuis.

  5. #5
    Futur Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    Ok merci, BiM.

    Ta solution est déjà pas mal intéressante.

    Comme c'est un report assez lourd on je vais réfléchir comment séparer les colonnes.

    J'avais une autre colle pour toi :

    J'en ai un peu marre des requêtes SQL extrêmement lourde et pénible et donc j'essaye d'utiliser plûtôt un scriptableDataSet.

    Le truc c'est que partout je vois des examples avec des collection déjà écrite dans les classes, mais j'aimerais savoir s'il est plutôt possible d'utiliser la méthode
    addScriptableJavaObject("monObjetString", monObjet);
    depuis la servlet que j'employe.

    je vais faire quelques essais mais comme je sais pas trop comment récupèrer ça depuis le rptdesign de Birt



    -----------------------------------
    Sinon si quelqu'un savoir comment intègrer Birt avec des pages jsp, je peux aider.

  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
    Beh je n'utilise que des ScriptedDataSet, tu es tombé sur la bonne personne. Et si tu regardes bien dans tous mes exemples je passe les objets en paramètres, desfois ce sont des java.util.List (ou dérivés) d'objets quelconques dont j'utilise les méthodes pour extraire les données. De temps en temps ce sont de simples tableaux.

  7. #7
    Futur Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par BiM
    Beh je n'utilise que des ScriptedDataSet, tu es tombé sur la bonne personne.
    Je ne trouve pas les exemples ou tu utilise des objets depuis un objet.

    en fait je voudrais avoir des objets ou des listes comme tu le dis que je crée depuis mon application et que j'envoie tout simplement sur Birt
    addscriptablejavaobject

    les envoyer ca va,
    mais les récupérer???

  8. #8
    Futur Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par thesailingcat
    Je ne trouve pas les exemples ou tu utilise des objets depuis un objet.
    Je voulais dire des dataset depuis des objets instanciés.

    merci

  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
    Citation Envoyé par BiM
    Salut !

    Personnellement j'ai résolu le problème principal de lenteur qui est en effet dû au démarrage du serveur. Il faudrait que tu crées un singleton qui isole le moteur (engine) :
    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
    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
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    import java.util.ArrayList;
    import java.util.Locale;
     
    import org.eclipse.birt.report.engine.api.EngineConfig;
    import org.eclipse.birt.report.engine.api.EngineException;
    import org.eclipse.birt.report.engine.api.IReportRunnable;
    import org.eclipse.birt.report.engine.api.IRunAndRenderTask;
    import org.eclipse.birt.report.engine.api.RenderOptionBase;
    import org.eclipse.birt.report.engine.api.ReportEngine;
     
    public class EditionPDF {
     
    	private static EditionPDF m_Instance = null;
    	private ReportEngine engine;
    	private String realPath;
    	private RenderOptionBase option;
    	private String etat;
    	private String chemin;
    	private ArrayList parametres;
     
    	private EditionPDF()
    	{
    		EngineConfig config = new EngineConfig();
    		realPath = "C:/Jakarta/webapps/TestBIRT/";
    		config.setResourcePath(realPath+"/WEB-INF/classes/ressources/");
    		config.setEngineHome(realPath+"/WEB-INF/ReportEngine");	//endroit où se trouvent les librairies du Runtime
    		engine = new ReportEngine(config);		//engine permet de connaitre et de modifie le fichier .rptdesign
    		option = new RenderOptionBase();
    		option.setOutputFormat(RenderOptionBase.OUTPUT_FORMAT_PDF);	//Format du fichier de sortie
    	}
     
    	public static EditionPDF getInstance()
    	{
    		if (m_Instance == null)
    			m_Instance = new EditionPDF();
    		return m_Instance;
    	}
     
    	public void init(String etat, String chemin, ArrayList parametres)
    	{
    		this.etat = etat;
    		this.chemin = chemin;
    		this.parametres = parametres;
    	}
     
    	public void run()
    	{
    		try
    		{
    			IReportRunnable design = engine.openReportDesign(realPath+"/WEB-INF/etats/"+etat+".rptdesign");
    			IRunAndRenderTask task = engine.createRunAndRenderTask(design);		//Crée une tâche afin d'éxécuter le rapport
    			task.setParameterValue("chemin",realPath);
    			for (int i=0;i<parametres.size();i++)
    			{
    				ParametreEditionPDF param = (ParametreEditionPDF)parametres.get(i);
    				task.setParameterValue(param.getCle(),param.getValeur());
    			}
    			task.setParameterValue("realPath", realPath);
    			/* Création PDF */
    			option.setOutputFileName(chemin);	//Nom du fichier de sortie
    			task.setRenderOption(option);		//Chargement du fichier
    			/* Fin création PDF */
    			task.run();							//Création du fichier
    		}
    		catch (EngineException e)
    		{
    			System.out.println(e.getMessage());
    		}
    	}
     
    	public void destructeur()
    	{
    		engine.destroy();
    	}
    }
    Sachant que ParametreEdition ressemble à un Bean :
    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
    public class ParametreEditionPDF {
    	private String cle;
    	private Object valeur;
     
    	public ParametreEditionPDF(String cle, Object valeur)
    	{
    		this.cle = cle;
    		this.valeur = valeur;
    	}
     
    	public String getCle() {
    		return cle;
    	}
     
    	public Object getValeur() {
    		return valeur;
    	}
    }
    La première classe te permets de créer le moteur que tu réutiliseras et de l'initialiser ainsi que de le lancer. La deuxième classe te permet de passer des paramètres à ton rptDesign de façon propre.

    Je te donne un exemple d'utilisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    List parametres = new ArrayList();
    parametres.add(new ParametreEditionPDF("personnes",lesPersonnes);
    EditionPDF edition = EditionPDF.getInstance();
    edition.init("MonRapport", "MonRapport.pdf", (ArrayList)parametres);
    edition.run();
    Ce code crée la liste des paramètres à passer au rptdesign puis récupère l'instance en cours de l'engine. Si l'instance n'est pas lancée, il le fait (donc premier lancement plus long). Ensuite, il initialise les options principales :
    - Nom du rptdesign
    - Nom du fichier de sortie
    - Liste des paramètres
    Enfin, l'édition est lancée.
    Voila un extrait de sujet récent et j'ajouterais :
    - Tu crées un ScriptedDataSource
    - Tu crées un ScriptedDataSet Personne auquel tu lies le ScriptedDataSource
    - Tu sélectionnes le DataSet Personne créé, et tu cliques sur l'onglet Script.
    - Dans la partie open, tu mets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    personnes = params["personnes"];
    nbLignes = 0;
    if (personnes != null)
    	nbLignes = personnes.size();
    ligneEnCours = 0;
    - Dans la partie fetch, tu mets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if (ligneEnCours >= nbLignes)
    	return false;
    var personne = personnes.get(ligneEnCours);
    row["NomPrenom"] = personne.getNom()+" "+personne.getPrenom();
    row["Age"] = personne.getAge();
    row["Pere"] = personne.getPere().getPrenom();
    row["Mere"] = personne.getMere().getPrenom();
    ligneEnCours++;
    return true;
    - Enfin dans la partie close tu mets :
    Remplaces mes méthode par les tiennes évidemment
    Tu peux passer autant d'objets que tu veux de cette manière.

  10. #10
    Futur Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    OK merci ca a l'air d'être ce que je veux.

    Et pour la rapidité de Birt j'avais vu qque part ca aussi mais merci de me le rappeler je l'avais pas encore faire

Discussions similaires

  1. Requête SQL : Afficher les colonnes en ligne, et vice versa
    Par paflolo dans le forum Langage SQL
    Réponses: 7
    Dernier message: 17/03/2009, 09h16
  2. Afficher les colonnes d'une table
    Par rudhf dans le forum Administration
    Réponses: 4
    Dernier message: 21/05/2007, 13h46
  3. Afficher les colonnes lors d'une extraction oracle
    Par griese dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 08/12/2006, 16h20
  4. [debutant] afficher les numéros de lignes
    Par ameliepim dans le forum MFC
    Réponses: 4
    Dernier message: 07/06/2006, 10h22
  5. [debutant]afficher les lignes?
    Par loveflower dans le forum Eclipse Java
    Réponses: 4
    Dernier message: 26/11/2005, 14h43

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