Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > BIRT
BIRT Forum d'entraide sur BIRT (Business Intelligence and Reporting Tools). Avant de poster --> FAQ BIRT,Tutoriels BIRT
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 31/10/2011, 16h59   #1
Invité de passage
 
Homme
Inscription : octobre 2011
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : octobre 2011
Messages : 6
Points : 1
Points : 1
Par défaut Passage de variable globale d'une Cross Tab à une autre

Dans le script d'un champ Data, j'initialise une var globale:
reportContext.setPersistentGlobalVariable("Cumul_Evol", data["NB_Group1/Year_Group/ID_ORIGINE"].toString());

Et je la récupère dans une Cross tab avec un getPersistentGlobalVariable.

Seul bémol, ma Cross Tab appelant cette var globale est affichée avant la Cross Tab l'initialisant .

Une valeur est bien remontée par la var globale mais elle n'est pas juste.

Est ce que l'execution du report me permet d'exploiter cette var globale dans une cross tab affichée avant la cross tab l'initialisant ?

merci
cfirst est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/10/2011, 17h46   #2
Membre confirmé
 
Homme
Consultant en Business Intelligence
Inscription : mai 2009
Messages : 186
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : mai 2009
Messages : 186
Points : 289
Points : 289
Salut,

La réponse est à priori non, mais puisque tu utilises une variable persistante tu devrais pouvoir résoudre ce problème en créant le script du setPersistent dans l'évènement "onCreate" du champs data pour le crosstab d'init, et le getPersistent dans l'évènement "onRender" pour l'autre crosstab. En revanche tous les éventuels autres scripts utilisant la var globale du crosstab "onRender" devront du coup être également positionnés sur l'évènement onRender.

Bon courage A+
donino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2011, 08h22   #3
Invité de passage
 
Homme
Inscription : octobre 2011
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : octobre 2011
Messages : 6
Points : 1
Points : 1
Merci pour l'information.
Par contre, pour afficher la valeur portée par la variable globale, je passe par un champ data dont l'expression est la suivante:

res = ""

if (reportContext.getPersistentGlobalVariable("Cumul_Evol") != null )
{
res = reportContext.getPersistentGlobalVariable("Cumul_Evol");
}


Par ce bais, je ne peux pas intercepter l'évènement OnRender.
Dois-je passer le getPersistent dans le script du champ data ? Et ensuite, comment l'afficher dans le champ data?

merci
cfirst est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2011, 09h06   #4
Membre confirmé
 
Homme
Consultant en Business Intelligence
Inscription : mai 2009
Messages : 186
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : mai 2009
Messages : 186
Points : 289
Points : 289
Salut,

en effet il faut appliquer dans le script du champs data, en sélectionnant l'évènement onRender:

Code :
1
2
3
if (reportContext.getPersistentGlobalVariable("Cumul_Evol") != null ){
  this.setDisplayValue(reportContext.getPersistentGlobalVariable("Cumul_Evol"));
}
Ne touche rien au crosstab d'init et cela devrait fonctionner.

C'est une solution simple et rapide mais (et oui il y a toujours un "mais" ), si tu comptes transformer par la suite ce crosstab en graphe, posera quelques soucis (le graphe ne prendra pas en compte ce qui est fait dans onRender) . Si c'est le cas, je t'aiguille sur la solution numéro 2, malheureusement bien moins élégante: copier / coller du crossTab d'init juste avant le premier crosstab, et tu le caches (option "Visibility").

Tiens nous au courant A+
donino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2011, 17h34   #5
Invité de passage
 
Homme
Inscription : octobre 2011
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : octobre 2011
Messages : 6
Points : 1
Points : 1
mais dans ce cas je dois mettre quoi dans l'expression du data ?
Est ce que je peux mettre 0 car une valeur est obligatoire.
cfirst est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2011, 17h37   #6
Invité de passage
 
Homme
Inscription : octobre 2011
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : octobre 2011
Messages : 6
Points : 1
Points : 1
Apres avoir testé ta méthode, je me rends compte que dans ma crosstab exploitant la var globale, je remonte à chaque fois la valeur de la cross tab précédente.

Ce qui peut paraitre logique étant donné que l'initialisation de la var globale se fait après son affichage.

Du coup, pas d'autre solution que de copier/coller la crosstab et de l’exécuter avant en masquée!
cfirst est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2011, 20h40   #7
Membre confirmé
 
Homme
Consultant en Business Intelligence
Inscription : mai 2009
Messages : 186
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : mai 2009
Messages : 186
Points : 289
Points : 289
Citation:
Envoyé par cfirst Voir le message
Apres avoir testé ta méthode, je me rends compte que dans ma crosstab exploitant la var globale, je remonte à chaque fois la valeur de la cross tab précédente.
Bah oui, je croyais d'après ton script que c'était précisément ce que tu souhaitais Si le deuxième crosstab doit poursuivre un cumul évolutif, il faut continuer d'affecter ta var globale, avec un truc du genre (hors tests de valeur null):

Code :
1
2
3
4
var cumulprec = reportContext.getPersistentGlobalVariable("Cumul_Evol");
var newcumul = this.value + cumulprec; 
this.setDisplayValue(newcumul);
reportContext.setPersistentGlobalVariable("Cumul_Evol", newcumul );
Mais si tu as dupliqué et que cela fonctionne comme tu le souhaites c'est le principal pas la peine de se compliquer la vie

A+
donino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/11/2011, 09h29   #8
Invité de passage
 
Homme
Inscription : octobre 2011
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : octobre 2011
Messages : 6
Points : 1
Points : 1
oui la solution la plus simple est la duplication.
Mais pas très économe niveau ressource

Merci donino et a bientôt (j'en suis sûr)
cfirst est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h16.


 
 
 
 
Partenaires

Hébergement Web