Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > Jasper > iReport
iReport Forum d'entraide sur iReport
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 17/07/2008, 14h55   #1
Nouveau Membre du Club
 
Inscription : février 2007
Messages : 181
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 181
Points : 37
Points : 37
Par défaut Condition sur une date

Bonjour,
Une fois de plus je pose une question sur IREPORT et ses conditions. Voila mon problème, je souhaite vérifier si pour une date donnée, il s'agit d'un week-end et lorsque c'est le cas, j'utilise une couleur différente. J'ai donc essayé le code suivant mais cela ne semble pas marcher:
Code :
new Boolean(new java.util.Date($P{annee}.intValue(),$P{mois}.intValue(),2).getDay()==6 || new java.util.Date($P{annee}.intValue(),$P{mois}.intValue(),2).getDay()==0)
J'utilise cette condition pour chacune de mes cases en faisant varier le numéro de jour mais rien ne se passe sachant que j'utilise une classe deprecated. J'ai donc également essayé d'utiliser Calendar mais sans succés puisque le code nécessaire est plus long et nécessite une initialisation plus importante.

Comment faire......?


Merci par avance pour vos réponses.

Cordialement,
Daniel
DanaX est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2008, 12h35   #2
Membre du Club
 
Inscription : décembre 2006
Messages : 153
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 153
Points : 53
Points : 53
Quelle est le type de ton année et de ton mois?
yaya0057 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/07/2008, 10h24   #3
Nouveau Membre du Club
 
Inscription : février 2007
Messages : 181
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 181
Points : 37
Points : 37
Mois integer
Année integer
DanaX est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/08/2008, 11h25   #4
Membre éclairé
 
Inscription : avril 2007
Messages : 195
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 195
Points : 320
Points : 320
Personellement, je te conseillerai de passer par une methode statique dans un scriptlet associe a ton rapport du genre:

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
 
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
 
import net.sf.jasperreports.engine.JRAbstractScriptlet;
import net.sf.jasperreports.engine.JRScriptletException;
 
public class TempScriptlet extends JRAbstractScriptlet {
 
...
 
	public static Boolean isWeekEnd(Integer year, Integer month, Integer dayOfMonth) {
		try {
			SimpleDateFormat formatter1 = new SimpleDateFormat("yyyy.MM.dd");
			SimpleDateFormat formatter2 = new SimpleDateFormat("EEE", Locale.US);
			Date date = formatter1.parse(year + "." + month + "." + dayOfMonth);
			String dayOfWeek = formatter2.format(date);
 
			if ((dayOfWeek.toUpperCase().startsWith("Sun".toUpperCase()))
					|| (dayOfWeek.toUpperCase().startsWith("Sat".toUpperCase())))
				return Boolean.TRUE;
 
			return Boolean.FALSE;
		} catch (ParseException e) {
			return Boolean.FALSE;
		}
	}
}
Il te suffit plus qu'a appeler "isWeekEnd" dans ton rapport en faisant:

Code :
1
2
 
$P{REPORT_SCRIPTLET}.isWeekEnd($P{annee}, $P{month}, new Integer(2))
__________________
Cordialement,

*****************
Christopher André
Sales Engineer

Voir mon profil

Il est extrêmement rare que je réponde à un message privé.
Contribuez à la FAQ Jasper Reports & iReport
candre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/08/2008, 17h57   #5
Nouveau Membre du Club
 
Inscription : février 2007
Messages : 181
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 181
Points : 37
Points : 37
Merci énormèment je vais tester ça
DanaX est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/08/2008, 20h04   #6
Membre habitué
 
Inscription : avril 2005
Messages : 119
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 119
Points : 122
Points : 122
Envoyer un message via MSN à egwada Envoyer un message via Yahoo à egwada
Hello !

Les manipulations de date en java avec l'api standard c'est une vraie plaie ! ! Je vous conseille vivement d'utiliser Joda Time... C'est tellement.... bien fait... :

http://joda-time.sourceforge.net/

Pour faire le test dont tu parles plus haut je pense que ça reviendra à quelque chose comme ça :
Code :
1
2
3
4
5
6
7
8
 
 
DateTime dt = new DateTime(2005, 3, 26, 0, 0, 0, 0);
 
if(dt.dayOfWeek()  == 6){
...
...
}
En espérant que ça peut t'aider.

Bien à toi
__________________
E-Gwada
===============================
site developpez.com : http://charly-clairmont.developpez.com
site pro : http://www.altic.org
egwada est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/08/2008, 09h29   #7
Nouveau Membre du Club
 
Inscription : février 2007
Messages : 181
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 181
Points : 37
Points : 37
Citation:
Envoyé par candre Voir le message
Personellement, je te conseillerai de passer par une methode statique dans un scriptlet associe a ton rapport du genre:

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
 
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
 
