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.3.1] Modification de valeur sur une table dynamique


Sujet :

BIRT

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 14
    Points : 6
    Points
    6
    Par défaut [2.3.1] Modification de valeur sur une table dynamique
    Bonjour,

    Je suis en train de travailler sur un report français / anglais. Et je ne parviens pas à modifier le valeur de mon dataset d'entré.

    J'explique plus clairement:
    • il faut que je puisse parcourir chacune des valeurs du dataset
    • si celle-ci commence par un caractère type "$" je lui affecte la valeur
      reportContext.getMessage("datasetValue") et s'il na pas de préfixe je laisse la "dataSetValue".


    Je bloque donc sur un point principal qui est le parcours de mon dataset. Je pense qu'il faut faire cela dans l'événement fetch, mais je ne trouve pas comment parcourir les champs d'une ligne.

    Petite précision, ma table ne contient qu'une seule ligne et colonne(c'est mon moteur qui la construit). Je ne peu donc pas utiliser de mapping ni même de script sur celle-ci...

    J'espère avoir été assez clair, 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,

    Tu utilises quel type de DataSet ?

    Si je comprends bien, la valeur de ton champs ressemble à ceci : "$mavaleur" et si tu as donc le $ en première lettre, tu veux faire un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    reportContext.getMessage("mavaleur");
    Dans la plupart des cas, tu as alors deux choix :
    1. Pour garder le même nom de colonne :
      • Tu vas sur l'onglet Script de l'éditeur
      • Tu sélectionnes ton DataSet via le Outline
      • Dans la liste déroulante de l'éditeur (en haut), tu sélectionnes onFetch
      • Tu mets dans l'éditeur :
        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        1
        2
        if (row["MonChamp"].startsWith("$"))
           row["MonChamp"] = reportContext.getMessage(row["MonChamp"].substring(1));
    2. Avec un nom différent de colonne :
      • Tu doubles cliques sur ton DataSet
      • Tu vas dans Computed Column
      • Tu rajoutes une colonne avec un nom un peu différent de l'initial comme MonChamp2
      • Tu mets dans type : String
      • Et dans Expression Value :
        Code : Sélectionner tout - Visualiser dans une fenêtre à part
        1
        2
        3
        4
        if (row["MonChamp"].startsWith("$"))
           reportContext.getMessage(row["MonChamp"].substring(1));
        else
           row["MonChamp"];

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    Je pense que cela doit me suffire, je test le tout demain et je te donne mon retour.

    Merci

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    Je viens de tester la première méthode qui correspond le mieux à ce que je recherche mais je n'obtiens pas de remplacement.

    Admettons que mon dataset contienne un champ: $champ1
    et que ce champ contienne 2 ligne: $No et $Yes

    • j'ai ajouter le script

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (row["$champ1"].startsWith("$"))
       reportContext.getMessage(row["$champ1"]);
    else
       row["$champ1"];
    • et dans mon fichier properties

    Cependant toujours pas de remplacement. Aurais-je omis quelque chose? ton explication été pourtant clair...

  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
    T'as mélangé les deux méthodes

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    Hum je me suis trompé dans mon copier-coller j'ai bien ceci dans mon script:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if (row["$champ1"].startsWith("$"))
       row["$champ1"] = reportContext.getMessage(row["$champ1"]);
    Une idée?

  7. #7
    Membre expérimenté

    Profil pro
    Inscrit en
    Avril 2008
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 143
    Points : 1 353
    Points
    1 353
    Par défaut substring?
    Sauf erreur de ma part je ne vois pas de substring(1) dans ton code?

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    Exacte mais le substring(1) va aller chercher la clé No ou Yes dans le fichier properties alors que moi j'ai $No ou $Yes.

    J'ai juste besoin de faire un getMessage() avec la valeur du champ de la ligne en cours masi à priori BIRT ne veut pas...

  9. #9
    Membre expérimenté

    Profil pro
    Inscrit en
    Avril 2008
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 143
    Points : 1 353
    Points
    1 353
    Par défaut ?
    faudrait passer le no de la ligne en paramètre. Sur le onFetch le "next" est automatique comme il "parse" le Dataset ligne par ligne.

    A vérifier , c'est BiM l'expert sur ces sujets

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    J'ai pas tout compris, tu me dis que je doit mettre le substring(1) et modifier mon fichier .properties de sorte à ce que les valeurs ne contiennent pas de $.

    Parce que ça j'ai déjà essayé!

  11. #11
    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
    En fait cette solution ne fonctionne pas mais l'autre oui.

    Tu peux également utiliser l'onglet Map de ton tableau (ce n'est pas directement sur le DataSet).

  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
    Citation Envoyé par Stefan C Voir le message
    faudrait passer le no de la ligne en paramètre. Sur le onFetch le "next" est automatique comme il "parse" le Dataset ligne par ligne.

    A vérifier , c'est BiM l'expert sur ces sujets
    Hum, le onFetch se déclenche quand une ligne est sélectionnée. Cependant, apparemment, la valeur mise au moment du onFetch est écrasée ensuite

    Citation Envoyé par skinner17 Voir le message
    J'ai pas tout compris, tu me dis que je doit mettre le substring(1) et modifier mon fichier .properties de sorte à ce que les valeurs ne contiennent pas de $.

    Parce que ça j'ai déjà essayé!
    Ce n'est pas le problème

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    J'ai à nouveau un problème quand je test la deuxième méthode, avec ajout de colonne de calcul(j'ai BIRT en fr!) nommée "Test"

    et que je veut prévisualiser les résultat j'obtiens un message d'erreur qui me dit qu'il y a un problème dans le script de la colonne

    Une exception BIRT s'est produite.
    Plug-in Provider :Eclipse.org
    Plug-in Name :BIRT Data Engine
    Plug-in ID :org.eclipse.birt.data
    Version :2.3.1.v20080829
    Code d'erreur:data.engine.CompCol.FailRetrieveValueComputedColumn
    Message d'erreur:Echec du calcul de la valeur pour la colonne calculée "Test".
    Une exception BIRT est survenue : Des erreurs sont survenues lors de lévaluation du script "{0}":
    {1}.. Voir l'exception suivante pour plus d'informations.
    Des erreurs sont survenues lors de lévaluation du script "{0}":
    {1}.
    Alors que mon script est le même que le tien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (row["$champ1"].startsWith("$"))
       reportContext.getMessage(row["$champ1"]);
    else
       row["$champ1"];
    Je ne comprend

  14. #14
    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
    Met juste ça en fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    reportContext.getMessage(row["$champ1"]);

  15. #15
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    C'est en fait un problème de conversion de type voici la correction à mettre dans l'expression de la colonne de calcul:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (row["$champ1"] != null) //J'ai ajouté une vérification du null
    	if (String(row["$champ1"]).substr(0, 1) == "$") //Ça ne fonctionnait pas avec le startWith()
    		reportContext.getMessage(String(row["$champ1"]));
    	else
    		row["$Remises_RemiseCreditee_Label"];
    Mon problème est en parti résolu.

    Mais je me rend compte que j'ai mal analysé mon problème. N'y-a-t'il pas de solution pour déplacer le tout dans le script de la table au moment de l'affichage. Car je ne doit pas utilisé les colonnes calculées et la modification des valeurs dans le script du dataset ne fonctionne pas.

  16. #16
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    C'est bon j'ai trouvé. En fait j'ai déplacé la modification de la valeur dans le script onCreate de la cellule de donnée de ma table, en lui apportant quelque modification:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(this.getValue().substring(0, 1) == "$")
    	this.setDisplayValue(reportContext.getMessage(this.getValue()));
    Merci pour votre efficacité.

  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
    Citation Envoyé par skinner17 Voir le message
    C'est bon j'ai trouvé. En fait j'ai déplacé la modification de la valeur dans le script onCreate de la cellule de donnée de ma table, en lui apportant quelque modification:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(this.getValue().substring(0, 1) == "$")
    	this.setDisplayValue(reportContext.getMessage(this.getValue()));
    Merci pour votre efficacité.
    Autant utiliser le Map sur la Table directement, non ?

  18. #18
    Membre expérimenté

    Profil pro
    Inscrit en
    Avril 2008
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 143
    Points : 1 353
    Points
    1 353
    Par défaut NB
    NB : vous venez de déplacer le "problème" du tiers data vers le tiers affichage.

    Attention à la perf si vous avez un gros tableau.

    La solution sur le onFetch permettait de générer le rptdocument ( Run ) avec plus de peine mais faire l'affichage ( Render ) avec plus de rapidité. Sur cette methode, si le rptdocument est pre-généré pendant la nuit , le viewing se fait facilement le jour.

    La solution Map sur le Table est tout le contraire. A utiliser seulement si les perfs demeurent acceptables en termes de viewing.

    Enfin, vous pouvez également déporter cette opération dans le SQL afin de la pousser vers la base via du SQL / Proc Stoc.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2007] Modification de valeur d'une liste déroulante sur formulaire
    Par cocoda dans le forum IHM
    Réponses: 4
    Dernier message: 11/10/2012, 17h16
  2. Problème de NULL sur un Pivot basé sur une Table Dynamique
    Par guilld dans le forum Développement
    Réponses: 3
    Dernier message: 01/08/2011, 15h05
  3. CSS non appliquée sur une table dynamique IE8
    Par kap dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 02/04/2011, 15h42
  4. [VB6]Modification de valeurs dans une MSflexgrid
    Par Tyrael62 dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 14/02/2006, 08h48
  5. Boucler sur une table pour renommer des valeurs
    Par webwhisky dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 03/01/2006, 14h19

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