Générer un rapport dans Jasperreport n’est pas simple. Jasperreport compilant de façon séquentielle, il n’est pas facile de stocker les numéros des pages générées pour ensuite les afficher sur la première page du rapport.
Générer un rapport dans Jasperreport n’est pas simple. Jasperreport compilant de façon séquentielle, il n’est pas facile de stocker les numéros des pages générées pour ensuite les afficher sur la première page du rapport.
Une des solutions possibles consiste à stocker dans une variable les numéros de page, et d’afficher cette variable où on le souhaite dans le rapport, en paramétrant le temps d’évuation à « Rapport ».
Pour réaliser cela, il faut mixer scriptlet et affichage HTML : on va générer le sommaire sous forme de tableau HTML qui sera interprété par le composant HTML de Jasperreport, en paramétrant le temps d’évaluation à « Rapport ». Ainsi le sommaire ne sera généré qu’une fois toutes les pages du rapport générés.
Voici les étapes pour réaliser ce sommaire :
(disponible ici : http://community.jaspersoft.com/project/jasperreports-library/releases) .
Pour importer un jar : Copier coller le jar dans votre projet Java => Clic droit sur le projet => Propriétés => Option « Java Build Path » => Importer Jar : choisir le Jar à importer
Dans notre exemple il s’agira d’un objet « Index », composé d’un titre, d’un numéro de page et d’un type:
package axopen.jasper.generer.sommaire;
public class Index {
private String nomIndex = null;
private Integer numPageIndex = null;
private String typeIndex = null;
public Index(
String nomIndex,
Integer numPageIndex,
String typeIndex
)
{
this.nomIndex = nomIndex;
this.numPageIndex = numPageIndex;
this.typeIndex = typeIndex;
}
public String getNomIndex()
{
return this.nomIndex;
}
public Integer getNumPageIndex()
{
return this.numPageIndex;
}
public String getTypeIndex()
{
return this.typeIndex;
}
}
Remarque :
package axopen.jasper.generer.sommaire;
import java.util.ArrayList;
import java.util.Collection;
import net.sf.jasperreports.engine.JRDefaultScriptlet;
import net.sf.jasperreports.engine.JRScriptletException;
public class GenererSommaire extends JRDefaultScriptlet{
public String addTocEntry(String pSectionName, Integer pPageNumber,
String pTypeSection)
throws JRScriptletException{
ArrayList toc = (ArrayList)this.getVariableValue("SOMMAIRE");
String lSectionName = pSectionName;
Integer lPageNumber = pPageNumber;
String lTypeSection = pTypeSection;
try{
toc.add(new axopen.jasper.generer.sommaire
.Index(lSectionName, lPageNumber, lTypeSection));
}catch (Exception e){
System.out.println(e);
}
return "";
}
public String generateHTMLSommaire(ArrayList pListIndex){
String lSommaireHTML = new String();
String lBgColor = new String();
String lCurrentNomIndex = new String();
String lSautDeLigne = new String();
String lMargeGauche = new String();
String lNouvelleColonne = new String();
lBgColor = "#FFFFFF";
lSautDeLigne = " ";
lNouvelleColonne = "";
lSommaireHTML = ""
for (int i = 0; i < pListIndex.size(); i++)
{ if(i<2){ lBgColor = "#FFFFFF"; }
if( pListIndex.get(i).getTypeIndex().equals("titre") ){
lCurrentNomIndex = pListIndex.get(i)
.getNomIndex().toUpperCase();
lMargeGauche = "" ;
} else
{
lCurrentNomIndex = pListIndex.get(i)
.getNomIndex().toLowerCase();
lMargeGauche = "" ;
}
lSommaireHTML += " ";
lSommaireHTML += " ";
lSommaireHTML += " ";
lSommaireHTML += " ";
if(i==1) {
lSommaireHTML += lSautDeLigne;
} else if(i==24 || i==50) {
lSommaireHTML += lNouvelleColonne;
} else if(i>75) {
break;
}
lBgColor = (lBgColor.equals("#FFFFFF")) ?
"#CCCCCC" : "#FFFFFF"; }
lSommaireHTML += lMargeGauche
+ lCurrentNomIndex + pListIndex.get(i)
.getNumPageIndex() ;
lSommaireHTML.replace(« null », « »);
return lSommaireHTML;
} }
Puis copier le jar dans le projet Jasper et l’importer dans le java build path. Enfin paraméter le rapport Jasper pour qu’il utilise ce scriptlet (=ce jar), via la propriété « Scriplet Class » (=[Nom du package].[Nom du Jar]. Dans notre exemple : axopen.jasper.generer.sommaire.GenererSommaire).
(Ici : SOMMAIRE) de type java.util.ArrayList. Attention cette variable doit avoir le même nom que celle appelée dans le script (via la commande : (ArrayList)this.getVariableValue(NomVariable).
Paramétrez la ainsi :
Paramétrer cet élément ainsi :

Remarque : il n’est pas possible de placer le sommaire dans un sous-rapport, ceux-ci n’ayant pas l’attribut Temps d’Evaluation.
Paramétrez le ainsi :
Nom de la méthode pour ajouter une entrée(« Texte libre »,$V{PAGE_NUMBER}, »type (texte libre »). Dans notre exemple : $P{REPORT_SCRIPTLET}.addTocEntry(« Présentation des fournisseurs »,$V{PAGE_NUMBER}, »titre »)

=> En savoir plus sur les solutions BI
Ces dernières années, l’usage du cloud a connu une croissance exponentielle dans les entreprises. Sans grande surprise, les leaders du marché sont américains, comme c’est souvent le cas en informatique. Parmi les trois plus grands services cloud, on retrouve Amazon Web Services (AWS), Google Cloud Platform (GCP), et bien sûr Microsoft Azure, sur lequel nous allons nous concentrer dans cet article !
Cet article liste les classes P5 en donnant la traduction en OJS correspondante. Etant donné le nombre important de classes dans P5 cette liste ne sera pas exhaustive mais sera enrichie au fil du temps.
Face à l'explosion des coûts liés au cloud public, une nouvelle discipline s'impose : le FinOps. Dans un contexte où les entreprises adoptent massivement les infrastructures cloud pour leur flexibilité et leur scalabilité, les mauvaises surprises sur la facture sont malheureusement devenues monnaie courante. Optimiser ses dépenses cloud n'est plus un luxe, mais une nécessité pour garantir la rentabilité des projets et maitriser ses budgets IT. Mais pas de panique ! Cet article vous dévoile tout ce que vous devez savoir sur le FinOps, ses principes clés, et les bonnes pratiques pour maîtriser vos coûts tout en tirant le meilleur parti de vos ressources cloud.