import net.sf.jasperreports.engine.JRAbstractScriptlet;
import net.sf.jasperreports.engine.JRScriptletException;
 
public class TempScriptlet extends JRAbstractScriptlet {
 
...
 
	public static Boolean isWeekEnd(Integer year, Integer month, Integer dayOfMonth) {
		try {
			SimpleDateFormat formatter1 = new SimpleDateFormat("yyyy.MM.dd");
			SimpleDateFormat formatter2 = new SimpleDateFormat("EEE", Locale.US);
			Date date = formatter1.parse(year + "." + month + "." + dayOfMonth);
			String dayOfWeek = formatter2.format(date);
 
			if ((dayOfWeek.toUpperCase().startsWith("Sun".toUpperCase()))
					|| (dayOfWeek.toUpperCase().startsWith("Sat".toUpperCase())))
				return Boolean.TRUE;
 
			return Boolean.FALSE;
		} catch (ParseException e) {
			return Boolean.FALSE;
		}
	}
}
Il te suffit plus qu'a appeler "isWeekEnd" dans ton rapport en faisant:

Code :
1
2
 
$P{REPORT_SCRIPTLET}.isWeekEnd($P{annee}, $P{month}, new Integer(2))
Après avoir essayer ta méthode, je recontre 2 difficultés :
- Le code semble lever une exception
- Comment inclure le scriplet dans le report : Faut-il l'inclure lors de la compilation?

Ci dessous le code, que j'ai précisé dans le scriplet
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
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
 
import net.sf.jasperreports.engine.JRAbstractScriptlet;
import net.sf.jasperreports.engine.JRScriptletException;
 
public class TempScriptlet extends JRAbstractScriptlet {
 
	public static Boolean isWeekEnd(Integer year, Integer month, Integer dayOfMonth) {
		try {
			SimpleDateFormat formatter1 = new SimpleDateFormat("yyyy.MM.dd");
			SimpleDateFormat formatter2 = new SimpleDateFormat("EEE", Locale.US);
			Date date = formatter1.parse(year + "." + month + "." + dayOfMonth);
			String dayOfWeek = formatter2.format(date);
 
			if ((dayOfWeek.toUpperCase().startsWith("Sun".toUpperCase()))
					|| (dayOfWeek.toUpperCase().startsWith("Sat".toUpperCase())))
				return Boolean.TRUE;
 
			return Boolean.FALSE;
		} catch (ParseException e) {
			return Boolean.FALSE;
		}
	}
}
La seule différence ce situe sur le fait que j'ai supprimé les 3 petits points...

Merci par avance pour vos réponses.

Cordialement,
Daniel
DanaX est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/08/2008, 09h39   #8
Membre éclairé
 
Inscription : avril 2007
Messages : 195
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 195
Points : 320
Points : 320
Citation:
Après avoir essayer ta méthode, je rencontre 2 difficultés :
- Le code semble lever une exception
- Comment inclure le scriplet dans le report : Faut-il l'inclure lors de la compilation?
Réponse en deux points:
- Pourrais-tu poster la stacktrace de l'exception qu'on y jette un oeil?
- Je pense que ton exception vient du deuxième point: ton scriptlet doit être présent quelque part dans ton CLASSPATH lorsque tu éxécutes ton rapport. Dans ton rapport, il te suffit de renseigner l'attribut 'scriptletClass' de ton élément 'jasperReport' dans le fichier XML avec le FQN de ton scriptlet.
__________________
Cordialement,

*****************
Christopher André
Sales Engineer

Voir mon profil

Il est extrêmement rare que je réponde à un message privé.
Contribuez à la FAQ Jasper Reports & iReport
candre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/08/2008, 09h43   #9
Membre éclairé
 
Inscription : avril 2007
Messages : 195
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 195
Points : 320
Points : 320
Citation:
Envoyé par egwada Voir le message
Hello !

Les manipulations de date en java avec l'api standard c'est une vraie plaie ! ! Je vous conseille vivement d'utiliser Joda Time... C'est tellement.... bien fait... :

http://joda-time.sourceforge.net/

Pour faire le test dont tu parles plus haut je pense que ça reviendra à quelque chose comme ça :
Code :
1
2
3
4
5
6
7
8
 
 
DateTime dt = new DateTime(2005, 3, 26, 0, 0, 0, 0);
 
if(dt.dayOfWeek()  == 6){
...
...
}
En espérant que ça peut t'aider.

Bien à toi
Je connaissais pas mais c'est vrai que ca a l'air de valoir le detour! Merci pour le lien
__________________
Cordialement,

