Rapports et fiches techniques
Ce document présente le paramétrage et l'administration des rapports de fiches produits BIRT et des exports de recherche (Excel ou BIRT) pour le logiciel beCPG. Elle est destinée aux administrateurs du logiciel beCPG.
Pré-requis :
- Eclipse Birt,
- Du plugin eclipse RessourceBundle,
- DE connaissances de base sur :
- XML
- XPATH (optionnel),
- Javascript
- D'un accès en mode admin au PLM.
Rapport de fiche Produit BIRT
beCPG utilise le logiciel BIRT (Business Intelligence and Reporting Tools) pour la génération des fiches techniques. BIRT est un projet Open Source qui fournit des outils de création de rapports et de génération de documents. Cet outil est largement reconnu pour sa flexibilité et sa capacité à produire des rapports riches en données et personnalisés.
BIRT est un projet Open Source soutenu par la fondation Eclipse. La documentation complète de BIRT est disponible à l'adresse suivante : Documentation BIRT. Cette documentation offre un aperçu complet de l'outil, y compris les concepts de base, les fonctionnalités avancées, et les bonnes pratiques pour la création de rapports.
Installation
Les différentes versions de BIRT sont accessibles sur cette page : http://download.eclipse.org/birt/downloads/.
En fonction de la version de beCPG, il est nécessaire d'utiliser la bonne version de l'éditeur BIRT. Le tableau ci-dessous présente ces différentes versions:
beCPG Report Version | Birt Version | Java Version | Eclipse Version |
---|---|---|---|
4.4 | 4.14 | JDK 17 | Eclipse 2023-09 |
3.2 | 4.8 | JDK 11 | Eclipse Photon |
Présentation
Il existe 2 types de rapports pour les fiches "Produit":
- rapport système (toujours généré par le système, en automatique);
- rapport utilisateur (choisi par l'utilisateur lorsqu'il édite le produit). Ce type de rapport est un rapport à la demande.
Les rapports de fiches Produit sont définis dans le dossier /Système/Rapports/Rapports de fiche produit.
L'ajout d'un nouveau rapport se fait ainsi (vous pouvez copier un rapport de produit) :
- Ajouter un dossier;
- Ajouter le fichier *.rptdesign puis éditer ses métadonnées :
- Le nom du rapport;
- Le type de produit pour définir à quel type de produit le rapport est applicable
- Matière première en mettant la valeur http://www.bcpg.fr/model/becpg/1.0}rawMaterial
- Semi fini en mettant la valeur http://www.bcpg.fr/model/becpg/1.0}semiFinishedProduct
- Produit fini en mettant la valeur http://www.bcpg.fr/model/becpg/1.0}finishedProduct
- Emballage en mettant la valeur http://www.bcpg.fr/model/becpg/1.0}packagingMaterial
Il est aussi possible de renseigner un type général. Le rapport avec le type général sera visible pour toutes les entités:
- Type général : http://www.bcpg.fr/model/becpg/1.0 product
- Le type de modèle:
- Modèle système pour indiquer si le rapport est généré automatiquement pour ce type de produit. Dans le cas où ce rapport n'est pas un rapport système, l'utilisateur doit le sélectionner lorsqu'il édite le produit.
- Modèle par défaut, pour indiquer que le rapport est le rapport par défaut du produit, c'est à dire, que ce sera le rapport affiché lorsque l'on sera sur la fiche du produit. Il ne peut y avoir qu'un rapport par défaut pour un type de produit. Les rapports qui ne sont pas des rapports par défaut sont mis dans le dossier « Documents » du produit lors de la génération du rapport.
- L'extension du rapport
Lorsqu'un produit est créé ou édité, le système génère un rapport par modèle de rapport associé au produit.
Modification d'un modèle de rapport produit
Chaque rapport beCPG possède un modèle BIRT dont l'extension est *.rptdesign.
Introduction à BIRT
beCPG se base sur la solution de reporting BIRT (Business Intelligence and Reporting Tools).
Reporting: synthétiser des données sous forme de rapports.
BIRT: Un outil de reporting "Open Source" reposant sur Eclipse. Un outil graphique, c’est-à-dire qu’il dispose d’une palette permettant de sélectionner l’élément devant être placé sur le rapport.
Le rapport BIRT peut être connecté avec une base de données afin de pouvoir afficher le résultat d’une requête sur une feuille de travail. Pour cela, il est nécessaire d’ajouter une « Data Source » permettant de se connecter à la base de données.
Ensuite, une « Data set », contenant la requête, est ajoutée pour générer des requêtes statiques mais aussi dynamiques en ajoutant des paramètres modifiables lors de l’exécution du rapport.
Le « Data cube » permet de créer un tableau croisé. Cela permet notamment l’affichage de données par colonne et le calcul du total automatique pour les statistiques.
L'exécution d'un rapport beCPG se fait ainsi :
- Génération de la source de données XML par le moteur beCPG
- Chargement du modèle BIRT
- Exécution du rapport qui donnera une sortie .pdf, .docx, ou .xlsx
Design du rapport
Le design du rapport se fait dans le designer Eclipse où l'on trouve :
- La boite à outil (Palette) qui fournit des contrôles de rendu tels que : des tableaux, listes, zone de texte etc...
- La source de données XML (Data Explorer);
- La mise en forme du rapport (Layout);
- La page maître (Master page): pour modifier l'entête et le pied de page;
- La prévisualisation du rapport (Preview).
Le paramétrage d'un rapport consiste donc à :
- disposer les contrôles de rendu zone de texte, tableau
- définir où seront placées les données via du drag 'n drop des attributs de la source de données, dans le rapport.
Création du rapport
- Window > Open perspective > Other > Report Design
- File> New> Project> Business Intelligence and Reporting Tools> Report project, puis nommer le projet.
- File> New> Report puis nommer le rapport et choisir la trame de départ.
Exploration des données (Data Explorer)
Pour explorer les données, il faut sélectionner l'onglet « Data Explorer ».
Un exemple de source de données XML est :
<entity name="Assortiment 8 sushis" code="1009"
store-identifier="SpacesStore"
productQty="0.200" productUnit="kg" productState="ToValidate"
productEAN="8001456682"
/>
L'XML peut être obtenu via l'API beCPG:
Avec :
- {@SERVEUR} : Adresse IP du serveur,
- {PORT} : Le numero du port de communication (optionnel),
- {NODE_REF} : identifiant d'un produit (disponible dans l'url du navigateur quand on est sur un produit sous la forme 'workspace://SpacesStore/2aad6284-afc2-4d89-8bbf-bd3dd50ff1bc').
Cette url affiche l'XML qui peut être sauvegardé sur son pc en faisant "sauvegarder sous".
Pour indenter l'XML: xmllint --format datasource.xml > datasource-pretty-print.xml
Choix de la source de données (datasource)
Pour modifier une source de données, voici la procédure à suivre :
- Data explorer> Data source> New data source;
- Sélectionner « XML Data Source » ;
- Clic droit, « Edit »;
- Faire Browse pour aller chercher la data source;
- Sélectionner le XML sauvegardé sur son pc;
- Cliquer sur « Test connection » et renseigner le compte et mot de passe de l'admin.
- Sii « Ping succeedeed » apparait, c’est OK.
- Appuyer sur « Finish ».
Choix du XML
Data Sets
Les dataset permettent de requêter la datasource et de sélectionner les attributs.
- Data set> New data set puis cliquer sur la data source précédemment rentrée et cliquer sur OK.
- Sélectionner la donnée à requêter (XPath qui permet de sélectionner les nœuds XML qui alimentent le dataset)
- Sélectionner les attributs des nœuds XML qui alimentent les colonnes du dataset
Ajout d'une propriété
Il est possible de prévisualiser le contenu du dataset en cliquant sur "Preview results". Une fois que le dataset est paramétré, il faut glisser déposer ses données dans le rapport.
Vue du rapport
Les vues de rapport sont sélectionnées par les onglets en bas de la section principale
Layout
Permet de construire le rapport :
- Ajout des contrôles
- Ajout des données
Page maître (Master page)
La page maître permet de renseigner :
- Les entêtes et pieds de page du rapport
- la largeur, la hauteur du rapport
Script
Il est possible de programmer des fonctions utilisables dans le rapport en les stockant dans l’onglet « Script ». Ces scripts peuvent être exécutés à différente étape d'exécution du rapport selon l'évènement. Un script peut être définit sur un élément précis ou sur le rapport.
XML Source
- Affiche le XML du rapport.
Preview
- Affiche la prévisualisation du rapport, comme s'il était exécuté par beCPG: Run> View report> Format de sortie (PDF).
Palette de contrôles
La palette est sélectionnée par l'onglet « Palette ». Cela permet notamment d'ajouter un texte en dur.
Contrôles disponibles
- Label : à utiliser par défaut pour afficher du texte statique,
- Text
- Dynamic Text: texte dynamique. Exemple : pour mettre en gras des mots sur l’étiquette, on utilise des balises HTML,
- Data : Rarement nécessaire car les données sont ajoutées depuis Exporer data
- Image
- Grid : tableau statique (on peut mettre des tables dedans),
- List : liste dynamique en fonction du nombre de ligne du dataset,
- Table : tableau dynamique en fonction du nombre de ligne du dataset (on peut mettre des listes dedans),
- Chart : graphique,
- Cross tab : tableau croisé dynamique.
Ajout d'un contrôle dans le rapport
L'ajout d'un contrôle se fait par glisser-déposer.
- Ajout d'une image
L'ajout d'une image statique est simple.
L'ajout d'un image dynamique est plus complexe, il s'agit du cas où le moteur beCPG récupère une image associée au produit et l'envoie à la datasource du rapport lors de l'exécution. La procédure est la suivante :
- Ajouter l'image
- Dynamic Image en référençant l'id de l'image passé à la datasource, ex : row["productImage"]
- Expression pour les champs de type données
Les champs de type données peuvent être soumis à des conditions ou être la concaténation de plusieurs attributs, ex : "Emballage : " + dataSetRow["palletBoxName"] + ", tare indicative (g) : " + dataSetRow["pmBoxTare"] + ", dimensions (mm) : " + dataSetRow["pmBoxDimensions"]
Pour éditer cette mise en forme, il faut faire :
- Clic droit sur l'attribut data
- Edit Value/Expression
- Renseigner l'expression
Visibilité
Il est possible de masquer des champs ou des images selon des conditions. Pour cela, il faut :
- Afficher les propriétés du contrôle
- Sélectionner l'onglet Visibility
- Renseigner l'expression qui indique quand masquer le contrôle
Mise en forme
Il est possible de définir des styles de mise en forme dans un rapport, pour cela :
- Clic droit sur un contrôle
- Style => New Style
Ensuite, les styles peuvent être appliqués aux contrôles, édités ou supprimés en faisant un clique droit sur un contrôle, puis Style.
Déploiement
Une fois le rapport édité sous eclipse, le sauvegarder au format .rptdesign.
- Fiches techniques: se place dans Entrepôt> Système> Rapports> Rapports de fiche produit> Entité et déposer le rapport
- Fichiers de langues (properties): se place dans Entrepôt> Système> Rapports> Rapports de fiche produit et déposer le rapport
Pour les fichiers .rptdesign > Changer le type > Modèle de rapport
Dans "Editer les propriétés":
- Cocher Modèle système si le rapport doit être attribué à tous les produits de même type.
- Cocher Modèle par défaut s'il existe plusieurs modèles et que celui-ci doit être affiché par défaut.
- Si rien n'est coché, il faudra aller dans le produit concerné et sélectionner le rapport à la main via le bouton "paramètres rapport"
Pour que le rapport soit traduit en différentes langues, sélectionner des fichiers de langues associées. Sélectionner également les différentes langues concernées dans la liste déroulante. Puis sélectionner les différentes langues dans les 'paramètres rapport' d'un produit.
Ajout de la liste "Fiches Techniques" sur une entité
Les entités (Produit-Fini, Matière Première, etc) possèdent des listes par défaut ("Fiches Techniques", "Composition",...). Certaines entités n'en possèdent pas certaines, par exemple, la liste "Fiches Techniques" pour le Fournisseur.
Pour rajouter une liste "Fiches Techniques" sur le modèle Fournisseur, il faut :
1. Sélection le modèle "Fournisseur" situé dans "Entrepôt > Système > Modèles d'entités" .
2. Cliquer sur "Nouvelle liste" (cf image ci-dessous, encadré en rouge) puis dans la liste des types, sélectionner "Vue personnalisée" (cf image ci-dessous, encadré en vert).
3. Puis remplir les champs du formulaire avec le même valeur que l'image ci-dessous puis enregistrer:
La nouvelle liste Fiches Techniques est ainsi créée.
4. Si vous souhaitez créer une liste document (si elle n'existe pas encore), la procédure est la même. Il faut simplement modifier à cette étape les champs suivant : "Nom de la vue personnalisé", mettre : View-documents
"Titre", mettre : Documents
Extracteur
Configuration
BeCPG est installé sur un système avec une configuration par défaut de l’extracteur (beCPG.properties). Cette configuration peut être surchargée via le nouveau champs Paramètres texte situé dans le formulaire d’édition de propriété d’un rapport. (voir encadré vert de l’image ci-dessous).
Cette surcharge de configuration ne nécessite pas le redémarrage du serveur et est prise en compte immédiatement pour les prochaines extractions.
Cas d'utilisation
Prenons l’exemple d’un fournisseur qui possède plusieurs usines et vous avez besoin de générer un rapport par usine pour ce fournisseur. Chaque rapport doit contenir dans leur nom, le nom de l’usine en question. Pour se faire, vous aurez au préalable créé la liste «Fiches Techniques» sur le modèle fournisseur. Une fois, le rapport fournisseur crée et déployé il vous reste à placer dans paramètre texte
le JSON suivant afin de terminer la configuration du rapport :
{
iterationKey : "bcpg:plant",
params : [{
id: "param1",
prop : "cm:name"
}],
prefs : {
assocsToExtract : "bcpg:plants,bcpg:suppliers,bcpg:storageConditionsRef,bcpg:precautionOfUseRef,bcpg:nutListNut",
assocsToExtractWithDataList : "bcpg:compoListProduct"
},
nameFormat : "{entity_cm:name}- {report_cm:name} - {locale} - {param1} ",
titleFormat : " {report_cm:name} - {locale} - {param1}"
}
Puis à générer les rapports du fournisseur.
À savoir
- Le tableau params s’utilise avec la clé iterationKey. Il est donc inutile d’utiliser l’un sans l’autre.
Si vous avez surchargé une clé (mlTextfields, assocsToExtract,…) et que vous l’enlevez du Paramètre texte, l’extracteur utilisera la valeur par défaut.
Les Paramètres définis dans la clé params du JSON sont extrait dans la dataSource (XML) du rapport.
Exemple :
- Si vous avez params qui vaut :
{
...
params : [{
id: "nomUsine"
prop: "cm:name"
},
{
id: "nomCertifUsine"
prop: "bcpg:plantCertifications|cm:name"
}],
...
}
Le Noeud XML correspondant au résultat du paramètre JSON sera :
<entity>
...
<reportParams>
<nomUsine nodeRef="workspace://SpacesStore/108624b8-49da-44a0-be1f-7735b7a35143" prop="cm:name" value="Usine XY"/>
<nomCertifUsine nodeRef="workspace://SpacesStore/108624b8-49da-44a0-be1f-7735b7a35143" prop="bcpg:plantCertifications|cm:name" value="Certification X1"/>
</reportParams>
</entity>
Remarquez que :
- Le nom du noeud est la valeur spécifiée dans id.
- L'attribut nodeRef est le nodeRef du composants courant.
- L'attribut prop est la chaîne de texte saisie dans le JSON.
- L'attribut value est la valeur stockée dans "nomUsine".
Il existe 2 solutions pour récupérer la dataSource contenant le noeud reportParams. La 1ère est d'activer le mode debug en Java. La 2nd est de consulter l'attribut rep:reportTextParameters du noeud du rapport généré.
Nous allons voir la seconde solution, moins lourde à effectuer :
Après avoir configuré le rapport et l'avoir généré :
- aller dans le dossier Document** de l'entité (fournisseur dans notre exemple)
- cliquer sur un rapport PDF.
- récupérer le nodeRefs du document PDF
- retrouver le document via le navigateur de noeud. (Pour savoir comment récupérer un nodeRef et utiliser le navigateur de noeud, lire ceci. Une fois sur le noeud du document, son attribut rep:reportTextParameters contient un JSON sous la forme :
{
"titleFormat":" {report_cm:name} - {nomUsine} - (fr - {locale} )",
"nameFormat":"{entity_cm:name} - {report_cm:name} - {nomUsine} - (fr - {locale} )",
"params":[
{
"nodeRef":"workspace://SpacesStore/108624b8-49da-44a0-be1f-7735b7a35143","prop":"cm:name","id":"nomUsine","value":"Usine XY"
},
{
"nodeRef":"workspace://SpacesStore/108624b8-49da-44a0-be1f-7735b7a35143","prop":"bcpg:plantCertifications|cm:name","id":"nomCertifUsine","value":"Certification X1"
}
],
"prefs":{...}
...
}
Avec le système de correspondance vous êtes en mesure de reconstituer le noeud XML [reportParams] pour vos tests en local.
Paramétrage de l'extracteur
Les paramètres d'extraction permettent de personnaliser l'extraction des données.
Paramètre global | Paramètre par rapport | Description |
---|---|---|
beCPG.product.report.componentDatalistsToExtract | componentDatalistsToExtract | Permet de spécifier les listes a extraire, lorsque la composition est extraite en multiniveau ou dans les associations extraite avec liste, ou dans la liste matière première. Le deuxième argument permet de spécifier sur quel type d’objet extraire la liste |
beCPG.product.report.assocsToExtract | assocsToExtract | Extrait les données de l’association |
beCPG.product.report.assocsToExtractWithImage | assocsToExtractWithImage | Extrait les images de l’association |
beCPG.product.report.assocsToExtractWithDataList | assocsToExtractWithDataList | Extrait les listes de l’association |
beCPG.product.report.assocsToExtractInDataList | assocsToExtractInDataList | Extrait les données de l’association dans une liste |
beCPG.product.report.entityDatalistsToExtract | entityDatalistsToExtract | Spécifie les listes à extraire sur l’entité |
beCPG.product.report.multilineProperties | multilineProperties | Permet d’extraire la propriété dans un champ CDATA pour conserver les retours à la ligne. Instruction, description et commentaire produit sont toujours extrait dans un bloc CDATA les autres sont mis dans un attribut |
beCPG.product.report.priceBreaks | extractPriceBreaks | Permet d'afficher la liste coût en fonction des quantités d'achats |
beCPG.product.report.extractRawMaterial | extractRawMaterial | Extrait les matières premières |
beCPG.product.report.multiLevel | extractInMultiLevel | Extrait la composition en multiniveau |
beCPG.product.report.nonEffectiveComponent | extractNonEffectiveComponent | Extrait les lignes non effectives en plus des lignes effectives |
beCPG.product.report.maxCompoListLevelToExtract | maxCompoListLevelToExtract | Définit le nombre maximal de niveaux extraits pour la compoList (doit être associé à extractInMultiLevel=true) |
beCPG.product.report.extraImagePaths | extraImagePaths | Liste de xPath séparé par ; permettant d'indiquer des images à extraires |
beCPG.product.report.nutList.localesToExtract | nutLocalesToExtract | Extrait les valeurs arrondis des nutriments |
beCPG.entity.report.mltext.fields | mlTextFields | Permet d'extraire toutes les langues saisies d'un champs. |
beCPG.entity.report.mltext.locales | mlTextLocales | Permet de spécifier les langues a extraire pour les champs mlText |
beCPG.product.report.showDeprecatedXml | showDeprecatedXml | Affiche les GDA et les nutriments dans l’ancien format |
beCPG.report.name.format | nameFormat | |
beCPG.report.title.format | titleFormat | |
beCPG.report.includeReportInSearch | includeReportInSearch | Affiche les rapports dans la recherche |
Les valeurs par défaut de chaque paramètre sont :
Paramètre par rapport | Valeur par défaut |
---|---|
componentDatalistsToExtract | Vide (aucune) |
assocsToExtract | bcpg:plants,bcpg:suppliers,bcpg:storageConditionsRef,bcpg:precautionOfUseRef |
assocsToExtractWithImage | bcpg:clients |
assocsToExtractWithDataList | |
assocsToExtractInDataList | |
entityDatalistsToExtract | Vide (toutes) |
multilineProperties | |
extractPriceBreaks | false |
extractRawMaterial | false |
extractInMultiLevel | false |
extractNonEffectiveComponent | false |
maxCompoListLevelToExtract | Vide (pas de niveau max) |
extraImagePaths | Vide (aucune) |
nutLocalesToExtract | locale du rapport |
mlTextFields | |
mlTextLocales | |
showDeprecatedXml | false |
nameFormat | {entity_cm:name} - {report_cm:name} - {locale} - {param1} |
titleFormat | {report_cm:name} - {locale} - {param1} |
includeReportInSearch |
Des valeurs possibles de personnalisation sont:
Paramètre par rapport | Exemple |
---|---|
componentDatalistsToExtract | bcpg:nutList,bcpg:ingLabelingList|bcpg:semiFinishedProduct |
assocsToExtract | bcpg:trademarkRef |
assocsToExtractWithImage | bcpg:suppliers,bcpg:clients |
assocsToExtractWithDataList | bcpg:suppliers,bcpg:clients |
assocsToExtractInDataList | bcpg:nutListNut |
entityDatalistsToExtract | bcpg:nutList,bcpg:ingList |
multilineProperties | cm:title,cm:description |
extractPriceBreaks | true |
extractRawMaterial | true |
extractInMultiLevel | true |
extractNonEffectiveComponent | true |
maxCompoListLevelToExtract | 2 |
extraImagePaths | cm:Mon_x0020_Dossier//[like(@cm:name, '%PNG', false)];cm:Autre_x0020_Dossier/* |
nutLocalesToExtract | # - empty : only the report local # - all : all the supportedLocales # - supportedLocale list : en,en_US,en_CA,en_AU,de,es,fr |
mlTextFields | bcpg:legalName |
mlTextLocales | fr,en |
showDeprecatedXml | true |
nameFormat | {entity_bcpg:erpCode} - {entity_cm:name} - {report_cm:name} - {locale} |
titleFormat | {entity_bcpg:erpCode} - {report_cm:name} - {locale} - {param1} |
includeReportInSearch |
Filtrer les données du rapport
Filtrage par sous-type de rapport :
Ce filtrage vous permettez de masquer les lignes d’une liste dans un rapport.
Au début il faut ajouter les sous-types de rapport dans la liste : Sous-type de rapport\ Administration beCPG >Listes de valeurs >Sous-types de rapport
Ensuite, déclarer le sous-type de rapport sur les modèles de rapport
Le mécanisme de filtrage par sous-type de rapport se base sur l'ajout d'une nouvelle colonne sous-type de rapport dans une liste
Exemple : Dans la liste "nutriments" on peut masquer les nutriments selon l’algorithme suivant :
Par défaut le système affichera les nutriments dans tous les rapports si le sous-type de rapport n’est pas choisi sur une ligne (nutriment). Une fois vous cochez le sous-type de rapport sur une ligne de nutriment, les autres lignes seront masquées dans le rapport.
Filtrage par les paramètres rapport:
Vous pouvez masquer une liste, une propriété ou un élément d’une liste dans tous les rapports ou dans un sous-type de rapport spécifique\ Dans la liste Paramètres rapports vous ajoutez des paramètres sous forme de :
[show/hide]#[(reportKind|optionnel)]#[listName/propertyName/assocName]
show : selectionné , affiche l'élement (par défaut ce dernier est masqué)
hide : selectionné , masque l'élement (par défaut ce dernier est affiché)
reportKind : c’est une option pour dire dans quel modèle de rapport vous allez masquer ou afficher l’élément.
La dernière partie c’est le nom de l’élément que vous voulez masquer et qui peut être une liste, une propriété ou une association
NB : Pour les propriétés de l’entité il faut spécifier le préfixe exemple : cm_name mais ce n'est pas le cas pour les noms des listes ou le nom d'une colonnes (propriété d'une liste). Pour les noms des listes, mettre un "s" à la fin. Exemple: allergenLists
Maintenant il ne vous reste qu'à cocher les paramètres sur votre produit (entité).\ Fiches techniques >Paramétrer les rapports
Bonnes pratiques - BIRT
Performances
Afin de garantir un système stable et performant, il est impératif de minimiser au maximum la taille de la datasource. Il est nécessaire de configurer l'extracteur de manière à obtenir uniquement les informations essentielles pour le rapport. Un avertissement s'affiche sur le produit en cas de datasources excessivement volumineuses.
Comment retrouver les champs internes à beCPG
Les champs internes se trouvent à 2 endroits, sur les propriétés d'un produit et au niveau de sa liste (composition, emballage, etc).
Pour retrouver les champs internes liés aux propriétés, il faut effectuer une édition multiple :
Pour accéder aux champs internes liés aux listes :
- Utilisation des extractions EXCEL disponibles au niveau de chaque liste de l'entité (icône vert).
- Utilisation des noeuds Identification du nom des champs d'une liste
Déclaration d'une fonction
Il arrive parfois qu'un développeur déclare la même fonction dans plusieurs éléments (texte, données, texte dynamique, etc.) du rapport. Cette approche alourdit le rapport, et toute modification de cette fonction nécessite des ajustements dans chaque élément où elle est utilisée.
Pour optimiser la maintenance, la meilleure pratique consiste à mutualiser la fonction dans l'événement "Initialize" du rapport. Ainsi, la fonction est disponible dans l'ensemble du rapport.
Avantages de la mutualisation d'une fonction :
- Réduit la taille du rapport en éliminant les duplications de fonctions.
- Économise du temps lors des opérations de maintenance.
Utilisation d'Alias
L'utilisation d'un alias au niveau des champs d'un jeu de données s'avère utile lorsque la clé d'un champ diffère considérablement du nom affiché au client. Les alias facilitent la recherche d'un champ pour un traitement spécifique.
Gestion des images dans Birt
Pour minimiser la taille du rapport, assurez-vous qu'après chaque modification, toutes les "images intégrées" non utilisées sont supprimées. Pour plus d'efficacité, effectuez ces opérations (suppression, ajout, renommage d'images) via l'onglet Outline d'Eclipse.
Les images doivent être inférieures à 1 MB, une alerte est visualisable sur le produit en cas de dépassement.
Gestion des scripts (événement)
BIRT permet de définir des scripts JavaScript à différents niveaux d'événements (Initialize, onPrepare, onRender, etc.). Lorsqu'un événement contient du code, il s'affiche dans la section "Scripts" de l'onglet Outline. Il est essentiel de vérifier qu'aucun script inutilisé n'est laissé dans le rapport avant sa livraison.
Pour en savoir plus sur les événements et les scripts BIRT, vous pouvez consulter cette documentation.
Gestion des tableaux
Il est recommandé d'éviter l'imbrication de tableaux (Grille ou Table) associée à des conditions de visibilité pour certaines cellules. Cette configuration peut provoquer un décalage de colonnes lors de la génération du rapport. Privilégiez une structure plus simple pour un meilleur contrôle du rendu.
Présentation Vidéo
Cette vidéo présente la modification d'un rapport BIRT:
Rapport de fiche Produit JXLS
Présentation
Le format JXLS est utile pour pouvoir réaliser un rapport de format libre, directement depuis un éditeur de fichier XLSX comme Excel. Ce type de fichier est basé sur l'utilisation de formules SpEL pour l'extraction des données.
Pour en savoir plus: http://jxls.sourceforge.net/
Paramétrage
Voici un exemple de fichier JXLS :
Utilisation des notes
Les notes jouent un rôle très important dans le fichier JXLS. Il faut en effet les utiliser dans 3 situations :
- La définition du fichier et des formules
Cette note est obligatoire et est mise généralement dans la cellule A1.
Dans notre exemple, où les formules s'appliquent de A1 jusqu'à E20:
jx:area(lastCell="E20")
- Les datalists
Pour les datalists, la note doit être mise sur la case de la première colonne. Dans notre exemple, pour la datalist composition, elle est mise en A14. Cette note sert à définir la datalist à exporter et à délimiter la dernière cellule à considérer comme faisant partie de la datalist. Dans notre exemple, il s'agit de B14.
jx:each(items="compoListView.compoList" var="dataListItem" lastCell="B14")
La valeur associée à items dépend de la datalist à exporter. Ici, il s'agit de la liste composition, mais pour la liste packaging cela devient :
jx:each(items="packagingListView.packagingList" var="dataListItem" lastCell="B14")
La valeur de var est TOUJOURS "dataListItem".
Il est également possible de faire des exports de datalists en colonne en rajoutant direction="RIGHT", comme pour l'export Nutriments de notre exemple :
jx:each(items="nutList" var="dataListItem" lastCell="A20" direction="RIGHT")
Il est également important de noter que lors de l'export, les dimensions des tableaux vont automatiquement s'effectuer : si une datalist a 3 valeurs, alors l'export va considérer 3 lignes et décaler l'ensemble de 3 lignes. Donc, pas de risque de chevauchement.
- Les images :
La note sert ici à définir les dimensions de l'image en cellule et d'appeler l'image à exporter. Dans notre exemple :
jx:image(lastCell="E8" src="IMG_Img0" imageType="PNG")
Le nom dans src est toujours précédé par "IMG_".
L'export des champs
L'export des champs se fait en SpEL, donc les formules doivent être comprise entre :
${...}
Comme par exemple pour l'export du code beCPG:
${@beCPG.propValue(nodeRef,'bcpg:code')}
Merci de lire la section SpEL de notre documentation pour savoir comment l'utiliser.
https://docs.becpg.fr/fr/development/spel_formulas.html
Déploiement
Une fois que le fichier XLSX est terminé, il faut le déployer. Pour ce faire, il faut suivre la même procédure de déploiement que pour les rapports BIRT, en choisissant XLSX comme format de rapport, et en renommant l'extension en .jxls.
ATTENTION : à chaque fois que vous allez mettre à jour le rapport, le fichier reprendra l'extension .xlsx : il faudra remettre manuellement le bon format, .jxls.
En savoir plus
Les Exports de recherche
Exports de recherche EXCEL
Les exports de recherche Excel sont faciles à créer.
Un fichier Excel correspond à un seul type d'entité (produit fini, MP, ...)
Il comprend plusieurs onglets. Chaque onglet correspond à une liste de l'entité (propriété, ingrédients, composition, ....). Le premier onglet correspond toujours à la liste propriété de l'entité. C'est au niveau de ce premier onglet que vous devez définir le type d'entités sur lequel porte votre recherche.
C'est à vous de définir : quelle entité, quelles listes et quels champs vous interessent.
Pour pouvoir créer votre fichier, vous allez avoir besoin de connaître les noms des champs internes à beCPG (voir Comment retrouver les champs internes à beCPG ?
Premier onglet
Définir le type d'entités :
Quelque soit l'onglet, il y a aura toujours une information dans la case A1 de votre fichier EXCEL.
Dans le cadre du 1er onglet :
- A1 : TYPE
- A2 : le type d'entité sur lequel porte votre recherche (bcpg:finishedProduct, bcpg:rawMaterial, ...)
TYPE | bcpg:finishedProduct | ||||
---|---|---|---|---|---|
COLUMNS | cm:name | bcpg:code | bcpg:erpCode | bcpg:productHierarchy1 | bcpg:productHierarchy2 |
# | Nom Code | Code Becpg | Code ERP | Famille | Sous famille |
Autres onglets
Sur les onglets suivants vous pouvez extraire les datalists de l'entité soit le contenu des différentes listes.
- A1: TYPE
- A2: La liste sur laquel porte votre extraction
Exemple la liste "Composition"
TYPE | bcpg:compoList | ||
---|---|---|---|
COLUMNS | bcpg:erpCode | bcpg:compoListProduct | bcpg:compoListProduct_bcpg:productHierarchy1 |
# | Code Erp | Composant de la recette | Famille du composant |
Spécificités
Vous pouvez utiliser le prefix entity_ pour afficher des propriétés de l'entité dans les onglets de type datalists.
- Export des datalists en colonne
Depuis la version 2.5, il est également possible d'afficher les datalists d'une entité en colonne, c'est-à-dire que vous n'aurez plus besoin de créer plusieurs onglets pour avoir les éléments d'une datalist liés à un produit. Avec ce nouvel export, vous aurez les champs de votre entité suivis des éléments de la datalist sur la même ligne.
Formule à utiliser :
nom_de_la_datalist [ nom_de_l'association # élément_de_recherche == " valeur_de_recherche " ]_ champ_a_afficher
Exemple:
Export de la présence fortuite de l'allergène "Soja et produits à base de soja" des produits finis
bcpg:allergenList[bcpg:allergenListAllergen#bcpg:allergenCode == "FX5"]_bcpg:allergenListInVoluntary
TYPE | bcpg:finishedProduct | |||
---|---|---|---|---|
COLUMNS | cm:name | bcpg:code | bcpg:erpCode | bcpg:allergenList[bcpg:allergenListAllergen#bcpg:allergenCode == "FX5"]_bcpg:allergenListInVoluntary |
# | Nom | Code Becpg | Code ERP | Présence fortuite de soja et produits à base de soja |
- Les caractéristiques dynamiques :
Dans les listes composition, emballage ou la liste des process, il est possible d'avoir des caractéristiques dynamiques. Si vous souhaitez la liste des caractéristiques dynamiques, par entité :
TYPE | bcpg:dynamicCharactList | |||
---|---|---|---|---|
COLUMNS | bcpg:code | bcpg:dynamicCharactTitle | bcpg:productHierarchy1 | bcpg:productHierarchy2 |
# | Code Becpg | Caracteristiques dynamiques |
Si vous récupérez la valeur d'une caractéristique dynamique spécifique de la liste composition par exemple, votre entête de colonne se construira de la manière suivante : dyn_nom_de_propriété
Exemple :
TYPE | bcpg:compoList | ||
---|---|---|---|
COLUMNS | bcpg:erpCode | bcpg:compoListProduct | dyn_nom_de_la_caract_dynamique |
# | Code Erp | Composant de la recette | nom de la caract dynamique |
- Multiniveaux et Formules
Pour les types bcpg:compoList et bcpg:packagingList vous pouvez utiliser des paramètres d'extraction multiniveau (AllLevel, MaxLevel2, OnlyLevel2) ainsi que des formules dont les entêtes de colonne se construiront de la manière suivante : formula|props["nom de la formule"] (exemple en indiquant dans l'entête de colonne : formula|props["qty"])
TYPE | bcpg:compoList | OnlyLevel2 | |
---|---|---|---|
COLUMNS | bcpg:erpCode | bcpg:compoListProduct | bcpg:compoListProduct_bcpg:erpCode |
# | Code Erp de l'entité | Produit Composant | Code ERP du composant |
- Allocation :
Le plugin d'allocation permet d'extraire les informations sur les matières utilisées dans les collections ou les produits. Pour l'utiliser, il est nécessaire de spécifier le paramètre "Allocation" sur le type bcpg:compoList. Les champs disponibles sont :
- "Quantité" (kg) : formula|props["qty"]
- "Quantité par produit" (%) : formula|props["qtyForProduct"]
- Champs de l'entité : entity|
- Champs du produit : product|
Voici un exemple de structure de données pour utiliser ce plugin:
TYPE | bcpg:compoList | Allocation | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
COLUMNS | bcpg:erpCode | cm:name | formula | props["qty"] | formula | props["qtyForProduct"] | entity | cm:name | entity | bcpg:productCollectionHierarchy1 | product | cm:name | product | bcpg:productHierarchy1 |
# | Code Erp | Matière | Qté | Qté par produit | Collection | Famille de la collection | Produit | Famille du produit |
Fonction tableur
Utiliser les résultats de vos recherches en intégrant un onglet supplémentaire avec des formules EXCEL (rechercheV, rechercheH, ....) Pour identifier l'onglet qui utilise la fonction tableur d'EXCEL, la première case (A1) doit contenir le symbole #.
Vous pouvez aussi définir une colonne en y insérant une formule EXCEL directement ou un texte du type:
excel|SUM(A1:A10)
Export des images
Plusieurs formules permettent de récupérer les images stockées sur les entités dans beCPG :
- Récupérer l'url :
formula|@img.getEntityImagePublicUrl()
formula|@img.getEntityImagePublicUrl($nodeRef)
formula|@img.getImagePublicUrlByPath($nodeRef, "./cm:Images/cm:produit.jpg")
formula|@img.getImagePublicUrlByPath($nodeRef, "./cm:Dossier/"+dataListItem.name+".jpg")
Une fois que vous avez l'URL publique de l'image dans la colonne spécifique, vous pouvez l'utiliser dans une deuxième colonne en utilisant la fonction Excel =IMAGE pour insérer l'image dans Excel.
excel|IMAGE(H2)
- Récupérer directement l'image dans l'export :
image|@img.getEntityImageBytes()
image|@img.getEntityImageBytes($nodeRef)
image|@img.getImageBytesByPath($nodeRef, "./cm:Images/cm:produit.jpg")
image|@img.getImageBytesByPath($nodeRef, "./cm:Dossier/"+dataListItem.name+".jpg")
$nodeRef correspond à une formule SPEL qui vous permet de récupérer le noeud de l'image. ex: formula|@img.getEntityImagePublicUrl(entity) ou pour une liste formula|@img.getEntityImagePublicUrl(datalistItem)
Exports de recherche BIRT
Uniquement pour les rapports : BIRT
- La définition des données à exporter pour le rapport, est définit
dans ExportSearchQuery.xml. Ce fichier définit les attributs du
produit à exporter pour l'exécution du rapport :
- propriétés du produit (nom, état, etc...);
- associations du produit (fournisseurs, clients, etc...);
- caractéristiques du produit (coûts, nutriments, allergènes, etc...).
Pour créer ou modifier un rapport BIRT, se référer au chapitre « Modification d'un modèle de rapport produit ».
Exports de recherche ZIP
Il est possible d'exporter des documents provenant d'entités dans un fichier ZIP. Pour cela, il faut créer un fichier XML dans Entrepôt/Système/Rapports/Exports de recherche/Export des produits
Ce fichier devra contenir le paramétrage de l'export.
Voici un exemple de fichier d'export ZIP :
<export format="zip">
<file path="cm:Documents/*" name="{bcpg:erpCode} - {doc_cm:name}" destFolder="Documents"/>
<file entityFilter="js(entity.assocs['bcpg:productGeoOrigin'] && entity.assocs['bcpg:productGeoOrigin'].length > 0 && entity.assocs['bcpg:productGeoOrigin'][0].properties['bcpg:charactName'] == 'Afrique')" path="*/*[like(@cm:name, '%pdf', false)]" name="{doc_cm:name}" destFolder="A3P"/>
</export>
Ici, la première ligne permet d'exporter tous les documents contenus dans les entités recherchées, puis de définir un nom (name) et un dossier (destFolder) dans le ZIP pour chaque document.
La deuxième ligne effectue un filtrage sur les entités via entityFilter : ici, on exécute du code Javascript pour tester si l'entité va être parcourue ou non par le système lors du scan des documents. A noter qu'il est également possible d'exécuter du code SPEL.
Installation des exports de recherche
Ces rapports sont définis dans le dossier : /Système/Rapports/Exports de recherche
Ces rapports sont des rapports BIRT qui exportent le résultat d'une recherche.
L'ajout d'un nouveau rapport se fait ainsi :
- Ajouter un dossier;
- Dans le dossier, ajouter le rapport BIRT ou EXCEL en renseignant le nom et ses métadonnées. Le nom sera affiché sur la page de résultats d'une recherche avancée. L'extension du fichier doit être xls pour un rapport EXCEL et rptdesign pour un rapport BIRT.
- Définir les permissions sur le dossier du rapport. Les personnes doivent avoir la permission en lecture pour voir le rapport dans le résultat d'une recherche.
Parmi les métadonnées à renseigner, nous avons :
- Le Nom de l'export tel que généré par le système.
- Le Type de rapport : laisser "ExportSearch" dans ce cas.
- Le Type d'objet : permet de filtrer les entités concernées par l'export. Pour filtrer sur les PF :
{http://www.bcpg.fr/model/becpg/1.0}finishedProduct
Pour filtrer sur les SF :
{http://www.bcpg.fr/model/becpg/1.0}semiFinishedProduct
Pour filtrer sur les MP :
{http://www.bcpg.fr/model/becpg/1.0}rawMaterial
Pour filtrer sur les EMB :
{http://www.bcpg.fr/model/becpg/1.0}packagingMaterial
Pour filtrer sur les Kit :
{http://www.bcpg.fr/model/becpg/1.0}packagingKit
Pour filtrer sur l'ensemble des produits (PF, SF, MP, Emballage, Kit) :
{http://www.bcpg.fr/model/becpg/1.0}product
Nombre maximum de résultats : indique le nombre maximum d'éléments à extraire dans l'export. Par défaut, 1000.
Est désactivé : permet de désactiver le rapport sans le supprimer.