Rapports et fiches techniques
La fonction "Rapport et fiche technique" permet de générer, visualiser et exporter des documents à partir des données saisies dans beCPG. La génération des rapports et fiches techniques s'appuie sur la solution de reporting BIRT (Business Intelligence and Reporting Tools).
La documentation complète de BIRT est disponible à l'adresse suivante : Documentation BIRT. Elle présente l'outil, ses concepts de base, ses fonctionnalités avancées et les bonnes pratiques de création de rapports.
Rapport de produit
Les rapports des fiches produit sont disponibles dans "Administration" > "Rapports" > "Rapports de fiche produit", classés par type d'entité. Ce dossier contient deux types de fichiers :
- les fiches techniques : l'ensemble des fichiers .rptdesign ;
- les fichiers de langues : les fichiers .properties qui contiennent les traductions des libellés des fiches techniques.
Pour ajouter un nouveau rapport, copiez un rapport existant et chargez la version du rapport que vous souhaitez déposer sur le système. Modifiez ensuite les métadonnées de votre rapport :
- le nom du rapport ;
- le type d'objet, qui définit à quel type de produit le rapport s'applique :
- Matière première :
{http://www.bcpg.fr/model/becpg/1.0}rawMaterial - Semi-fini :
{http://www.bcpg.fr/model/becpg/1.0}semiFinishedProduct - Produit fini :
{http://www.bcpg.fr/model/becpg/1.0}finishedProduct - Emballage :
{http://www.bcpg.fr/model/becpg/1.0}packagingMaterial - Fournisseur :
{http://www.bcpg.fr/model/becpg/1.0}supplier - Unité logistique :
{http://www.bcpg.fr/model/becpg/1.0}logisticUnit - type général :
{http://www.bcpg.fr/model/becpg/1.0}product. Ce type général couvre les matières premières, semi-finis, produits finis, ressources, emballages, kits d'emballage et unités logistiques.
- Matière première :
- le type de modèle :
- Modèle système : indique si le rapport est généré automatiquement pour ce type de produit. Si le rapport n'est pas un rapport système, l'utilisateur peut le générer en le sélectionnant lorsqu'il édite le produit.
- Modèle par défaut : indique que le rapport est le rapport par défaut du produit, c'est-à-dire le rapport affiché sur la fiche du produit. Il ne peut y avoir qu'un rapport par défaut par type de produit. Les rapports qui ne sont pas des rapports par défaut sont placés dans le dossier « Documents » du produit lors de la génération du rapport.

Les autres métadonnées sont les suivantes :
- Format du rapport : par défaut, le format utilisé est le PDF. beCPG garantit ce format pour ses rapports standards. Le format Word est proche du PDF. Un passage au format Excel peut nécessiter des modifications de la structure du rapport.
- Requête AFTS : permet de spécifier une requête en dur.
- Nombre maximum de résultats : à ne pas remplir pour les fiches techniques. Ce champ concerne les fichiers d'export.
- Est désactivé : masque le rapport dans l'onglet "Fiches techniques" des produits. Les rapports associés restent présents dans la liste "Documents".
- Fichiers associés : associe le rapport aux fichiers de langues .properties, pour générer automatiquement le rapport dans différentes langues. Le fichier
becpg-report.cssgère le style du rapport, et le fichierlogo.pngdéfinit le logo affiché en haut à gauche du rapport. - Langue du rapport : détermine les langues disponibles dans l'onglet "Fiches techniques" des entités.
- Rapports : permet de filtrer sur le sous-type de rapport. Pour plus de détails, voir Une liste Rapport.
- Paramètres texte : contient les paramètres de l'extracteur de la fiche technique. S'il en manque, la fiche apparaît incomplète.
Logo du rapport
Pour personnaliser vos fiches techniques standards avec votre propre logo, remplacez le fichier logo.png dans "Administration beCPG" > "Rapports" > "Rapports de fiche produit".
Style du rapport
Vous modifiez le style du rapport avec le fichier becpg-report.css présent dans l'administration. Ce fichier fait partie des fichiers associés au rapport.
Ajout de la liste "Fiches techniques" sur une entité
Les entités (produits finis, matières premières, etc.) possèdent des listes par défaut, dont la liste "Fiches techniques". Certaines entités, comme le fournisseur, n'en possèdent pas. Pour ajouter la liste "Fiches techniques" sur le modèle Fournisseur, ouvrez le modèle dans "Administration beCPG" > "Modèles d'entités" > "Fournisseur".
Pour plus d'informations, voir Ajout d'une liste personnalisée.
BIRT
Prérequis
Pour créer ou modifier les fiches techniques, installez sur votre ordinateur les logiciels suivants :
- Eclipse BIRT (les différentes versions de BIRT sont disponibles sur cette page : https://download.eclipse.org/birt/downloads/) ;
- le plugin Eclipse RessourceBundle.
Utilisez la version de l'éditeur BIRT qui correspond à votre version de beCPG :
| beCPG Report Version | Birt Version | Java Version | Eclipse RCP Birt Version |
|---|---|---|---|
| 4.20.0 | 4.20 | JDK 17 | BIRT RCP 4.20 |
| 4.17.0 | 4.17 | JDK 17 | BIRT RCP 4.17 |
| 4.15.0 | 4.15 | JDK 17 | BIRT RCP 4.15 |
| 3.2 | 4.8 | JDK 11 | Eclipse Photon |
Des connaissances de base en XML et JavaScript, voire en XPath (optionnel), sont recommandées.
Note : pour récupérer et déposer les rapports, vous devez être administrateur du système. Pour plus d'informations, voir la documentation des permissions.
Création du rapport
Partez de préférence d'un rapport existant et modifiez-le. Pour un rapport très spécifique, vous pouvez en créer un nouveau :
- "Window" > "Open perspective" > "Other" > "Report Design".
- "File" > "New" > "Project" > "Business Intelligence and Reporting Tools" > "Report project", puis nommez le projet.
- "File" > "New" > "Report", puis nommez le rapport et choisissez la trame de départ.
Modification d'un modèle de rapport
Vous concevez le rapport dans le designer Eclipse BIRT, qui comporte les éléments suivants :

- Data Explorer :
- la data source ;
- les data sets.
- Outline : pour visualiser la structure du rapport.
- Palette : la boîte à outils qui fournit des éléments de rendu tels que des tableaux, des listes, des zones de texte, etc.
- La prévisualisation, pour générer le rapport en local. La méthode est décrite dans la section Générer le rapport en local.
- La page centrale, dont les onglets permettent de paramétrer le rapport.
Le rapport BIRT doit être connecté à une source de données (la datasource) pour afficher le résultat en local et tester le rapport sans le déposer sur le système.
Extraction de la datasource
La datasource est un fichier XML que vous pouvez extraire avec ce lien :
javascript:let url = new URL(window.location); window.location = url.origin + '/alfresco/service/becpg/report/datasource?nodeRef=' + url.searchParams.get('nodeRef');
Enregistrez ce lien dans vos favoris, puis utilisez-le sur le produit dont vous souhaitez extraire la datasource.
Un autre lien existe pour les systèmes en SSO :
javascript:let url = new URL(window.location); window.location = url.origin + '/share/proxy/alfresco/becpg/report/datasource?nodeRef=%27%20+%20url.searchParams.get(%27nodeRef%27);
Vous pouvez aussi construire l'URL manuellement :
http://{@SERVEUR}:{PORT}/alfresco/service/becpg/report/datasource?nodeRef={NODE_REF}
Avec :
- {@SERVEUR} : adresse IP du serveur (ex : inst1) ;
- {PORT} : le numéro du port de communication (optionnel) ;
- {NODE_REF} : identifiant d'un produit, disponible dans l'URL du navigateur lorsque vous êtes sur un produit, sous la forme
workspace://SpacesStore/2aad6284-afc2-4d89-8bbf-bd3dd50ff1bc.
Différents extracteurs permettent d'optimiser la génération de la datasource. Ils sont décrits dans la section Extracteur.
Enregistrez ensuite la datasource dans le dossier qui accueillera les fiches techniques.
Il existe deux procédures pour ajouter une datasource :
- lors de la création d'un rapport : faites un clic droit sur "Data Sources" > "New Data Source" > "XML Data Source". Choisissez un nom pour votre datasource, puis sélectionnez le fichier ;
- lors de la modification d'un rapport : pour changer de datasource, cliquez sur "Data Explorer" > "Data Sources" > "DataXml". Dans la fenêtre qui s'ouvre, sélectionnez la datasource dans vos fichiers.

Pour vérifier que la datasource est bien reliée à votre rapport, cliquez sur "Test connection". En cas d'erreur, vérifiez le contenu de votre fichier datasource.xml.

Gestion des data sets
Un data set interroge la datasource et sélectionne des attributs. En général, un data set correspond à un onglet de beCPG.
Création d'un data set
Pour créer un data set, faites un clic droit sur "Data Sets" > "New Data Set". Nommez le data set en camelCase (exemple : "raw material" s'écrit "rawMaterial" en camelCase).

Une fois le data set créé, double-cliquez dessus pour le modifier. Le formulaire permet d'ajouter des champs ("Columns Mapping") et des champs calculés ("Computed Columns"), d'appliquer des filtres ("Filters") et de visualiser les résultats ("Preview Results").

Row Mapping
Deux cas sont possibles :
entity, pour utiliser les champs des propriétés de votre entité ;dataLists > xLists > xList, pour utiliser les champs d'une liste donnée.

Columns Mapping
Choisissez les champs à afficher dans le rapport. Cet onglet affiche le nom technique des champs. Un même data set peut alimenter plusieurs tables du rapport : il n'est pas nécessaire d'en créer un par table.
Lorsque vous ajoutez un champ au data set, vérifiez le type de la donnée (float, boolean, text, etc.) pour obtenir le bon affichage à la génération du rapport.

Computed Columns (colonnes calculées)
Les colonnes calculées limitent les calculs réalisés directement dans les champs du rapport.
La colonne calculée runningCount est fréquemment utilisée. Pour la créer, ouvrez l'onglet "Computed Columns" de votre data set et remplissez la fenêtre comme ci-dessous. Ce champ calculé permet de masquer une table vide, ce qui évite d'afficher uniquement l'en-tête du tableau.

Filtres
Filtrez directement dans le data set si le filtre s'applique à toutes les tables qui utilisent ce data set. Sinon, filtrez au niveau de la table.
Le tableau ci-dessous regroupe des paramètres simples, utiles pour le paramétrage des fiches techniques. Les exemples portent sur ingList :
| Cas | Champs | Operator | Valeur 1 | Note | ||||
|---|---|---|---|---|---|---|---|---|
| Afficher quelques ingrédients | `row["inglistIng"]=="water"\ | \ | row["ingListIng"]=="alcohol"\ | \ | row["inglistIng"]=="glycerin"` | is True | ||
| Afficher un seul ingrédient | row["ingListIng"] |
Equal to | "water" |
Cette méthode est équivalente à celle de la ligne précédente. | ||||
| Afficher les ingrédients uniquement si la quantité est supérieure à 0.5 % | row["ingListQtyPerc"] |
Greater than | 0.5 |
|||||
| Afficher uniquement les ingrédients OGM | row["ingListIsGMO"] |
is True | Paramétrez correctement le type des champs booléens ; sinon, utilisez row["ingListIsGMO"] Equal to "true". |
|||||
| Afficher uniquement les ingrédients qui contiennent le mot "alcohol" | row["ingListIng"] |
Like | "alcohol" |
|||||
| Retirer de la table les ingrédients dont la quantité est nulle | row["ingListQtyPerc"] |
is not null | Vous pouvez aussi utiliser "is True" avec : `row["ingListQtyPerc"]!="null"\ | \ | row["ingListQtyPerc"]!=""` |
Preview Results
Pour prévisualiser le contenu du data set, cliquez sur "Preview Results". Une fois le data set paramétré, glissez-déposez ses données dans le rapport.
Data sets joints
Vous pouvez joindre deux data sets s'ils ont un champ en commun.
Pour créer un data set joint, faites un clic droit sur "Data Sets" > "New Joint Data Set".

Dans la fenêtre qui s'ouvre, choisissez les deux data sets et le champ qui les relie, puis le type de jointure. La jointure la plus utilisée est inner join : elle « colle » les deux data sets sur le champ commun.
Paramètres rapports
Vous pouvez aussi filtrer sur des paramètres rapports, présents dans la liste de valeurs "Paramètres rapports". Ils permettent de 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", ajoutez des paramètres sous la forme :
[show/hide]#[(reportKind|optionnel)]#[listName/propertyName/assocName]
- show : affiche l'élément (masqué par défaut) ;
- hide : masque l'élément (affiché par défaut) ;
- reportKind : option qui indique dans quel modèle de rapport l'élément est masqué ou affiché ;
- la dernière partie est le nom de l'élément à masquer : une liste, une propriété ou une association.
Vous sélectionnez ensuite ces paramètres dans l'onglet "Rapports" de votre entité.

Le Nutri-Score
Le Nutri-Score apparaît surtout dans les conditions de visibilité des rapports. Par exemple, dans le rapport « Fiche Technique Client », la condition de visibilité du Nutri-Score est la suivante :
if (row["nutrientProfilingClass"] != null && row["nutrientProfilingClass"] != "") {
BirtStr.indexOf("showNutritionalScore", row._outer["codeReportParameters"]) == -1;
} else {
true;
}
Pour trouver l'élément qui porte la condition de visibilité, recherchez dans le rapport le paramètre concerné.
Les nutriments optionnels
Ce paramètre correspond à un filtre sur la table des nutriments. Par exemple, dans le rapport « Fiche Technique Client », la table porte le filtre suivant :
| Condition | Operator | ||
|---|---|---|---|
| `row["regulDisplayMode"]=="M" \ | \ | (BirtStr.indexOf("showOptionalNutrients", row["codeReportParameters"]) != -1 && row["regulDisplayMode"]=="O")` | is True |
Les différents coûts
Dans la « Fiche Coûts », les valeurs de la donnée Type de coût correspondent aux coûts cochés dans les paramètres de l'onglet. L'affichage est dynamique :
if (row["reportParametersCode"] != null && row["reportParametersCode"].indexOf("previousCost") != -1) {
reportContext.getMessage("costType.previousCost", reportContext.getLocale());
} else if (row["reportParametersCode"] != null && row["reportParametersCode"].indexOf("futureCost2") != -1) {
reportContext.getMessage("costType.futureCost2", reportContext.getLocale());
} else if (row["reportParametersCode"] != null && row["reportParametersCode"].indexOf("futureCost3") != -1) {
reportContext.getMessage("costType.futureCost3", reportContext.getLocale());
} else if (row["reportParametersCode"] != null && row["reportParametersCode"].indexOf("futureCost4") != -1) {
reportContext.getMessage("costType.futureCost4", reportContext.getLocale());
} else if (row["reportParametersCode"] != null && row["reportParametersCode"].indexOf("futureCost") != -1) {
reportContext.getMessage("costType.futureCost", reportContext.getLocale());
} else {
reportContext.getMessage("costType.currentCost", reportContext.getLocale());
}
Filtrage par sous-type de rapport
Ce filtrage masque des lignes d'une liste dans un rapport.
Ajoutez les sous-types de rapport dans "Administration beCPG" > "Listes de valeurs" > "Sous-types de rapport", puis déclarez le sous-type au niveau du modèle de rapport.

Générer le rapport en local
Pour tester le rapport en local, cliquez sur "Run" > "View report" > "As XXX".

XXX peut être HTML, PDF ou XLSX. Le format HTML a l'avantage d'afficher les erreurs du rapport, pour les corriger.

Utilisation de la palette
Les éléments les plus utilisés sont les suivants :
- Label : pour saisir des notes ou des libellés de champs en dur. Permet aussi de créer des espaces entre des éléments du rapport.
- Data : s'utilise dans une table ou directement dans le rapport. Pour afficher la donnée souhaitée, paramétrez l'onglet "Binding". Pour modifier les champs disponibles dans votre table ou votre data, cliquez à nouveau sur votre data set, puis cochez ou décochez les champs concernés.

Les champs de type données peuvent aussi porter des conditions ou concaténer plusieurs attributs. Par exemple, pour afficher plusieurs champs dans un seul élément Data :
"Emballage : " + dataSetRow["palletBoxName"] + ", tare indicative (g) : " + dataSetRow["pmBoxTare"] + ", dimensions (mm) : " + dataSetRow["pmBoxDimensions"]
Vous pouvez aussi utiliser l'élément Dynamic Text. Pour éditer cette mise en forme :
- Faites un clic droit sur l'élément Data ou Dynamic Text.
- Choisissez "Edit Value/Expression".
- Renseignez l'expression.
Les autres éléments de la palette sont les suivants :
- Grid : tableau statique, utile pour agencer la fiche technique. Une grid ne peut pas être filtrée.
- Table : affiche dynamiquement les données de vos listes. Pour ajouter une table, glissez le data set concerné à l'endroit souhaité du rapport. Une fenêtre s'ouvre pour choisir les champs de la table.
- Text
- Dynamic Text : texte dynamique. Exemple : pour mettre en gras des mots sur l'étiquette, utilisez des balises HTML.
- Image : l'ajout d'une image statique est simple. L'ajout d'une image dynamique est plus complexe : 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 :
- ajoutez l'image ;
- choisissez "Dynamic Image" en référençant l'identifiant de l'image passé à la datasource, ex :
row["productImage"]; - utilisez une expression pour les champs de type données.
- List : liste dynamique, en fonction du nombre de lignes du data set.
- Chart : graphique.
- Cross Tab : tableau croisé dynamique.
Vue du rapport
Layout
Cette vue permet de construire le rapport avec les sous-onglets de "Property Editor" : "Properties", "Binding", "Groups", "Map", "Highlights", "Sorting", "Filters".
Page maître (Master page)
La page maître permet de définir :
- les en-têtes et pieds de page du rapport ;
- l'orientation du rapport (portrait ou paysage) ;
- la largeur et la hauteur du rapport.
Script
L'onglet "Script" permet de programmer des fonctions utilisables dans le rapport. Ces scripts s'exécutent à différentes étapes de l'exécution du rapport, selon l'événement. Un script peut être défini sur un élément précis ou sur le rapport.
XML Source
Ce sous-onglet affiche le rapport au format XML.
Property Editor (onglet Layout)
Les propriétés
Cet onglet comporte plusieurs sections. Voici les principales.
GENERAL
- Gère l'affichage du texte (gras, italique, souligné, taille, police, couleur).
- Gère la hauteur et la largeur de l'élément. Dans une table ou une grid, réglez toujours la largeur des cellules ici, et non en redimensionnant directement la colonne.
- Display gère la disposition de plusieurs éléments dans une même cellule (en ligne ou en bloc).
- Style applique un style du fichier .css.
- Vertical alignment définit la position verticale de l'élément dans une cellule.

BORDER
- Gère les bordures des éléments (table, cellule de table, label, etc.).
MARGIN
- Gère l'espace autour de l'élément.
PAGE BREAK
Gère l'apparition de l'élément (table ou grid) sur la page ou sur l'onglet Excel :
- avec before, l'élément apparaît sur une nouvelle page ;
- avec after, l'élément suivant apparaît sur une nouvelle page ;
- avec page break interval, le nombre saisi détermine à partir de combien de lignes l'élément passe sur une nouvelle page ;
- Repeat header : si coché, l'en-tête du tableau apparaît sur toutes les pages.
VISIBILITY
Cette section existe pour tous les éléments de la palette :

- non coché : l'élément est toujours visible ;
- coché : l'élément est toujours masqué ;
- coché avec une condition : l'élément est masqué uniquement si la condition est vérifiée.
Le tableau suivant regroupe des cas fréquents de condition de visibilité :
| Cas | À faire | ||
|---|---|---|---|
| Masquer une colonne d'une table | Cliquez sur la table > cliquez sur la colonne > ouvrez "Visibility" > cochez "Hide Element". | ||
| Dans une grid, masquer un label associé à une data si cette data est vide | Cliquez sur le label > ouvrez "Visibility" > cochez "Hide Element" > cliquez sur le bouton JavaScript syntax. Dans cette fenêtre, cliquez sur "Available Column Binding" > Grid > double-cliquez sur la data concernée. Saisissez l'instruction suivante : `if (row["nomTechnique"] == null \ | \ | row["nomTechnique"] == ""){ true }else{ false }` |
| Afficher une donnée uniquement si la langue du rapport est l'espagnol | reportContext.getLocale() == "es" |
||
| Masquer une table si la liste est vide | Ajoutez au data set de la liste la colonne calculée runningCount. Cliquez sur la table > ouvrez "Visibility" > cochez "Hide Element" > dans l'expression, saisissez : `row["runningCount"] == null \ |
\ | row["runningCount"] == 0` |
Binding
Cet onglet permet de sélectionner le data set associé (surtout pour une table ou une data) et les champs utilisés. Ajoutez uniquement les champs réellement utilisés dans l'élément : vous pourrez en ajouter ou en retirer ensuite. Le fonctionnement est décrit plus haut.
Groups
Cet onglet permet d'ajouter un groupe à la table. Vous pouvez aussi faire un clic droit sur la ligne "Detail" > "Insert Group". Le processus est décrit plus bas.
La mise en forme (Highlights)
Cet onglet modifie le style, la police ou la couleur de la cellule selon des conditions. Dans l'exemple ci-dessous, si l'élément de la composition est un semi-fini (SF ou SFL), il apparaît en gras dans le rapport.

Le tri
Cet onglet modifie l'ordre des éléments d'une table. Vous pouvez forcer l'ordre à l'aide de colonnes calculées.
Les filtres
Cet onglet limite les éléments du data set affichés dans la table. Le fonctionnement est le même que pour le filtre du data set.
Cas de la table
La table comporte trois parties :
- le header ;
- le detail ;
- le footer.
Le header contient l'en-tête du tableau, avec le nom des champs de la ligne Detail. La ligne Detail se répète autant de fois qu'il y a de données.
Le footer n'est pas répété : il permet par exemple d'afficher le total d'une colonne. Pour ajouter une somme sur une colonne, conservez le footer de la table, ou ajoutez-le s'il est absent.

Une fois le footer présent, faites un clic droit "Insert" > "Aggregation". Choisissez la fonction (SUM pour une somme) et indiquez dans "Expression" le champ concerné.


Lorsque vous cliquez sur une table, l'onglet "Groups" apparaît. Selon les données du tableau, des doublons peuvent apparaître, notamment sur les noms ou les codes des entités. Pour les supprimer, créez un groupe sur le nom ou le code des entités : une nouvelle ligne apparaît, dans laquelle vous glissez tous les champs de la ligne Detail.

Vous pouvez aussi modifier l'ordre des lignes de la table, par exemple par quantité croissante ou décroissante. Pour classer les éléments selon une valeur d'une liste de valeurs, utilisez une colonne calculée. Exemple :
Vous souhaitez afficher la liste des ingrédients de votre entité, en commençant par ceux qui proviennent de France. Ouvrez les colonnes calculées de votre data set ingList, cliquez sur "New" et remplissez la fenêtre comme ci-dessous :
| Champ | Valeur |
|---|---|
| Column name | ingFrance |
| Data Type | Integer |
| Expression | var france = 0; if (String(row["ingListGeoOrigin"]).indexOf("France") !== -1) { france = 1; } france; |
Cas des tables imbriquées liées : par exemple, dans le rapport standard « ProductReport_ingList », vous souhaitez afficher la liste des ingrédients dans la table des matières premières (fournisseurs, etc.). Pour lier les deux tables, utilisez les filtres de la table imbriquée.

Les clés de langue
Les éléments issus de beCPG (souvent les tables) sont traduits si la traduction existe dans beCPG.
Les clés de langue servent aux éléments saisis en dur dans le rapport (souvent les labels). Elles figurent dans les fichiers .properties associés à la fiche technique dans beCPG.
Pour associer une clé de langue à un élément saisi en dur, cliquez sur l'élément, puis ouvrez l'onglet "Localization" des propriétés. Choisissez ensuite la clé de langue à associer.

Pour modifier ou créer des clés de langue dans les fichiers .properties, éditez le fichier avec ResourceBundle : clic droit > "Edit with ResourceBundle".
Pensez à mettre à jour vos fichiers .properties dans beCPG.
Déploiement
Une fois le rapport édité sous Eclipse, sauvegardez-le au format .rptdesign.
- Fiches techniques : placez-vous dans "Entrepôt" > "Système" > "Rapports" > "Rapports de fiche produit" > "Entité" et déposez le rapport.
- Fichiers de langues (properties) : placez-vous dans "Entrepôt" > "Système" > "Rapports" > "Rapports de fiche produit" et déposez le fichier.
Pour les fichiers .rptdesign, changez le type en "Modèle de rapport".
Dans "Éditer les propriétés" :
- cochez Modèle système si le rapport doit être attribué à tous les produits du même type ;
- cochez 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é, ouvrez le produit concerné et sélectionnez le rapport à la main via le bouton "Paramètres rapport".
Pour traduire le rapport en différentes langues, sélectionnez les fichiers de langues associés, ainsi que les langues concernées dans la liste déroulante. Sélectionnez ensuite ces langues dans les "Paramètres rapport" d'un produit.
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 à deux endroits : sur les propriétés d'un produit et au niveau de ses listes (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 verte).
- Utilisation des nœuds : 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 Mo ; 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.
Problèmes d'affichage de la fiche technique sur le système du client
Si la fiche technique s'affiche mal sur le système du client, vérifiez les points suivants :
- la version de la fiche : vous pouvez la modifier directement sur la fiche ;
- les paramètres de l'extracteur renseignés dans les propriétés du rapport ;
- les traductions : si elles ne se font pas automatiquement, vérifiez que votre rapport est lié aux fichiers .properties et que ceux-ci sont à jour.
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 champ "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 : vous avez besoin de générer un rapport par usine pour ce fournisseur. Chaque rapport doit contenir dans son nom le nom de l’usine en question. Pour ce faire, vous aurez au préalable créé la liste « Fiches techniques » sur le modèle fournisseur. Une fois le rapport fournisseur créé et déployé, il vous reste à placer dans "Paramètres 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}"
}
Il ne reste plus qu'à 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 extraits 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 nœud 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 nœud est la valeur spécifiée dans id.
- L'attribut nodeRef est le nodeRef du composant 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 deux solutions pour récupérer la dataSource contenant le nœud reportParams. La première est d'activer le mode debug en Java. La seconde est de consulter l'attribut rep:reportTextParameters du nœud 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é :
- Allez dans le dossier Documents de l'entité (fournisseur dans notre exemple).
- Cliquez sur un rapport PDF.
- Récupérez le nodeRef du document PDF.
- Retrouvez le document via le navigateur de nœuds (pour savoir comment récupérer un nodeRef et utiliser le navigateur de nœuds, lisez ceci). Une fois sur le nœud 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 nœud 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 à extraire lorsque la composition est extraite en multiniveau, dans les associations extraites 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 extraits 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.extractDatalistImage | extractDatalistImage | Extrait les images d'une DataList |
| 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és par ; permettant d'indiquer des images à extraire |
| beCPG.product.report.nutList.localesToExtract | nutLocalesToExtract | Extrait les valeurs arrondies des nutriments |
| beCPG.entity.report.mltext.fields | mlTextFields | Permet d'extraire toutes les langues saisies d'un champ. |
| beCPG.entity.report.mltext.locales | mlTextLocales | Permet de spécifier les langues à 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 |
| extractDatalistImage | 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 |
Voici des exemples de valeurs de personnalisation :
| 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 |
| extractDatalistImage | 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 permet de masquer les lignes d’une liste dans un rapport.
Commencez par ajouter les sous-types de rapport dans la liste "Sous-type de rapport" : "Administration beCPG" > "Listes de valeurs" > "Sous-types de rapport".

Ensuite, déclarez 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 affiche les nutriments dans tous les rapports si le sous-type de rapport n’est pas choisi sur une ligne (nutriment). Une fois que vous cochez le sous-type de rapport sur une ligne de nutriment, les autres lignes sont 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", ajoutez des paramètres sous la forme :
[show/hide]#[(reportKind|optionnel)]#[listName/propertyName/assocName]
- show : sélectionné, affiche l'élément (par défaut, ce dernier est masqué) ;
- hide : sélectionné, masque l'élément (par défaut, ce dernier est affiché) ;
- reportKind : option indiquant dans quel modèle de rapport vous allez masquer ou afficher l’élément ;
- la dernière partie est le nom de l’élément que vous voulez masquer, 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 colonne (propriété d'une liste). Pour les noms des listes, ajoutez un "s" à la fin. Exemple : allergenLists
Il ne vous reste plus qu'à cocher les paramètres sur votre produit (entité) : "Fiches techniques" > "Paramétrer les rapports".

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 trois 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 ajoutant 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 à 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 comprises entre :
${...}
Par exemple, pour l'export du code beCPG :
${@beCPG.propValue(nodeRef,'bcpg:code')}
Consultez la section Formules SPEL de notre documentation pour savoir comment l'utiliser.
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.
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, etc.).
Il comprend plusieurs onglets. Chaque onglet correspond à une liste de l'entité (propriétés, ingrédients, composition, etc.). 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 intéressent.
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 :
Quel que soit l'onglet, il y aura toujours une information dans la case A1 de votre fichier Excel.
Dans le cadre du premier onglet :
- A1 : TYPE
- B1 : 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
- B1 : la liste sur laquelle porte votre extraction
Exemple avec 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 préfixe 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 en-tê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 en-têtes de colonne se construiront de la manière suivante : formula|props["nom de la formule"] (exemple en indiquant dans l'en-tê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
Utilisez les résultats de vos recherches en intégrant un onglet supplémentaire avec des formules Excel (RECHERCHEV, RECHERCHEH, etc.). 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 directement une formule Excel 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 nœud 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éfinie
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, reportez-vous au chapitre « Modification d'un modèle de rapport produit ».
Exports de recherche ZIP
On peut exporter des documents issus des entités dans un fichier ZIP. Pour cela, créez 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 avec une ligne pour chaque condition :
<file/>
Il est possible de filtrer les entités extraites, de sélectionner les documents à exporter, de définir le nom des fichiers après extraction ainsi que le nom du dossier dans lequel ils seront organisés.
Export par inclusion
Exemple : documents dont le nom contient le mot "xxx"
<export format="zip">
<file entityFilter="spel(hierarchy1.toString().equals('[noeud de la famille FROMAGE]'))" path="cm:Documents/*[like(@cm:name, '%recette%', false)]" name="{doc_cm:name}" destFolder="FROMAGE"/>
</export>
- "entityFilter" : filtre sur les entités qui ont la famille "Fromage"
- "path" : filtre sur les documents qui ont le mot "recette" dans leur nom
- "name" : renomme le nom du document par lui-même
- "destFolder" : range le document dans le dossier "Fromage" lors de l'extraction
Export par exclusion
Exemple : documents dont le nom ne contient pas le mot "xxx"
<export format="zip">
<file entityFilter="spel(@beCPG.assocPropValues(nodeRef,'bcpg:trademarkRef','cm:name')[0]=='Marque X')" path="*/*[like(@cm:name, '%png', false) and not (like(@cm:name,'xxx')) and not (like(@cm:name,'zzz')) ]" name="{bcpg:eanCode} {bcpg:productVersion} {doc_cm:name}" destFolder="png/Marque X"/>
</export>
- "entityFilter" : filtre sur les entités qui ont la marque "Marque X"
- "path" : filtre sur les documents qui ont l'extension "png" mais n'ont pas les mots "xxx" et "zzz" dans leur nom
- "name" : renomme le document par le code EAN et la version de l'entité puis le nom du document
- "destFolder" : range le document dans le dossier "png" puis le sous-dossier "Marque X"
Export permettant de filtrer sur l'association d'une entité
<export format="zip">
<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>
- "entityFilter" : formule JavaScript qui filtre les entités qui ont l'association origine géographique "Afrique"
- "path" : filtre les documents qui ont l'extension "pdf" mais n'ont pas les mots "xxx" et "zzz" dans leur nom
- "name" : renomme le nom du document par lui-même
- "destFolder" : range le document dans le dossier "A3P"
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 :
- Ajoutez un dossier.
- Dans le dossier, ajoutez 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éfinissez 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.