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 :

Formule excel, colonne sommée via l'api


Sujet :

BIRT

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 6
    Points : 6
    Points
    6
    Par défaut Formule excel, colonne sommée via l'api
    Bonjour,

    Je suis en train d'explorer un peu BIRT pour savoir si il correspond à ce que ce que voudrais faire et j'ai quelques questions auxquelles je n'ai pas encore trouvé de réponse.

    J'essaye de travailler uniquement via l'Engine API étant donné que j'aimerais maitriser cette partie afin de permettre aux clients qui voudront un rapport de le personnaliser un maximum via une interface graphique.

    Mes questions :

    Via l'API (Et donc, génération du rptdesign à la volée), je n'arrive pas a générer une colonne de total. J'ai essaye de le faire via le designer puis ensuite dans le code d'utiliser les méthodes fournies par l'API afin d'arriver a re générer dynamiquement la même structure. J'arrive à quelque chose de plus ou moins semblable, la formule de calcul se trouve dans le fichier rpt avec les informations sur les autres colonnes, mais je n'arrive pas a manipuler la case "data" qui va accueillir le résultats de la somme.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    ComputedColumn cc = StructureFactory.createComputedColumn();
    cc.setName("TotalId");
    cc.setExpression("Total.sum(row[\"ID\"])");
    cc.setDataType("float");
    computedSet.addItem(cs1);
    [...]
    RowHandle tableFooter = (RowHandle) tableHandle.getFooter().get(0);
     
    DataItemHandle data = factory.newDataItem("TotalId");
     
    data.setProperty("name", "TotalId");
    cell = (CellHandle) tableFooter.getCells().get(0);
    cell.getContent().add(data);
    Et en gros il me manque une propriété qui fait le lien entre les deux, si j'ajoute la ligne manuellement dans le fichier généré, j'ai le résultat attendu.
    Une idée de ce qu'il faudrait ajouter ?

    Deuxième question :
    Lorsque je génère un total via le designer et que j'export en excell, la valeur du total est calculée puis copiée dans la cellule adaptée. (C'est la fonction javascript Total.sum()) Est-il possible de demander à l'engine de transformer ça en formule excel ? J'ai vu dans une démo que l'outil payant le faisait, mais je ne sais pas si la fonctionnalité lui est propre.

    Merci d'avance.

  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,

    Pour la deuxième question, il me semble que la fonction lui est propre, je ne sais pas si le comportement est reproduisible.

    Pour la première question, je regarde et reposte.

  3. #3
    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
    Comme indiqué dans ce tutoriel : http://fcornolle.developpez.com/tuto...ne-api/#LV-G-7

    Il faut que tu fasses :
    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    tableHandle.getColumnBindings().addItem(cc);

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Merci pour les réponses,

    Néanmoins le tableHandle.getColumnBindings().addItem(cc) est bien la, c'est juste une erreur de ma part dans le thread ici ( j'ai renomé cc en cs1 )

    computedSet est en fait un PropertyHandle, résultat du tableHandle.getColumnBindings();

    En regardant le code généré dans les deux rptdesign j'ai ceci :

    Celui généré via le code :
    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
     
    [...]
    <structure>
         <property name="name">TotalId</property>
         <expression name="expression">Total.sum(row["ID"])</expression>
         <property name="dataType">float</property>
    </structure>
    [...]
    <footer>
          <row id="18">
                 <cell id="19">
                        <data name="TotalId" id="20" />
                  </cell>
                  <cell id="21"/>
            </row>
    </footer>
    Celui généré via le designer :
    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
     
    [...]
    <structure>
         <property name="name">Column Binding</property>
         <expression name="expression">Total.sum(row["ID"])</expression>
         <property name="dataType">float</property>
    </structure>
    [...]
    <footer>
          <row id="18">
                 <cell id="19">
                        <data name="TotalId" id="20">
                                <property name="resultSetColumn">Column Binding</property>
                         </data>
                   </cell>
                   <cell id="21"/>
            </row>
    </footer>
    J'ai donc plutôt l'impression sur la variable data qu'il faudrait travailler, mais je n'ai rien trouver de flagrant dans la javadoc

  5. #5
    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
    Au fait, les expressions de ce type sont dépréciées : Total.sum(row[\"ID\"])

    Je te conseille d'utiliser le setAggregationFunction() de ComputedColumn et le setAggregateOn() au lieu de setExpression().

Discussions similaires

  1. [XL-2007] Recherche et modification de formules excel via vba
    Par beniboy dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 21/12/2012, 11h25
  2. Réponses: 0
    Dernier message: 11/05/2010, 16h18
  3. Réponses: 8
    Dernier message: 07/03/2009, 14h02
  4. Formules excel écrites via VBA
    Par Loki83 dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 20/11/2008, 08h58
  5. Exporter via Birt API un report en EXCEL ou CSV
    Par blured dans le forum BIRT
    Réponses: 2
    Dernier message: 08/09/2008, 15h51

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