Catalogues
Les catalogues permettent de spécifier les propriétés obligatoires sur une entité. Ces propriétés impactent le calcul de la note d'avancement de ce produit quand elles ne sont pas renseignées. Un catalogue permet également de spécifier des champs et des listes à auditer.
Ces catalogues sont définis au format JSON sur l'instance directement: Entrepôt > Système > Catalogues de propriétés > Catalogs
Il est recommandé de vérifier la validité du tableau JSON (sans antislash) grâce à un parser avant de lancer l'instance - http://json.parser.online.fr/
N.B : Il faut vider les caches une fois le fichier modifié puis reformuler les produits.
Chaque catalogue contient un certain nombre de champs obligatoires ou optionnels dans sa définition :
Identifiant | Type | Obligatoire | Description |
---|---|---|---|
id | texte | Oui | l'identifiant unique du catalogue ex: "inco" |
label | texte | Oui | le nom affiché de ce catalogue ex: "EU 1169/2011 (INCO)" |
entityType | tableau | Non | permet de filtrer l'application du catalogue à un type précis d'entité ex: ['bcpg:finishedProduct'] appliquera ce catalogue uniquement aux produits finis |
entityFilter | texte | Non | permet de filtrer l'application du catalogue à une entité grâce à une formule SPEL ex: "hierarchy1 != null" ou "spel(hierarchy1 != null)" appliquera ce catalogue uniquement aux entités avec une famille |
fields | tableau | Oui | la liste des champs à renseigner pour que l'entité soit validée ex: ["bcpg:legalName", "bcpg:storageConditionsRef"] créera un catalogue où le libellé légal ainsi que les conditions de conditionnement doivent être renseignées |
uniqueFields | tableau | non | la liste des champs à valeur unique ex: ["bcpg:erpcode", "cm:name"]. Si une valeur est dupliquée, le champ sera renseigné dans le catalogue |
auditedFields | tableau | Non | la liste des champs ou listes prises en comptes lors de la mise à jour de la date de modification du catalogue. ex: ["bcpg:legalName", "compoList"]. Lorsque l'un des champs de cette liste est modifié, la date du catalogue sera actualisée |
i18nMessages | Objet | Non | mapping champs / labels permettant de spécifier un libellé pour un champ obligatoire. ex : {"bcpg:clients":"associé", "cm:title":"becpg.forms.field.tradeName"} pour bcpg:clients on utilise le nouveau label associé. pour cm:title on utilise une clé de langue, cette clé de langue doit être déclarée dans un fichier de langue Core (Alfresco) |
locales | tableau | Non | la liste des langues auxquelles s'applique le catalogue. Si ce champ n'est pas présent, les langues des rapports seront choisies (s'il y en a), sinon la langue du système sera la langue sélectionnée. Une langue est définie par un code de deux lettres selon la norme ISO-639-1 https://fr.wikipedia.org/wiki/Liste\_des\_codes\_ISO\_639-1 |
Il est possible d'indiquer une alternative entre deux champs dans une liste en les séparant par le symbole "|". (ex: ["bcpg:useByDate|bcpg:bestBeforeDate"]).
Ajouter/Supprimer un champ du catalogue
- Aller sur Entrepôt>Système>Catalogue de propriétés
- Mettre le curseur sur "Catalogs" et cliquer sur "Télécharger"
- Ouvrir le fichier avec un éditeur de texte (Atom par exemple)
- Ajouter ou supprimer une ligne
- Retourner sur l'instance et cliquer sur "Plus" puis "Importer une nouvelle version" et choisir le fichier tout juste modifié
- Reformuler les produits
Utiliser un champ renommé dans le catalogue
Utiliser le paramètre i18nMessages dans le catalogue pour aussi surcharger le nom du champ.
"i18nMessages" :{
"cm:title":"becpg.forms.field.tradeName"
},
Champs multilingues
Pour les champs multilingues, il est possible de rendre obligatoire ce champ uniquement pour une langue: il faut faire suivre le champ d'un underscore et de la langue, par exemple bcpg:legalName_pl
force le renseignement du champ libellé légal en polonais, quelque soit la langue choisie dans le catalogue ou les rapports.
Formules
Il est également possible de créer des champs de type formule en préfixant le champ par formula{id}|. Par exemple formula1|isLiquid() ou formula1|spel(isLiquid()).
L'id de la formule peut ensuite être utilisé pour spécifier son libellé:
"i18nMessages": {
"formula1" : "becpg.forms.field.tradeName",
"formula2" : "formula2.missingKey"
}
Vous pouvez ainsi utiliser des formules SPEL pour tester qu'une liste est renseignée ou vide par exemple:
formula1|spel(costList.?[value != null].size() == costList.size()) test si toutes les valeurs des coûts sont renseignés
Exemples
Ci-dessous des exemples de catalogues :
[
{
"id": "incoFinishedProduct",
"label": "EU 1169/2011 (INCO)",
"entityType": [
"bcpg:finishedProduct"
],
"uniqueFields": [
"bcpg:erpCode",
"cm:name"
],
"fields": [
"bcpg:legalName",
"bcpg:precautionOfUseRef",
"bcpg:useByDate|bcpg:bestBeforeDate",
"bcpg:storageConditionsRef",
"cm:title"
],
"i18nMessages": {
"cm:title": "Trade name"
},
"auditedFields": [
"bcpg:legalName",
"cm:title",
"cm:description"
],
"modifiedField": "bcpg:modifiedCatalog1",
"entityFilter": "@beCPG.assocValue(nodeRef,\"bcpg:entityTplRef\")!=null && (@beCPG.assocValue(nodeRef,\"bcpg:entityTplRef\").toString()!=\"workspace://SpacesStore/7d1bf1c6-dc17-42ee-8314-cca9d6d30515\")"
},
{
"id": "incoRawMaterials",
"label": "EU1169/2011 (INCO)",
"entityType": [
"bcpg:rawMaterial"
],
"uniqueFields": [
"bcpg:erpCode",
"cm:name"
],
"fields": [
"bcpg:legalName"
]
}
]