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 06/01/2012, 17h35   #1
Candidat au titre de Membre du Club
 
Femme Amandine
Ingénieur Info. Décisionnel
Inscription : mars 2011
Messages : 29
Détails du profil
Informations personnelles :
Nom : Femme Amandine
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Ingénieur Info. Décisionnel

Informations forums :
Inscription : mars 2011
Messages : 29
Points : 11
Points : 11
Par défaut Chargement code JS quand plusieurs pages

Bonjour à tous,

J'utilise actuellement un script JS qui me permet de mettre en place des évènements onclick sur les cellules d'un tableau:
1- Je donne un 'signet' à la celulle
2- Sur l'évènement 'oncreate' de la celulle, j'incrémente le signet : categ1-10
3- Mon script : for i = 1 to 10, ajouter l'évènement onclick sur la celulle identifié par categ 1-10

Jusque là, tout va bien.
Problème : mon rapport a plusieurs pages!
- Quand je fais un preview sous BIRT, tout se charge et fonctionne
- Quand j'exécute dans le navigateur, le script est sur la dernière page et ne se charge pas tant que je n'ai pas navigué jusque là. Du coup, les trois premières pages n'ont pas l'évènement onclick.

Ma question : savez-vous comment demander à BIRT de charger le script dès qu'il a finit de générer le tableau précédent?
J'ai essayé sur les évènements 'onrender', but nothing.... :-/

Code :
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
 
<script type="text/javascript" language="javascript">
 
function mo(s)
{
	if( IE ){
 		e=s.srcElement
 	}
 	else
 	{
 		e = s.target;
	}
	e.style.cursor="pointer";
}
 
function go(s)
{
 	if( IE )
 	{
 		e=s.srcElement
 	}
 	else
 	{
 		e = s.target;
 	}
 
compteur = parseInt(<VALUE-OF>pro;</VALUE-OF>);
var id_clic = e.id;		
var number=id_clic.substring(5,id_clic.length);
oChoix=document.getElementById("prod"+number);
 
	if(oChoix.style.display=="none")          
	{
		for(var j=0; j < compteur; j++)
		{ 
			if(j!=number)
			{
				document.getElementById("prod"+j).style.display="none";
			}
		}
		oChoix.style.display="block";
	}
	else
	{
		oChoix.style.display="none";
	}
 
}
La partie qui ajoute les évènements onclick :
(je mets en deux fois pour être plus claire)

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
function addscr()
{
	maxi = parseInt(<VALUE-OF>cpt;</VALUE-OF>);
	for(var i=0; i < maxi; i++)
	{ 		
		str1 = "categ" + i;
		oDiv = document.getElementById(str1); 
		if (oDiv.addEventListener) 
			{   
			oDiv.addEventListener("click",go, false);
			oDiv.addEventListener("mouseover",mo, false);
			} 
		else if (oDiv.attachEvent) 
			{ 
				IE=true;  
       			oDiv.attachEvent('onclick', go);    
       			oDiv.attachEvent('onmouseover', mo);  
			}
		oTab=document.getElementById("prod"+i);
		oTab.style.display="none";
	}
}
</script>

Ce code ne vient pas de moi, je l'ai trouvé il y a quelques mois, mais je n'ai malheureusement plus la source (merci à lui en tout cas).

J'ai vraiment besoin de votre aide, merci!
Pour info, le script js est dans un élément texte.
logicanalyse est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2012, 11h47   #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,

Ce serait un peu plus simple en connaissant ce que fait le rapport, mais d'aprés le script je crois comprendre qu'en gros il permet d'afficher/masquer une table détail à l'intérieur d'une table outer, vraisemblablement afficher la liste des produits quand on clique sur une catégorie, c'est à peu prés ça?
Il semble en manquer une petite partie, je ne vois pas où est appellée la fonction addscr().

En tout cas la solution la plus simple, et la meilleure si le rapport n'est pas trop volumineux, est de supprimer la pagination sur cette table. D'ailleurs quand on ajoute une fonctionnalité pour afficher/masquer des sections coté client, le moteur pagine sans savoir que certains éléments seront masqués, et le rendu n'est donc généralement pas très adapté.
Donc cliquer sur la table principale puis propriétés->page break->page break interval->mettre la valeur à 0. Effectuer la même manip sur les éventuelles tables détails contenues dans la table principale.

Si le rapport est volumineux, ou si tu souhaites conserver la pagination coûte que coûte:
Dans le designer il faut positionner la zone texte html contenant les scripts avant la table principale, puis en créer une autre contenant:
Code :
1
2
3
<script type="text/javascript" language="javascript">
    addscr();
</script>
Cette nouvelle zone de texte HTML doit être située à l'intérieur de la table principale, et juste en dessous de la table détail / groupe détail. Dans un pied de groupe, par exemple, et cela devrait fonctionner.
Il faut également paramétrer le groupe détail/table détail pour éviter les sauts de page (page break->inside->avoid), sinon tu retrouveras le même problème sur le dernier groupe de chaque page.

A+
donino est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 10/01/2012, 10h27   #3
Candidat au titre de Membre du Club
 
Femme Amandine
Ingénieur Info. Décisionnel
Inscription : mars 2011
Messages : 29
Détails du profil
Informations personnelles :
Nom : Femme Amandine
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Ingénieur Info. Décisionnel

Informations forums :
Inscription : mars 2011
Messages : 29
Points : 11
Points : 11
Par défaut Enigme résolue!

Bonjour Donino,

Tu as bien compris la finalité du rapport.
Et la solution donnée fonctionne à merveille : il fallait effectivement jouer sur la propriété 'page break'.

Le fait qu'il manque l'appel de la fonction dans le code que j'ai mis, est une erreur de copier-coller :-/

J'avais déjà tenté ta deuxième proposition, mais sans mettre le page break interval à 0.

Merci pour ton intervention, tu m'as permis de continuer à avancer sur mon projet.

Bien cordialement,
Amandine.
logicanalyse 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 04h28.


 
 
 
 
Partenaires

Hébergement Web