*****************
Christopher André
Sales Engineer

Voir mon profil

Il est extrêmement rare que je réponde à un message privé.
Contribuez à la FAQ Jasper Reports & iReport
candre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/08/2008, 10h10   #10
Nouveau Membre du Club
 
Inscription : février 2007
Messages : 181
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 181
Points : 37
Points : 37
Ci-dessous le stacktrace:
Code :
1
2
3
Compilation du fichier source de scriptlets... E:\...\scriptlet.java
Erreur lors de la compilation de la source Scriptlet Java.
net.sf.jasperreports.engine.JRException:*Error*compiling*report*java*source*files*:*E:\..\scriptlet.java* ****at*net.sf.jasperreports.engine.design.JRJdk13Compiler.compileClasses(JRJdk13Compiler.java:119) ****at*net.sf.jasperreports.engine.design.JRAbstractMultiClassCompiler.compileClass(JRAbstractMultiClassCompiler.java:45) ****at*it.businesslogic.ireport.IReportCompiler.run(IReportCompiler.java:362) ****at*java.lang.Thread.run(Unknown*Source) Caused*by:*java.lang.ClassNotFoundException:*com.sun.tools.javac.Main
Je tiens à préciser que j'utilise ireport et que j'associe bien le scriplet en utilisant l'option classe de scriplet: Utiliser le support de scriplet interne IREPORT

Cordialement.
DanaX est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/08/2008, 10h24   #11
Membre éclairé
 
Inscription : avril 2007
Messages : 195
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 195
Points : 320
Points : 320
Ah... Si tu utilises le support de scriptlet interne de iReport, le code devient le suivant:

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
 
import net.sf.jasperreports.engine.*;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
 
import net.sf.jasperreports.engine.JRAbstractScriptlet;
import net.sf.jasperreports.engine.JRScriptletException;
 
public class ScriptletClassName extends it.businesslogic.ireport.IReportScriptlet {
 
/** Creates a new instance of JRIreportDefaultScriptlet */
public ScriptletClassName() {}
 
public static Boolean isWeekEnd(Integer year, Integer month, Integer dayOfMonth) {
		try {
			SimpleDateFormat formatter1 = new SimpleDateFormat("yyyy.MM.dd");
			SimpleDateFormat formatter2 = new SimpleDateFormat("EEE", Locale.US);
			Date date = formatter1.parse(year + "." + month + "." + dayOfMonth);
			String dayOfWeek = formatter2.format(date);
 
			if ((dayOfWeek.toUpperCase().startsWith("Sun".toUpperCase()))
					|| (dayOfWeek.toUpperCase().startsWith("Sat".toUpperCase())))
				return Boolean.TRUE;
 
			return Boolean.FALSE;
		} catch (ParseException e) {
			return Boolean.FALSE;
		}
	}
}
J'ai pas teste mais ca devrait marcher. Tiens-nous au courant de tes resultats.
__________________
Cordialement,

*****************
Christopher André
Sales Engineer

Voir mon profil

Il est extrêmement rare que je réponde à un message privé.
Contribuez à la FAQ Jasper Reports & iReport
candre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/08/2008, 11h19   #12
Nouveau Membre du Club
 
Inscription : février 2007
Messages : 181
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 181
Points : 37
Points : 37
Ci-dessous l'erreur afficher:
Code :
1
2
3
Compilation du fichier source de scriptlets... E:\..\scriptlet.java
Erreur lors de la compilation de la source Scriptlet Java.
net.sf.jasperreports.engine.JRException:*Error*compiling*report*java*source*files*:*E:\..\scriptlet.java* ****at*net.sf.jasperreports.engine.design.JRJdk13Compiler.compileClasses(JRJdk13Compiler.java:119) ****at*net.sf.jasperreports.engine.design.JRAbstractMultiClassCompiler.compileClass(JRAbstractMultiClassCompiler.java:45) ****at*it.businesslogic.ireport.IReportCompiler.run(IReportCompiler.java:362) ****at*java.lang.Thread.run(Unknown*Source) Caused*by:*java.lang.ClassNotFoundException:*com.sun.tools.javac.Main
DanaX est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/08/2008, 11h43   #13
Membre éclairé
 
Inscription : avril 2007
Messages : 195
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 195
Points : 320
Points : 320
Je dois avouer que la, je vois pas...
Le mieux reste encore de poster ta question sur le forum de JasperForge.
__________________
Cordialement,

*****************
Christopher André
Sales Engineer

Voir mon profil

Il est extrêmement rare que je réponde à un message privé.
Contribuez à la FAQ Jasper Reports & iReport
candre 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 21h30.


 
 
 
 
Partenaires

Hébergement Web