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 :

Chargement code JS quand plusieurs pages


Sujet :

BIRT

  1. #1
    Membre à l'essai
    Femme Profil pro
    Ingénieur Info. Décisionnel
    Inscrit en
    Mars 2011
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 29
    Points : 19
    Points
    19
    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 : 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
     
    <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 : 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
     
    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.

  2. #2
    Membre éclairé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2009
    Messages
    529
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2009
    Messages : 529
    Points : 836
    Points
    836
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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+

  3. #3
    Membre à l'essai
    Femme Profil pro
    Ingénieur Info. Décisionnel
    Inscrit en
    Mars 2011
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 29
    Points : 19
    Points
    19
    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.

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

Discussions similaires

  1. [XL-2003] Vb auto récupération de valeur dans le code source de plusieurs pages web
    Par Supremereboot dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 20/04/2011, 12h36
  2. Un code source sur plusieurs pages (listings?)
    Par poppels dans le forum Mise en forme
    Réponses: 4
    Dernier message: 02/03/2010, 21h23
  3. [VBA-E et Pdf] Inserer par code un fichier pdf2 de plusieurs pages
    Par EvaristeGaloisBis dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 11/07/2008, 14h34
  4. [TP7] Une ou plusieurs pages de codes CON non valide
    Par ussef dans le forum Turbo Pascal
    Réponses: 14
    Dernier message: 13/03/2008, 21h54
  5. Partager du code Javascript entre plusieurs pages HTML
    Par oceane751 dans le forum Général JavaScript
    Réponses: 29
    Dernier message: 10/01/2006, 15h20

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