Connecteur
Un connecteur CSV permet d’exporter les données via des fichiers CSV. Il permet de configurer les données à exporter et les règles de transformation sont paramétrables dans un « Mapping ». Il est également possible de développer un connecteur spécifique pour prendre en compte des règles métier spécifiques et pour envoyer les données dans un format spécifique.
beCPG met à disposition un connecteur standard permettant d'extraire des entités et leurs listes au format CSV, ou bien des documents (images, fiches techniques) au format natif.
Version
Différentes versions du connecteur existent en fonction de votre version de beCPG. Il est conseillé d'utiliser la dernière version stable du connecteur, l'option isV1Api active la compatibilité avec la version 1.
Certaines options du connecteur ne sont pas valable avec toutes les versions de l'API, cela est indiqué dans la documentation par
[>=3.2.1]
Connector version | JAVA version | beCPG Tools version | API Support | Major changes |
---|---|---|---|---|
3.2.2 | JDK11 | 3.2.1 | 3.2^, 3.0, 2.1 ,2.0, 1.0^^ ( ^^ with connector.isV1APi = true) | Equadis and X3 export plugins |
3.2.1 | JDK11 | 3.2.0 | 3.1^, 3.0, 2.1 ,2.0, 1.0^^ ( ^^ with connector.isV1APi = true) | JDK11, number and csv format, XLS Mapping support |
3.0.0 | JDK8 | 3.0.0 | 3.1^, 3.0, 2.1 ,2.0, 1.0^^ (^Not recommended, ^^with connector.isV1APi = true) | SFTP support, API V2 Support, compressParam Support [V2.1] |
1.6.0 | JDK8 | 1.4 | 3.1^, 3.0^, 2.1^ ,2.0^, 1.0 (^Not recommended) | Workflow and document export plugin |
Installation
Installer la JDK Java sur votre machine à la version correspondante à votre version du connecteur. Télécharger et dé-zipper l'archive becpg-connector-3.2.2-distribution.zip
Si votre application utilise HTTPS et que le certificat SSL n'est pas reconnu par JAVA celui-ci doit être installé. Pour windows ce référer à l'annexe 1.
Utilisation
Sous linux, exécutez la commande suivante dans un terminal :
./becpg-connector.sh
Sous windows, double-cliquer sur le fichier becpg-connector.bat
Dans un environnement docker il est nécessaire de créer son propre script de lancement et de monter le volume docker correspondant au chemin de destination des fichiers :
Exemple de script de lancement docker:
docker run --rm -v "$PWD":/usr/becpg-connector -v "$PWD"/data:/usr/becpg-connector/data -w /usr/becpg-connector/data \
--net inst1_internal --link inst1_becpg-mail_1 openjdk:8 java -Dfile.encoding=UTF8 \
-jar /usr/becpg-connector/lib/becpg-connector-3.2.0-jar-with-dependencies.jar -file=/usr/becpg-connector/becpg-connector.properties >> $TMPFILE 2>&1
Les fichiers csv sont créés dans connector.dest.path
Exemple de fichiers obtenus :
csv/:
bcpg_client.csv bcpg_semiFinishedProduct.csv compoList.csv organoList.csv physicoChemList.csv
bcpg_finishedProduct.csv bcpg_supplier.csv nutList.csv packagingList.csv
Configuration
Pour configurer le connecteur, il est nécessaire d'éditer le fichier becpg-connector.properties.
Ces paramètres peuvent également être surchargés directement dans le script d'appel avec l'option JAVA -D [>=3.0.0].
Exemple:
java -Dremote.scheme=https -Dremote.host=server.becpg.local -Dremote.port=443
-Dconnector.query.template="+TYPE:\"bcpg:finishedProduct\""
-Dconnector.dest.path=".\data\case-units"
-jar ./lib/becpg-connector-3.2.0-jar-with-dependencies.jar -file=becpg-connector-case-units.properties
Le fichier becpg-connector.properties est spécifié grâce à l'option -file=sample-config.properties
Serveur et destination
Tout d'abord, vous devez indiquer l'adresse du serveur beCPG :
remote.scheme=http
remote.host=localhost
remote.port=8080
remote.login=admin
remote.password=becpg
Il faut également indiquer l'emplacement de destination des fichiers CSV (par défaut dans le dossier courant)
connector.dest.path=.
Attention : les chemins doivent s'écrire sous windows c:\\Temp\\becpg-connector (ou c:/Temp/becpg-connector)
Notifications
Il est possible d'envoyer une notification par e-mail à la fin de l’exécution du connecteur :
notify.enabled=false
connector.notify.from=support@becpg.fr
connector.notify.to=support@becpg.fr
mail.smtp.host=localhost
mail.smtp.port=25
Il est également possible d'envoyer les fichiers par FTP à la fin de l’exécution du connecteur :
ftp.protocol=ftp or ftps or sftp (default is ftp) [ >= 3.0.0]
ftp.enabled=false
ftp.host=
ftp.port=21
ftp.login=
ftp.password=
ftp.destFolder=
ftp.deleteOnSuccess=false
Il est également possible d'écrire des propriétés dans le PLM sur chaque entité synchronisé en utilisant le format XML de l'API [>=3.0.0]:
plm.activity.enabled=false
plm.activity.syncRemoteXml=<gs1:isPublicated xmlns:gs1="http://www.bcpg.fr/model/gs1/1.0" type="d:boolean" >false</gs1:isPublicated> \
<gs1:publicationDate xmlns:gs1="http://www.bcpg.fr/model/gs1/1.0" type="d:date" >%s</gs1:publicationDate>
Compatibilité
Dans certains cas, si la liste des champs à extraire est trop longue il peut être nécessaire de compresser les entêtes [API >= 2.1]:
connector.compress.param=true
Ou d'utiliser l'API V1 [>=3.0.0]:
connector.isV1APi=true
Actions post-connecteur
Il est possible d'executer d'exécuter des actions après le passage du connecteur en utilisant les paramètres suivants :
connector.channel.onSuccess.remote=
connector.channel.onError.remote=
Voici un exemple de JSON à appliquer à l'entité après l'exécution du connecteur, au format remoteEntity :
connector.channel.onSuccess.remote={"attributes": {"bcpg:productState": "Simulation"}}
Création d'un répertoire backup
Dans le cadre d'un export CSV, vous pouvez choisir d'enrichir les fichiers CSV existants (connector.csv.appendToExistingFiles=true) ou bien de créer un répertoire backup (connector.csv.appendToExistingFiles=false) dans lequel les anciens CSV sont déplacés. Pour cela, il faut utiliser le paramètre connector.csv.appendToExistingFiles (par défault, absent donc false).
Pour enrichir les CSV existants et ne pas créer de répertoire backup :
connector.csv.appendToExistingFiles=true
Debugging
Vous pouvez augmenter les niveaux de débuggage en utilisant la propriété connector.debug.level dans les arguments de la ligne de commande
-Dconnector.debug.level=trace
-Dconnector.debug.level=debug
-Dconnector.debug.level=info
-Dconnector.debug.level=warn
-Dconnector.debug.level=error
Par défaut, le niveau INFO est utilisé.
SSL
Il est possible de desactiver la vérification SSL avec l'option (Pour les tests seulement pour des raisons de sécurité) [>=3.2.2]:
ssl.trustAll=true
Configuration des plugins
Un ou plusieurs plugins peuvent être utilisés pour extraire les données du PLM [ >= 3.0.0]
Plugins | Fonction |
---|---|
fr.becpg.connector.plugin.StandardCSVVisitor | Extraction des données produits au format CSV |
fr.becpg.connector.plugin.StandardDocumentVisitor | Extraction des documents |
fr.becpg.connector.plugin.MultiLevelCSVVisitor | Extractions des nomenclatures en multiniveau |
fr.becpg.connector.plugin.WorkflowCSVVisitor | Extraction des worflows |
fr.becpg.connector.plugin.EquadisVisitor | Extraction au format Equadis XML |
fr.becpg.connector.plugin.X3CSVVisitor | Extraction multiniveau X3 |
Pour spécifier un ou plusieurs plugins, utilisez le paramètre suivant:
connector.plugin.class=fr.becpg.connector.plugin.StandardCSVVisitor,fr.becpg.connector.plugin.StandardDocumentVisitor,fr.becpg.connector.plugin.WorkflowCSVVisitor
Plugin standard
Format CSV
Le plugin standard 'fr.becpg.connector.plugin.StandardCSVVisitor' permet de spécifier le format CSV de sortie via l'option connector.csv.format
connector.csv.format=
Format | Delimiter | Quote | Separator | Description |
---|---|---|---|---|
(beCPG) | ; | " | \r\n | Excel like format with ; separator. Quoted are forced |
NoQuoteFormat | ; | \r\n | Excel like format with ; separator. Values are not quoted and special characters are escaped with '\' |
|
Excel | , | " | \r\n | Excel file format (using a comma as the value delimiter). Note that the actual value delimiter used by Excel is locale dependent, it might be necessary to customize this format to accommodate to your regional settings. |
InformixUnloadCsv | , | " | \n | Values are not quoted and special characters are escaped with '\' The default NULL string is "\\N" . |
MongoDBCsv | , | " | This is a comma-delimited format. Values are double quoted only if needed and special characters are escaped with '"' . A header line with field names is expected. |
|
MySQL | \t | \n | This is a tab-delimited format with a LF character as the line separator. Values are not quoted and special characters are escaped with '\' . The default NULL string is "\\N" . |
|
Oracle | , | " | This is a comma-delimited format with the system line separator character as the record separator.Values are double quoted when needed and special characters are escaped with '"' . The default NULL string is "" . Values are trimmed. |
|
PostgreSQLCsv | , | " | \n | This is a comma-delimited format with a LF character as the line separator. Values are double quoted and special characters are escaped with '"' . The default NULL string is "" . |
RFC4180 | , | " | \r\n | Comma separated format as defined by RFC 4180. |
TDF | \t | " | \r\n | Tab-delimited format. |
Plus de détails sur les différents formats:
https://commons.apache.org/proper/commons-csv/apidocs/org/apache/commons/csv/CSVFormat.html
D'autres options permettent de spécifier le séparateur des associations ( , par défaut) [>=3.0.0]:
mapping.csv.assoc_separator=|
Le format des nombres (notation scientifique par defaut) [>=3.2.1]:
connector.csv.decimalFormat=#.####
Ainsi que le format des dates (par défaut, notation ISO):
connector.csv.dateFormat=dd/MM/yyyy
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/text/DecimalFormat.html
Configuration des entités à extraire
La liste des entités à extraire est configurée par une requête de recherche où % est remplacé par la date de dernier import. Cette date est stockée dans le fichier lastImport qui peut être modifié ou supprimé manuellement.
connector.query.template=(@cm\\:created:[%s TO MAX] OR @cm\\:modified:[%s TO MAX]) AND ( ASPECT:\"bcpg:productAspect\" OR TYPE:\"bcpg:client\" OR TYPE:\"bcpg:supplier\" )
Dans l'exemple, toutes les entités de type produit ainsi que les clients et fournisseurs modifiés ou créés depuis le dernier import sont extraits.
Configuration des champs à extraire
Pour chaque type d'entités renvoyées, il faut définir les champs à exporter dans le fichier CSV.
Export des entités
Pour chaque fichier à extraire il faut utiliser comme clé le prefix mapping.csv et le type d'entité, mapping.csv.bcpg_finishedProduct par exemple pour le type produit fini. Par défaut le nom du csv généré sera le nom du type, dans l'exemple précedent bcpg_finishedProduct.csv.
Il est possible de redéfinir le nom du fichier créé [>=3.2.1]:
mapping.csv.bcpg_finishedProduct.fileName=Custom file name
Il est également possible de mapper jusqu'a 10 fichiers pour un même type [>=3.2.1]:
mapping.csv.bcpg_finishedProduct.1.fileName=Sample file name
mapping.csv.bcpg_finishedProduct.1=bcpg:code,bcpg:erpCode,cm:name
Il est également possible de spécifier des alias pour mapper plusieurs types avec le même mapping [>=3.2.2]:
mapping.csv.bcpg_rawMaterial.alias=article
mapping.csv.bcpg_semiFinishedProduct.alias=article
mapping.csv.article=bcpg:entityTplRef,cm:name,cm:title,bcpg:productHierarchy1|bcpg:erpCode
Exemple de mapping pour le type produit fini :
mapping.csv.bcpg_finishedProduct=bcpg:code,bcpg:erpCode,cm:name,cm:title,bcpg:eanCode,bcpg:code,bcpg:legalName,cm:description,bcpg:entityTplRef\
,bcpg:productHierarchy1,bcpg:productHierarchy2,bcpg:bestBeforeDate,bcpg:certificateDate,bcpg:contractDate\
,bcpg:foodContact,bcpg:netWeightUnit,bcpg:numberOfServings,bcpg:packagingDescription,bcpg:periodAfterOpening\
,bcpg:precautionOfUseRef,bcpg:preparationTips,bcpg:priceCurrency,bcpg:productComments,bcpg:productDensity\
,bcpg:productMicrobioCriteriaRef,bcpg:productQty,bcpg:productSpecifications,bcpg:productState,bcpg:productUnit\
,bcpg:projectedQty,bcpg:servingSize,bcpg:startEffectivity,bcpg:storageConditionsRef\
,bcpg:supplierPlants,bcpg:suppliers,bcpg:suppliers|bcpg:code,bcpg:suppliers|bcpg:erpCode\
,bcpg:clients,bcpg:clients|bcpg:code,bcpg:clients|bcpg:erpCode,bcpg:unitPrice,bcpg:useByDate
Chaque champ est spécifié par son nom interne bcpg:code par exemple.
Il est possible de spécifier le chemin d'un document afin de pouvoir le partager et obtenir son URL publique de partage.
Exemple pour exporter l'URL publique de documents:
/Images/produit.jpg,/Documents/${cm:name} - Fiche Technique Client.pdf
Ici le système va partager les documents produit.jpg et la fiche technique client, s'ils existent, puis il va ajouter leurs URL publiques dans le CSV.
Il est possible de spécifier plusieurs chemins sur une même colonne, permettant de tester chaque chemin jusqu'à l'obtention d'une URL. Exemple :
/Images/produit.jpg|/Images/product.jpg
Pour les associations c'est le nom qui est exporté par défaut. Vous pouvez spécifier la propriétés de l'association à extraire avec la syntaxe assoc_name|prop_name. L'attribut bcpg:nodeRef est également disponible assoc_name|bcpg:nodeRef
Exemple pour exporter le code ISO d'une association:
bcpg:ingListGeoOrigin|bcpg:geoOriginISOCode
Le connecteur standard permet aussi l'exportation des valeurs multilangues d'un champ de type "d:mltext". Pour exporter les différentes valeurs de ce champ, il suffit d'ajouter à la fin du nom le code "locale" de la langue concernée.
Exemple :
cm:description_en, pour exporter la description en Anglais.
bcpg:legalName_ja_JP, pour exporter la valeur du libellé légal en Japonais.
Export des listes:
Comme les entités il faut définir pour chaque liste un mapping des champs à exporter.
Exemple pour la liste nutriment et emballages :
mapping.csv.nutList=entity|bcpg:code,entity|bcpg:erpCode,bcpg:nutListNut,bcpg:nutListValue,bcpg:nutListFormulatedValue,bcpg:nutListUnit
mapping.csv.packagingList=entity|bcpg:code,entity|bcpg:erpCode,bcpg:packagingListProduct,bcpg:packagingListProduct|bcpg:erpCode,bcpg:packagingListQty,bcpg:packagingListUnit,bcpg:packagingListLossPerc,bcpg:packagingListPkgLevel,bcpg:packagingListIsMaster
Les champ préfixé par entity| permettre d'exporter les champs de l'entité (article| est un synonyme).
Exemple:
entity|bcpg:code, entity|bcpg:erpCode, entity|bcpg:nodeRef
Certaines listes spécifiques on leur propre champs [>=3.0.0]
Liste nutriment
Accés de la valeur du nutriment arrondi en colonne dans l'export d'entité
- nut["Code"] ("locale") Permet d'avoir une colonne avec la valeur arrondi du nutriment pour un pays
Exemple :
- nut["ENER-KJO"] ou nut["ENER-KJO"]("EU") ou nut[ENER-KJO](EU) : Valeur arrondie de l'énergie pour l'europe équivalent à équivalent à
- nut["FAT"]("US") Valeur arrondie des Lipides pour les Etats Unis
Il est également possible dans la liste bcpg:nutList d'afficher les colonnes correspondants aux valeurs arrondis suivantes:
- roundedValue_locale
- roundedSecondaryValue_locale
- roundedSecondaryValuePerServing_locale
- roundedMini_locale
- roundedMaxi_locale
- roundedValuePerServing_locale
- roundedGDAPerc_locale
- roundedValuePerContainer_locale
- roundedGDAPercPerContainer_locale
Exemple:
roundedValue_EU
Nb: Il est nécessaire d'avoir les champs suivant dans le mapping
mapping.csv.nutList=bcpg:nutListNut|gs1:nutrientTypeCode,bcpg:nutListRoundedValue
Liste allégation
claim[Code] - Renvoi true si l'allégation est respecté
Exemple :
claim[ORGANIC_GS1]
Renvoi vrai si le produit est bio
Nb: Il est nécessaire d'avoir les champs suivant dans le mapping
mapping.csv.labelClaimList=bcpg:lclLabelClaim|bcpg:labelClaimCode,bcpg:lclClaimValue,bcpg:lclComments
Liste ingrédient
ingLabelingList[label]|value - Renvoie l'étiquetage manuel s'il est renseigné, sinon l'étiquetage formulé correspondant au libellé "label".
ingLabelingList[label]|manualValue [>=4.1.1] - Renvoie l'étiquetage manuel correspondant au libellé "label".
ingLabelingList[label]|formulatedValue [>=4.1.1] - Renvoie l'étiquetage formulé correspondant au libellé "label".
Le "label" peut être soit l'index soit le libellé de l'étiquette.
Par défaut, le HTML est supprimé de l'étiquetage. En ajoutant "@" à la fin, vous pouvez obtenir la version avec le HTML.
Exemple :
ingLabelingList[Liste des ingrédients]|value
Remarque : Les champs suivants doivent être présents dans le mapping
mapping.csv.ingLabelingList=bcpg:illManualValue,bcpg:illValue,bcpg:illGrp|bcpg:lrLabel
Allergènes
voluntaryAllergen libellés légaux des allergènes volontaires séparés par des virgules voluntaryAllergen|code codes des allergènes volontaires séparés par des virgules inVoluntaryAllergen libellés légaux des allergènes involontaires séparés par des virgules inVoluntaryAllergen|code codes des allergènes involontaires séparés par des virgules
Il est possible de récupérer les libellés légaux des allergènes volontaires et involontaires dans la langue souhaitée en rajoutant un underscore suivi par le code de la langue.
exemple :
voluntaryAllergen_en renvoi les libellés légaux des allergènes volontaires séparés par des virgules en Anglais
Nb: Il est nécessaire d'avoir les champs suivant dans le mapping
mapping.csv.allergenList=bcpg:allergenListAllergen|bcpg:allergenCode,bcpg:allergenListAllergen|bcpg:legalName,bcpg:allergenListVoluntary,bcpg:allergenListInVoluntary
Autre listes
listName[0]|prop - Renvoi la propriété prop de l'item 0 de la liste listName
Exemple :
compoList[0]|bcpg:compoListQty
Configuration via un fichier excel
Le mapping est défini dans becpg-connector.properties par défaut mais peut être réalisé directement dans un fichier excel en spécfiant l'option:
connector.csv.xlsxMapping=./sample/mapping.xlsx
Les entêtes du fichier sont les suivantes:
Colonne A | Colonne B | Description | |
---|---|---|---|
TYPE | bcpg:finishedProduct | Indique le type à exporter | |
HEADER | Code ERP | Indique le ou les entêtes du fichier CSV | |
FILTER | props["entity | gs1:tradeItemUnitDescriptorCode"]!=null | Filtre les données |
COLUMNS | bcpg:erpCode | Indique les champs à exporter | |
# | Commentaire | Indique un commentaire dans le mapping non exporter dans le CSV |
- Chaque onglet du fichier excel correspondra à un fichier CSV.
- Un onglet sans mapping n'est pas exporté
- Des formules excel peuvent être utilisés dans les headers
- #MaValeur dans une colonne indique une valeur fixe
Exemple:
TYPE | bcpg:finishedProduct | ||||
---|---|---|---|---|---|
HEADER | IMPORT | 3160920000201 | FICHEP_EA | SP | M |
HEADER | ADDDESCRIPTION | ADDIDENTIFICATION | ADDITIONALDESCRIPT | BARCODETYPE | BRANDNAME |
HEADER | ADDDESCRIPTION | ADDIDENTIFICATION | ADDITIONALDESCRIPT | BARCODETYPE | BRANDNAME |
COLUMNS | cm:title | bcpg:erpCode | cm:description | #EAN-13 | bcpg:trademarkRef |
# | PCE LA COURSE DU PERE NOEL 55g | RX046 | PCE LA COURSE DU PERE NOEL 55g | EAN-13 | MARQUE CO. |
Il est possible de définir un même mapping pour plusieurs types, par exemple :
| TYPE | bcpg:finishedProduct,bcpg:semiFinishedProduct |
Il est également possible de définir un mapping pour une liste d'un type en particulier, par exemple :
| TYPE | bcpg:rawMaterial|nutList |
Formules
Il est possible dans le mapping des champs d'utiliser des formules au format SPEL
La création d’une formule dans une colonne nécessite trois parties :
- Partie 1 : le mot formula (mot statique), utilisé pour dire que cette colonne est une formule SPEL.
- Partie 2 : un trait vertical | ;
Partie 3 : la formule elle-même.
Grâce aux formules SPEL vous pouvez personnaliser les colonnes qui seront affichées.
La formule la plus simple est d’afficher la valeur d’une propriété (standard, dynamique, calculée).
Exemple :
formula|props["bcpg:erpCode"]
Permet d'obtenir le code ERP de l'entité
La liste props contient quant à elle toutes les propriétés d’une entité ou d’une liste de données. Par la suite, vous pouvez récupérer la valeur d’une propriété en passant le nom de cette dernière entre 2 crochets : props[ "NOM_PROPRIÉTÉ"]
Pour les propriétés liées à des associations le caractère | doit être échappé par \:
props["bcpg:clients\|cm:title"]
Pour faire des formules compliquées en utilisant des conditions :
formula|props["qty"] != null ? props["qty"] / prop["bcpg:compoListQty"] : props["qty"]
Ce qui signifie :
Si la propriété qty n’est pas vide (null), calculer le pourcentage (qty / compoListQty ). Sinon, afficher la qty
Dans les formules SPEL vous pouvez faire des opérations mathématiques, logiques ou personnaliser l’affichage de données.
Exemple pour formater une valeur:
formula|(new java.text.DecimalFormat("#.###")).format(props["qty"])
Pour plus d’info sur le langage SPEL :
http://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/expressions.html
Champs obligatoires
Il est possible de définir une liste de champs obligatoires via l'option connector.csv.mandatoryFields
Lorsqu'un champ obligatoire est défini et qu'un mapping contient ce champ, le système n'extraira pas les entités pour lesquelles ce champ est vide.
Exemple :
connector.csv.mandatoryFields=bcpg:useByDate,bcpg:unitPrice
Configuration du connecteur de documents
Le connecteur de documents est un plugin du connecteur standard. Vous devez donc tout d'abord l'activer en saisissant la ligne suivante dans le fichier becpg-connector.properties
connector.plugin.class=fr.becpg.connector.plugin.StandardDocumentVisitor
A noter que cette ligne est présente par défaut dans le fichier mais commentée par un # en début de ligne, il suffit alors de supprimer ce caractère.
Une fois que le plugin est pris en compte dans la configuration, vous pouvez modifier quels fichiers seront extraits pour chaque type d'entité (produit fini, matière première, etc)
Chaque entité aura un mapping défini comme ceci :
mapping.document.bcpg_<type de l'entité> = <champs à extraire>
Des mappings par défaut sont fournis avec le connecteur, permettant d'extraire les fiches techniques clients et l'image du produit, et ce pour les produits finis, semi-finis et les matières premières.
mapping.document.bcpg_finishedProduct=/Images/produit.jpg|img_produit${bcpg:erpCode}.jpg;/Documents/${cm:name} - Fiche Technique Client.pdf|FT_client${bcpg:erpCode}.pdf
mapping.document.bcpg_rawMaterial=/Images/produit.jpg|img_produit${bcpg:erpCode}.jpg;/Documents/${cm:name} - Fiche Technique Client.pdf|FT_client${bcpg:erpCode}.pdf
mapping.document.bcpg_semiFinishedProduct=/Images/produit.jpg|img_produit${bcpg:erpCode}.jpg;/Documents/${cm:name} - Fiche Technique Client.pdf|FT_client${bcpg:erpCode}.pdf
On constate que chaque entité à extraire est formée de la même façon :
- On a d'un côté le chemin sur l'instance du fichier à extraire
- Ensuite, un trait vertical |
- Suivi du nom (et chemin) du fichier extrait. Ceci permet de choisir comment sera nommé votre fichier, et s'il doit être rangé dans un autre dossier.
Ensuite, il est important de constater que chaque entité à extraire est séparée de la suivante par des points virgules ;
Deux variables seront encodées et utilisables dans le nom du fichier source (sur le système beCPG) et cibles (extraites sur votre système), le code erp du produit en question, et son nom. On peut donc imaginer extraire les fiches techniques dans un dossier ayant pour nom "code ERP - nom de l'entité" :
/Documents/${cm:name} - Fiche Technique Client.pdf|${bcpg:erpCode} - ${cm:name}/FT_client${bcpg:erpCode}.pdf
Il est possible d'utiliser une expression régulière pour matcher le fichier (*.pdf par exemple), les variables doc_cm:name, doc_path, doc_id, et doc_bcpg:nodeRef sont également disponible [>=3.2.2], un même fichier peut être exporter deux fois avec des noms différents.
/Documents/*.xlsx|Documents/${doc_id}_${doc_cm:name}
Configuration du connecteur de workflows
Le connecteur de workflow permet d'exporter les workflows et leurs tâches au format CSV. Vous pouvez l'activer en saisissant la ligne suivante dans le fichier becpg-connector.properties
connector.plugin.class=fr.becpg.connector.plugin.WorkflowCSVVisitor
Les mapping suivants sont disponibles pour configurer les champs à extraire:
mapping.csv.workflow_instances=id,name,title,description\
,package|cm:name,formula|props["package\\|path"]!=null ?props["package\\|path"].split("/")[props["package\\|path"].split("/").length-1]:""\
,isActive,startDate,priority,message,endDate,dueDate,initiator.userName,initiator.firstName,initiator.lastName
mapping.csv.workflow_tasks=workflowInstance|id,workflowInstance|name,id,state,name,title,description,bpm:completionDate,bpm:workflowDueDate
La propriété connector.query.template permet de filtrer les workflows:
connector.query.template=startedAfter=%sZ
Les valeurs possibles sont:
state,initiator,priority
,dueBefore,dueAfter,
,definitionId,definitionName,
,startedBefore,startedAfter
,completedBefore,completedAfter,exclude
Configuration du connecteur multiniveaux
Le « Connecteur de Multi-niveau » est un plugin du connecteur standard. Il permet d’extraire en format CSV les entités (produits finis, produits semi-finis), leurs listes « Compositions », « Emballages en multi-niveau » ainsi que les autres listes (nutriments, ingrédients, ext.). Ce plugin permet également d’extraire le niveau de chaque composant (produit semi fini, matière première) et sa quantité au niveau du produit.
En d’autres termes, le plugin permet d’extraire la composition d'un semi-fini présent dans la composition d’un produit fini, celle d’un semi-fini présent dans la composition d’un autre semi-fini et ainsi de suite. De plus, il permet d’afficher le niveau de chaque composant.
Exemple :
Composition d’un produit fini :
Calcul de la quantité de semi-fini au niveau du produit
Le niveau du Semi-fini C est égal à 3. Ainsi, pour calculer sa quantité au niveau du produit, il faut commencer par calculer la quantité de Semi-fini B au niveau du produit en appliquant la règle de trois :
QTE de Semi-fini B = (Poids du Semi-fini B / Poids du Semi-fini A) * Pois de Semi-fini A au niveau du produit
- Poids du Semi-fini A = Somme des ses composants et on peut la trouver aussi dans les caractéristiques formulées
- QTE de Semi-fini B = (0.31 / 0.66) * 5 = 2,348 Kg.
Ce résultat est la quantité que vous utiliserez pour calculer la quantité de Semi-fini C, et ainsi de suite à chaque fois que vous descendez dans le niveau de composition.
Dans l’exemple :
La quantité de Semi-fini B au niveau du produit => après le calcul = 2,348 kg.
Le poids de Semi-fini B = 0,17 kg ;
La quantité de Semi-fini C utilisée dans la composition du Semi-fini B = 0,1 kg.
- La quantité de Semi-fini C utilisée au niveau du produit = (0,1 / 0,17) * 2,348 = 1,381 kg.
Le raisonnement est le même pour calculer la quantité de matière première MP 3 au niveau du produit en utilisant cette fois le résultat 1,381 kg.
Le plugin multi-niveau permet également de calculer les valeurs suivantes :
Nombre de produits par emballage PCB.
Nombre de colis par palette dans chaque niveau d’emballage (primaire, secondaire, tertiaire).
- La quantité d’emballage par produit c’est à dire la quantité d’emballage utilisée par unité de produit.
De plus, il met à disposition les valeurs des caractéristiques formulées (caractéristiques dynamiques). Documentation sur les caractéristiques formulées
Ces caractéristiques sont extraites et vous pouvez les afficher directement et/ou les utiliser pour faire des calculs comme expliqué dans la partie : les formules SPEL.
N.B : les noms de ces propriétés sont bien les noms renseignés dans l’application à l’exception près qu’il faut remplacer les espaces par un tiret du 8 ( ) et ajouter le préfixe **dyn** au début du nom.
Par exemple :
- Nom de propriété : « qty en multiniveau ».
- Nom extrait: « dyn_qty_en_multiniveau ».
Configuration
Comme dans le connecteur standard, pour activer le connecteur multi-niveau, il suffit de saisir la ligne suivante dans le fichier becpg-connector.properties :
connector.plugin.class=fr.becpg.connector.plugin.MultiLevelCSVVisitor
Cette ligne débute par un # dans le fichier de configuration qu’il faut supprimer.
Une fois que le plugin est pris en compte dans la configuration, vous pouvez modifier les fichiers qui seront extraits pour chaque type d'entité (Produit fini, matière première, etc). Chaque entité aura un mapping défini comme ceci :
mapping.document.bcpg_<type de l'entité> = <champs à extraire>
Configuration des entités à extraire
Sachant que le plugin est dédié aux deux types d’entités (produit fini et produit semi-fini), les fichiers csv sont indisponibles pour les autres types d’entités (clients, fournisseurs, ext.).
Ainsi, la requête de recherche est assez similaire à la requête du connecteur standard. En revanche, dans ce cas, il n’y a pas besoin d’importer les entités de type client et fournisseur (supplier).
connector.query.template=(@cm\\:created:[%s TO MAX] OR @cm\\:modified:[%s TO MAX]) AND ( TYPE:\"bcpg:finishedProduct\" OR TYPE:\"bcpg:semiFinishedProduct\")
Annexe 1: Installation de certificat (Windows)
Récupérer le certificat du serveur beCPG:
Sur Firefox, cliquer sur l'icône du cadenas.
Puis, cliquer sur la flèche à droite de Connexion sécurisée.
Puis, cliquer sur "Plus d'information".
Puis, cliquer sur "Afficher le certificat". Puis, aller dans la section "Divers" et télécharger le certificat PEM (cert).
Sauvegarder le certificat dans un dossier sur votre ordinateur.
Puis, ouvrir un terminal sur le dossier java. Vous pouvez l'ouvrir rapidement en écrivant cmd sur l'explorateur de dossier windows une fois dans le bon dossier.
Note: il est parfois nécessaire de démarrer le terminal avec les droits d'administrateurs pour procéder à la suite des étapes. Pour ouvrir un terminal en droit d'administateurs, vous pouvez chercher cmd sur votre barre windows, clique droit et "Ouvrir en tant qu'administrateur".
Vous pouvez ensuite vous positionner dans le bon dossier avec la commande cd.
Exemple avec un dossier java positionné dont l'itinéraire est C:\Program Files\Java\jre1.8.0_241.
Vérifier également que le bin\keytool et lib\security\cacerts sont présents dans votre dossier java.
Une fois le terminal ouvert, vous pouvez utiliser la commande suivante :
bin\keytool -import -alias {nom certificat} -file {DESTINATION FICHIER .pem} -keystore lib\security\cacerts
Exemple, avec un certificat becpg.pem positionné dans C:\tmp et un alias becpg :
bin\keytool -import -alias becpg -file C:\tmp\becpg.pem -keystore lib\security\cacerts
Le mot de passe par défaut est : "changeit".
Suivre les messages affichés par le terminal. Une fois installé, vous pouvez utiliser la commande suivante :
bin\keytool -list -v -alias {nom certificat} -keystore lib\security\cacerts
En reprenant notre exemple précédent:
bin\keytool -list -v -alias becpg -keystore lib\security\cacerts