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] Utiliser un code java dans un rapport, une classe par exemple [Fait]


Sujet :

BIRT

  1. #1
    Membre chevronné
    Avatar de DelphiCool
    Homme Profil pro
    Ingénieur de production
    Inscrit en
    Mars 2002
    Messages
    187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur de production
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2002
    Messages : 187
    Points : 2 198
    Points
    2 198
    Par défaut [2.3.1] Utiliser un code java dans un rapport, une classe par exemple
    Bonjour,

    j'utilise Eclipse 3.4.1 avec le pluggin birt 2.3.1

    J'ai un report dans lequel j'aimerai utiliser une classe java que j'ai faite.

    Je ne sais pas comment faire ??

    Pourquoi je veux utiliser une classe ??

    Parce que dans mon rapport j'ai une valeur en nombre de seconde que je convertis avec ma classe en ce type de valeur : 1j 03h10

    Peu être y a t-il un moyen plus propre ?

    Voici pour information la fonction que j'utilise :
    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
    49
    50
    public String SecondsToDateLisible(long Secondes) throws JRScriptletException
    {
     
       long Jours = 0;
       long Heures = 0;
       long Minutes = 0;
     
       String sJours = "0";
       String sHeures = "0";
       String sMinutes = "0";
       String sSecondes = "0";
     
    //Résultat de moins d'une minute      
          if (Secondes < 60) {return "00:00:" + Long.toString(Secondes);} 
     
    //Si le résultat est superieur à 60 secondes    
     
    //Nombre de Jours
          Jours = Secondes / 86400; // 1 jour = 24 heures = 86400 secondes
          Secondes = Secondes - (Jours * 86400); // Pour avoir ce qui reste
     
    //Nombre d'Heures
          Heures = Secondes / 3600; // 1 heure = 3600 secondes
          Secondes = Secondes - (Heures * 3600); // Pour avoir ce qui reste
     
     
    //Nombre de Minutes
          Minutes = Secondes / 60; // 1 minute = 60 secondes
          Secondes = Secondes - (Minutes * 60); // Pour avoir ce qui reste
     
     
          sJours = "" + Jours;
          sHeures = "" + Heures;
          sMinutes = "" + Minutes;
          sSecondes = "" + Secondes;
     
     
    //On met l'heure sur 2 caractères      
          if (sHeures.length() == 1) {sHeures = "0" + sHeures;}
          if (sMinutes.length() == 1) {sMinutes = "0" + sMinutes;}
          if (sSecondes.length() == 1) {sSecondes = "0" + sSecondes;}
     
     
        if (Jours == 0) {return sHeures + ":" + sMinutes + ":" + sSecondes;} // Si le Jour est égal à 0, on ne l'affiche pas
        else
        {
        return sJours + " j " + sHeures + ":" + sMinutes + ":" + sSecondes;
        }
     
        }

  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 utiliser cette classe dans ton rapport tu as deux choix.

    Soit l'appeler avec l'ensemble du package comme ceci :
    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    var maClasse = new mon.package.MaClasse();
    (peut-être que le package doit être précédé de Packages comme ci-après)

    Soit importer le package ou la classe comme ceci puis s'en servir normalement.
    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    //Import du package
    importPackage(Packages.mon.package);
    //Ou import de la classe
    importClass(Packages.mon.package.MaClasse);

    Attention, on ne type pas les variables en Java donc quand tu instancies ta classe, ne la préfixe pas par son type (classe ou interface).

    Tu as une autre solution qui consistes à écrire ta méthode en JavaScript pour l'utiliser dans le rapport directement ou bien via une librairie (voir FAQ pour cette solution).

    PS : Une méthode en Java comment toujours par une minuscule ou à la limite un _.
    PS2 : Si tu n'as pas besoin d'instancier la classe pour ce type de méthode, je te conseille alors de mettre ta classe en static. Dans ce cas, tu n'as pas besoin d'instancier ta classe pour appeler la méthode.

  3. #3
    Membre chevronné
    Avatar de DelphiCool
    Homme Profil pro
    Ingénieur de production
    Inscrit en
    Mars 2002
    Messages
    187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur de production
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2002
    Messages : 187
    Points : 2 198
    Points
    2 198
    Par défaut
    Excusez mon ignorance :

    Je met ceci dans Script, sur le OnCreate :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    importClass(OutilsHiacine.ConvertionSecondes.SecondsToDateLisible());
    Est-ce juste ?

    Après je l'utilise comment dans mon rapport ?

    J'ai mis un texte dynamique avec ceci dedans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SecondsToDateLisible(123)
    Mais bien sur cela ne fonctionne pas

  4. #4
    Membre éprouvé
    Avatar de lazarel
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2007
    Messages
    893
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2007
    Messages : 893
    Points : 1 164
    Points
    1 164
    Par défaut
    Bonjour,


    Si la méthode de ta classe est static normalement oui.

    Sinon essaie de passer d'abord par la création de l'objet et ensuite d'utiliser la méthode de cette objet.

  5. #5
    Membre habitué
    Inscrit en
    Juillet 2008
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 189
    Points : 176
    Points
    176
    Par défaut
    Meme si je suis plutot ignorant en Java, j'aimerai donné mes petits points de vue (ne prenait pas mes remarques comme sûr, loin de là).

    Citation Envoyé par DelphiCool Voir le message
    Je met ceci dans Script, sur le OnCreate :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    importClass(OutilsHiacine.ConvertionSecondes.SecondsToDateLisible());
    De ce coté, je metterai ce code plutot dans le Initialize.
    A moins que tu n'utilises ta classe qu'à cette endroi précis ?
    Car un On Create est somme toute assez Localisé sur un élément bien précis.


    Citation Envoyé par DelphiCool Voir le message
    J'ai mis un texte dynamique avec ceci dedans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SecondsToDateLisible(123)
    Ne faut-il pas préfixer par le nom de la classe ?
    Je ne connais pas le Java, mais comment il va savoir que cette méthode fait bien parti de la classe qui t'interesses si tu ne le spécifies pas ?
    Il peut rechercher (et il le fait surement) une fonction JavaScript qui n'existe pas, Et donc ça plante.


    Voila pour mes faibles compétences sur le sujet, bon courage.


    Nb: si tu as un jar à mettre, n'oublies pas de l'ajouter dans les ressources de l'edition

  6. #6
    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
    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    importClass(OutilsHiacine.ConvertionSecondes.SecondsToDateLisible());
    Ceci n'est pas un import de classe, la classe est ConvertionSecondes.

    Tu dois donc faire l'import comme ceci et rajouter le préfixe Packages.
    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    importClass(Packages.OutilsHiacine.ConvertionSecondes);

    Pour l'appel, il faut le préfixer par le nom de la classe :
    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    ConvertionSecondes.SecondsToDateLisible(123);

    Sinon tu peux directement appeler la méthode comme ceci (sans import) :
    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    OutilsHiacine.ConvertionSecondes.SecondsToDateLisible(123);

  7. #7
    Membre averti

    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    385
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 385
    Points : 321
    Points
    321
    Par défaut
    Sinon, tu peux également utiliser un fonction javascript (dans fichier *.js par exemple) pour effectuer ce type de traitement :

    format.js :
    Code Javascript : 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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
    function formatTens(number) {
    	return (number < 10) ? ("0" + number) : ""+number;
    }
     
    /**
     * seconds : number of seconds
     * pattern :
     *   - HH = Day
     *   - MI = Minutes
     *   - SS = Seconds
     **/ 
    function formatDuration(seconds, pattern) {
    	if(pattern == null) {
    		pattern = "HH:MI:SS";
    	}
    	var formatedDuration  = pattern;
    	var leftDuration      = seconds;
     
    	// days	
    	if(pattern.indexOf("DD") >= 0) {
      		formatedDuration = formatedDuration.replace("DD", ((leftDuration >= 1440) ? Math.floor(leftDuration / 1440) : "0"));
      		leftDuration -= (Math.floor(leftDuration / 86400) * 86400);
    	}
     
    	// hours	
    	if(pattern.indexOf("HH") >= 0) {
    		formatedDuration = formatedDuration.replace("HH", ((leftDuration >= 60) ? formatTens(Math.floor(leftDuration / 60)) : "00"));
    		leftDuration -= (Math.floor(leftDuration / 3600) * 3600);
    	}
     
    	// minutes
    	if(pattern.indexOf("MI") >= 0) {
    		formatedDuration = formatedDuration.replace("MI", formatTens(parseInteger(leftDuration)));
    		leftDuration -= (Math.floor(leftDuration / 60) * 60);
    	}
     
    	// seconds
    	if(pattern.indexOf("SS") >= 0) {
    		formatedDuration = formatedDuration.replace("SS", formatTens(parseInteger(leftDuration)));
    	}
     
    	return formatedDuration;
    }
     
    function formatLucky(seconds) {
      if(seconds >= 86400) {
        formatDuration(seconds, "DD:HH:MI:SS");
      }
      else if(seconds >= 3600) {
        formatDuration(seconds, "HH:MI:SS");
      }
      else if(seconds >= 60) {
        formatDuration(seconds, "MI:SS");
      }
      else {
        formatDuration(seconds, "SS");
      }
    }

    Pour utiliser ce fichier dans ton rapport, tu ajoutes le fichier javascript (vue properties > resources > javascript files).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    formatLucky(seconds);

  8. #8
    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
    Pourquoi faire simple quand on peux faire compliqué ?

    Il existe des fonctions qui permettent de faire directement ces transformations (donc (désolé erwan) ta solution est légèrement compliquée pour pas grand chose (voir FAQ pour les affichages de date)).

    D'autre part, peut être que cette fonction doit être utilisée dans plusieurs rapports (dans ce cas, je préconise une librairie ou une méthode en Java (comme il a fait)) ou même dans une application Java (qui entoure cette partie de reporting), dans ce cas, je préconise une méthode Java.

    Voilou

  9. #9
    Membre averti

    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    385
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 385
    Points : 321
    Points
    321
    Par défaut
    BiM,

    Citation Envoyé par BiM
    Il existe des fonctions qui permettent de faire directement ces transformations (donc (désolé erwan) ta solution est légèrement compliquée pour pas grand chose (voir FAQ pour les affichages de date)).
    Je suis d'accord avec toi quand à préconiser l'utilisation de méthodes existantes. (Il ne sait à rien de réinventer la roue ).

    Citation Envoyé par BiM
    D'autre part, peut être que cette fonction doit être utilisée dans plusieurs rapports (dans ce cas, je préconise une librairie ou une méthode en Java (comme il a fait)) ou même dans une application Java (qui entoure cette partie de reporting), dans ce cas, je préconise une méthode Java.
    Sur ce point, je n'ai pas de préconisations particulières. Je trouve aussi simple d'utiliser des fichiers javascripts que l'on inclut au sein de librairies ... cela me permet d'externaliser très facilement la configuration des rapports.

    Enfin, tout ceci n'est qu'une histoire de goût

    A+

  10. #10
    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
    Le fait d'externaliser évite l'augmentation du risque d'erreur et du temps de maintenance Je parle bien du fait qu'une fonction peut être réutilisée

  11. #11
    Membre averti

    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    385
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 385
    Points : 321
    Points
    321
    Par défaut
    Une fonction peut aussi bien externalisée en java ou en javascript, surtout quand il s'agit de fonctions simples. Par contre, pour des fonctions plus complexes, il est souvent avantageux d'utiliser Java de part les API existantes.

  12. #12
    Membre chevronné
    Avatar de DelphiCool
    Homme Profil pro
    Ingénieur de production
    Inscrit en
    Mars 2002
    Messages
    187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur de production
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2002
    Messages : 187
    Points : 2 198
    Points
    2 198
    Par défaut
    Bonsoir,

    Je dois mal m'y prendre.

    J'ai créé un jar, que je met dans la racine du projet.

    Dans eclipse (onglet outline)
    Je clique sur la racine de mon projet.
    Je rajoute mon jar (à droite) (je le joint à ce message)

    ensuite je met un texte dynamique, où je met l'expression suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     OutilsHiacine.ConvertionSecondes.SecondsToDateLisible(123);
    sans import comme le dit Bim.
    Question :
    Birt gère t-il les fichier java, je veux dire : suis je obligé de générer un fichier .class ou .jar ?
    Fichiers attachés Fichiers attachés

  13. #13
    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
    As-tu toujours la même erreur ? Dans ce cas, je pense qu'il ne trouve pas ton .jar en effet.

    BIRT (comme toute autre librairie) ne peux appeler que des .class ou .jar puisque ce sont des fichiers compilés.

    D'autre part, pour appeler la méthode comme ceci, l'as-tu mise en static ? (mot clef static au moment de la définition de la méthode :
    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    public static String SecondsToDateLisible(long Secondes) throws JRScriptletException { ... }
    )

  14. #14
    Membre chevronné
    Avatar de DelphiCool
    Homme Profil pro
    Ingénieur de production
    Inscrit en
    Mars 2002
    Messages
    187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur de production
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2002
    Messages : 187
    Points : 2 198
    Points
    2 198
    Par défaut
    J'ai toujours la même erreur ci-dessous :
    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    Des erreurs sont survenues lors de lévaluation du script "{0}":
    {1}. birt.core.JavascriptCommonError ( 46 fois )
    détails : org.eclipse.birt.report.engine.api.EngineException: Des erreurs sont survenues lors de lévaluation du script "{0}":
    {1}.
     at org.eclipse.birt.report.engine.executor.ExecutionContext.addException(ExecutionContext.java:1109)
     at org.eclipse.birt.report.engine.executor.ExecutionContext.addException(ExecutionContext.java:1061)
     at org.eclipse.birt.report.engine.executor.DynamicTextItemExecutor.execute(DynamicTextItemExecutor.java:105)
     at org.eclipse.birt.report.engine.internal.executor.dup.SuppressDuplicateItemExecutor.execute(SuppressDuplicateItemExecutor.java:42)
     at org.eclipse.birt.report.engine.internal.executor.wrap.WrappedReportItemExecutor.execute(WrappedReportItemExecutor.java:45)
     at org.eclipse.birt.report.engine.internal.executor.l18n.LocalizedReportItemExecutor.execute(LocalizedReportItemExecutor.java:33)
     at org.eclipse.birt.report.engine.layout.html.HTMLAbstractLM.execute(HTMLAbstractLM.java:434)
     at org.eclipse.birt.report.engine.layout.html.HTMLAbstractLM.execute(HTMLAbstractLM.java:442)
     at org.eclipse.birt.report.engine.layout.html.HTMLAbstractLM.execute(HTMLAbstractLM.java:442)
     at org.eclipse.birt.report.engine.layout.html.HTMLAbstractLM.execute(HTMLAbstractLM.java:442)
     at org.eclipse.birt.report.engine.layout.html.HTMLAbstractLM.execute(HTMLAbstractLM.java:442)
     at org.eclipse.birt.report.engine.layout.html.HTMLAbstractLM.execute(HTMLAbstractLM.java:442)
     at org.eclipse.birt.report.engine.layout.html.HTMLListingBandLM.intializeHeaderContent(HTMLListingBandLM.java:96)
     at org.eclipse.birt.report.engine.layout.html.HTMLListingBandLM.initialize(HTMLListingBandLM.java:48)
     at org.eclipse.birt.report.engine.layout.html.HTMLTableBandLM.initialize(HTMLTableBandLM.java:42)
     at org.eclipse.birt.report.engine.layout.html.HTMLLayoutManagerFactory.createLayoutManager(HTMLLayoutManagerFactory.java:50)
     at org.eclipse.birt.report.engine.layout.html.HTMLReportLayoutEngine.createLayoutManager(HTMLReportLayoutEngine.java:142)
     at org.eclipse.birt.report.engine.layout.html.HTMLBlockStackingLM.layoutNodes(HTMLBlockStackingLM.java:67)
     at org.eclipse.birt.report.engine.layout.html.HTMLStackingLM.layoutChildren(HTMLStackingLM.java:27)
     at org.eclipse.birt.report.engine.layout.html.HTMLGroupLM.layoutChildren(HTMLGroupLM.java:80)
     at org.eclipse.birt.report.engine.layout.html.HTMLAbstractLM.layout(HTMLAbstractLM.java:133)
     at org.eclipse.birt.report.engine.layout.html.HTMLBlockStackingLM.layoutNodes(HTMLBlockStackingLM.java:68)
     at org.eclipse.birt.report.engine.layout.html.HTMLStackingLM.layoutChildren(HTMLStackingLM.java:27)
     at org.eclipse.birt.report.engine.layout.html.HTMLGroupLM.layoutChildren(HTMLGroupLM.java:80)
     at org.eclipse.birt.report.engine.layout.html.HTMLAbstractLM.layout(HTMLAbstractLM.java:133)
     at org.eclipse.birt.report.engine.layout.html.HTMLBlockStackingLM.layoutNodes(HTMLBlockStackingLM.java:68)
     at org.eclipse.birt.report.engine.layout.html.HTMLStackingLM.layoutChildren(HTMLStackingLM.java:27)
     at org.eclipse.birt.report.engine.layout.html.HTMLTableLM.layoutChildren(HTMLTableLM.java:76)
     at org.eclipse.birt.report.engine.layout.html.HTMLAbstractLM.layout(HTMLAbstractLM.java:133)
     at org.eclipse.birt.report.engine.layout.html.HTMLBlockStackingLM.layoutNodes(HTMLBlockStackingLM.java:68)
     at org.eclipse.birt.report.engine.layout.html.HTMLPageLM.layout(HTMLPageLM.java:90)
     at org.eclipse.birt.report.engine.layout.html.HTMLReportLayoutEngine.layout(HTMLReportLayoutEngine.java:101)
     at org.eclipse.birt.report.engine.api.impl.RunAndRenderTask.doRun(RunAndRenderTask.java:151)
     at org.eclipse.birt.report.engine.api.impl.RunAndRenderTask.run(RunAndRenderTask.java:72)
     at org.eclipse.birt.report.service.ReportEngineService.runAndRenderReport(ReportEngineService.java:954)
     at org.eclipse.birt.report.service.BirtViewerReportService.runAndRenderReport(BirtViewerReportService.java:933)
     at org.eclipse.birt.report.service.actionhandler.BirtGetPageAllActionHandler.__execute(BirtGetPageAllActionHandler.java:132)
     at org.eclipse.birt.report.service.actionhandler.AbstractBaseActionHandler.execute(AbstractBaseActionHandler.java:90)
     at org.eclipse.birt.report.soapengine.processor.AbstractBaseDocumentProcessor.__executeAction(AbstractBaseDocumentProcessor.java:47)
     at org.eclipse.birt.report.soapengine.processor.AbstractBaseComponentProcessor.executeAction(AbstractBaseComponentProcessor.java:143)
     at org.eclipse.birt.report.soapengine.processor.BirtDocumentProcessor.handleGetPageAll(BirtDocumentProcessor.java:183)
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
     at java.lang.reflect.Method.invoke(Method.java:597)
     at org.eclipse.birt.report.soapengine.processor.AbstractBaseComponentProcessor.process(AbstractBaseComponentProcessor.java:112)
     at org.eclipse.birt.report.soapengine.endpoint.BirtSoapBindingImpl.getUpdatedObjects(BirtSoapBindingImpl.java:66)
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
     at java.lang.reflect.Method.invoke(Method.java:597)
     at org.apache.axis.providers.java.RPCProvider.invokeMethod(RPCProvider.java:397)
     at org.apache.axis.providers.java.RPCProvider.processMessage(RPCProvider.java:186)
     at org.apache.axis.providers.java.JavaProvider.invoke(JavaProvider.java:323)
     at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
     at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
     at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
     at org.apache.axis.handlers.soap.SOAPService.invoke(SOAPService.java:454)
     at org.apache.axis.server.AxisServer.invoke(AxisServer.java:281)
     at org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:699)
     at org.eclipse.birt.report.servlet.BirtSoapMessageDispatcherServlet.doPost(BirtSoapMessageDispatcherServlet.java:225)
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:616)
     at org.apache.axis.transport.http.AxisServletBase.service(AxisServletBase.java:327)
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
     at org.eclipse.birt.report.servlet.BirtSoapMessageDispatcherServlet.service(BirtSoapMessageDispatcherServlet.java:112)
     at org.eclipse.equinox.http.registry.internal.ServletManager$ServletWrapper.service(ServletManager.java:180)
     at org.eclipse.equinox.http.servlet.internal.ServletRegistration.handleRequest(ServletRegistration.java:90)
     at org.eclipse.equinox.http.servlet.internal.ProxyServlet.processAlias(ProxyServlet.java:111)
     at org.eclipse.equinox.http.servlet.internal.ProxyServlet.service(ProxyServlet.java:59)
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
     at org.eclipse.equinox.http.jetty.internal.HttpServerManager$InternalHttpServiceServlet.service(HttpServerManager.java:269)
     at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:428)
     at org.mortbay.jetty.servlet.ServletHandler.dispatch(ServletHandler.java:677)
     at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:568)
     at org.mortbay.http.HttpContext.handle(HttpContext.java:1530)
     at org.mortbay.http.HttpContext.handle(HttpContext.java:1482)
     at org.mortbay.http.HttpServer.service(HttpServer.java:909)
     at org.mortbay.http.HttpConnection.service(HttpConnection.java:820)
     at org.mortbay.http.HttpConnection.handleNext(HttpConnection.java:986)
     at org.mortbay.http.HttpConnection.handle(HttpConnection.java:837)
     at org.mortbay.http.SocketListener.handleConnection(SocketListener.java:245)
     at org.mortbay.util.ThreadedServer.handle(ThreadedServer.java:357)
     at org.mortbay.util.ThreadPool$PoolThread.run(ThreadPool.java:534)
    Caused by: org.eclipse.birt.core.exception.CoreException: Des erreurs sont survenues lors de lévaluation du script "{0}":
    {1}.
     at org.eclipse.birt.core.script.ScriptContext.eval(ScriptContext.java:300)
     at org.eclipse.birt.core.script.ScriptContext.eval(ScriptContext.java:316)
     at org.eclipse.birt.core.script.ScriptContext.eval(ScriptContext.java:237)
     at org.eclipse.birt.report.engine.executor.ExecutionContext.evaluate(ExecutionContext.java:660)
     at org.eclipse.birt.report.engine.executor.DynamicTextItemExecutor.execute(DynamicTextItemExecutor.java:91)
     ... 80 more
    voici le code fichier ConvertionSecondes.java :

    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
    package OutilsHiacine;
     
     
    public class ConvertionSecondes {
     
    public static String SecondsToDateLisible(long Secondes)
    {
     
       long Jours = 0;
       long Heures = 0;
       long Minutes = 0;
     
       String sJours = "0";
       String sHeures = "0";
       String sMinutes = "0";
       String sSecondes = "0";
     
    //Résultat de moins d'une minute
          if (Secondes < 60) {return "00:00:" + Long.toString(Secondes);}
     
    //Si le résultat est superieur à 60 secondes
     
    //Nombre de Jours
          Jours = Secondes / 86400; // 1 jour = 24 heures = 86400 secondes
          Secondes = Secondes - (Jours * 86400); // Pour avoir ce qui reste
     
    //Nombre d'Heures
          Heures = Secondes / 3600; // 1 heure = 3600 secondes
          Secondes = Secondes - (Heures * 3600); // Pour avoir ce qui reste
     
     
    //Nombre de Minutes
          Minutes = Secondes / 60; // 1 minute = 60 secondes
          Secondes = Secondes - (Minutes * 60); // Pour avoir ce qui reste
     
     
          sJours = "" + Jours;
          sHeures = "" + Heures;
          sMinutes = "" + Minutes;
          sSecondes = "" + Secondes;
     
     
    //On met l'heure sur 2 caractères
          if (sHeures.length() == 1) {sHeures = "0" + sHeures;}
          if (sMinutes.length() == 1) {sMinutes = "0" + sMinutes;}
          if (sSecondes.length() == 1) {sSecondes = "0" + sSecondes;}
     
     
        if (Jours == 0) {return sHeures + ":" + sMinutes + ":" + sSecondes;} // Si le Jour est égal à 0, on ne l'affiche pas
        else
        {
        return sJours + " j " + sHeures + ":" + sMinutes + ":" + sSecondes;
        }
     
        }
     
    }

  15. #15
    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,

    En effet, il ne doit pas trouver ta classe. Passes-tu par une application ? Par le designer ? Ou autre ?

    Autre précision, petite aide en Java à vrai dire. Tu peux utiliser directement les méthodes existantes pour convertir tes dates :
    Code Java : 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
    package OutilsHiacine;
     
    import java.text.SimpleDateFormat;
    import java.util.Date;
     
    public class ConvertionSecondes {
    	public static String secondsToDateLisible(long secondes)
    	{
    		Date d = new Date(secondes*1000);
     
    		SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
    		String time = sdf.format(d);
     
    		long jour = secondes/86400;
     
    		return jour+"j "+time;
    	}
    }
    Ce code retourne le temps sous forme 24j 14:03 par exemple de façon beaucoup plus simple.

    Rappel de PS : La convention d'écriture en Java stipule que les méthodes et variables doivent commencer par une minuscule ou un _. Cela peut poser des problèmes dans certains cas si ce n'est pas le cas.

  16. #16
    Membre chevronné
    Avatar de DelphiCool
    Homme Profil pro
    Ingénieur de production
    Inscrit en
    Mars 2002
    Messages
    187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur de production
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2002
    Messages : 187
    Points : 2 198
    Points
    2 198
    Par défaut
    Merci Bim,

    Mais je n'y arrive toujours pas.

    J'utilise notepad pour faire mon fichier java.

    J'ai de grosses lacunes en java, language que je découvre, moi c'est plutot delphi .


    Je met un projet vierge test où j'essaye d'utiliser cette classe.

    Peux être que tu verra où je fait une erreur
    Fichiers attachés Fichiers attachés

  17. #17
    Membre chevronné
    Avatar de DelphiCool
    Homme Profil pro
    Ingénieur de production
    Inscrit en
    Mars 2002
    Messages
    187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur de production
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2002
    Messages : 187
    Points : 2 198
    Points
    2 198
    Par défaut
    Si je souhaites utilise un fichier .class.
    Le fait de le mettre dans le dossier du projet, suffit-il ?

  18. #18
    Membre averti

    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    385
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 385
    Points : 321
    Points
    321
    Par défaut
    Non.

    Tu as dans les propriétés du rapport la possibilité de définir des ressources externes (properties>resources>...jar).

    Bon courage

  19. #19
    Membre chevronné
    Avatar de DelphiCool
    Homme Profil pro
    Ingénieur de production
    Inscrit en
    Mars 2002
    Messages
    187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur de production
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2002
    Messages : 187
    Points : 2 198
    Points
    2 198
    Par défaut
    Citation Envoyé par erwan.bodere Voir le message
    Non.

    Tu as dans les propriétés du rapport la possibilité de définir des ressources externes (properties>resources>...jar).

    Bon courage

    Le problème c'est que c'est bien là que je vais

  20. #20
    Membre chevronné
    Avatar de DelphiCool
    Homme Profil pro
    Ingénieur de production
    Inscrit en
    Mars 2002
    Messages
    187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur de production
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2002
    Messages : 187
    Points : 2 198
    Points
    2 198
    Par défaut
    Bonsoir,

    j'ai enfin réussi :

    * Le fichier jar était créer sans les répertoires.
    * je rajoute mon jar correct à mes ressources.
    * dans initialise, je met :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fc = new Packages.outilsHiacine.ConvertionSecondes();
    * et dans mes texte dynamiques, ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fc.secondsToDateLisible(secondes);

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Utiliser un code MATLAB dans du code Java
    Par si_a7med dans le forum MATLAB
    Réponses: 1
    Dernier message: 23/04/2011, 16h30
  2. Utiliser du code java dans le code C++
    Par brazzaville dans le forum Bibliothèques
    Réponses: 1
    Dernier message: 18/12/2008, 21h45
  3. coloration syntaxique code java dans Word
    Par zais_ethael dans le forum API standards et tierces
    Réponses: 10
    Dernier message: 25/05/2006, 18h07
  4. [Forms 9i] Integrer du code java dans un bloc PL/SQL
    Par mohmanjdo dans le forum PL/SQL
    Réponses: 2
    Dernier message: 07/02/2006, 13h54
  5. [CR] Utilisation de codes à barres dans crystal
    Par franck.cvitrans dans le forum SAP Crystal Reports
    Réponses: 4
    Dernier message: 29/06/2004, 08h48

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