Reprise de données

La Reprise de données permet d’importer dans le Logiciel des données présentes dans un fichier CSV ou Excel. La reprise peut également se faire au format Xml ou par ETL via l'appel de services REST ou webservices disponibles nativement dans beCPG (cf. API).

Utilisation

Les dossiers utilisés pour l'import se trouvent dans l'entrepôt (Entrepôt/Échange/Import):

Les dossiers utilisés pour l'import sont:

  • A traiter : pour importer des fichiers CSV ou XLSX;
  • Traité avec échec : fichiers en erreur;
  • Traité avec succès : fichiers importés avec succès;
  • Log : Log d'import;
  • A retravailler : dossier de stockage;
  • Import d'utilisateurs : permet d'importer des utilisateurs.

Il est possible d'obtenir les trames en utilisant directement les exports excel générés dans l'interface, dans les listes ou via l'édition multiple (cf. Outils).

beCPG fourni également des trames vierges au format Excel ou CSV pouvant être utilisées pour la reprise de données:

Pour télécharger les fichiers, faites un clic droit sur les liens ci-dessous.

Le paramétrage des imports

Import simple

Les imports simples (import de propriétés et d'associations) ne nécessitent pas de paramétrage. Il suffit de définir dans le fichier d'import les colonnes (propriétés et associations) à importer.

Le format d'import est le suivant :

PATH        /Temp/Products                                                    
TYPE        bcpg:rawMaterial                                                    
MAPPING     Products
IMPORT_TYPE Node
COLUMNS     bcpg:productCode    cm:name cm:creator  cm:modified cm:modifier bcpg:suppliers  coutMP  coutMPPrev  coutEmb nutProteines    nutLipides  nutGlucides img1Path    img1Title
VALUES      1014    Saumon surgelé 80x20x4  admin       admin   12,13   1.0 2.0 3.1 2.5 3.6 5.6 /home/querephi/Documents/beCPG/projets/demo/jeu de données/Sushi/sushi saumon/produit.jpg   saumon

Où :

  • PATH: est le dossier où seront importées les données;
  • TYPE: le type d'objet créé (matière première, nutriment, etc...);
  • MAPPING: le nom du mapping utilisé pour cet import ;
  • IMPORT_TYPE: le type d'import à réaliser :
  • Node ou absence de ligne IMPORT_TYPE : on importe un objet (ex : MP, SF, PF, emballages,...)
  • EntityListItem : on importe une datalist associée à une entité (ex : compoList, ingList,...)
  • Comments : on importe un commentaire
  • COLUMNS: sont les noms des attributs (propriétés et association) à importer;
  • VALUES: sont les valeurs à importer en respectant un certain

format :

  • date : JJ/MM/AAAA sur un système français, MM/DD/YYYY sur un système anglais;
  • utilisateur : le compte de l'utilisateur;
  • nombre décimal : le séparateur décimal est la virgule sur un système français et le point sur un système anglais;
  • association : le code de l'entité (bcpg:code) pointée par l'association séparé par une virgule lorsque l'association est multi-valeur. Dans le cas du produit, on mettra le code produit (bcpg:productCode). Dans l'exemple, l'association Fournisseurs (bcpg:suppliers) est une association multi-valeur où l'on définit les Fournisseurs ayant le code 12 et 13. Dans le cas où l'association pointée n'a pas de propriété code, il faut mettre le nom de l'association pointée. Dans ce cas, il faut que le nom soit unique.

Import d'utilisateurs

beCPG permet d'importer un lot d'utilisateurs et de les associer à des groupes et ou à des sites. Les sites et groupes non existants sont créés par l'import. L'import se fait par un fichier au format CSV qui doit être placé dans le dossier de l'entrepôt « Échange/Import/Import d'utilisateurs ». Une fois l'import exécuté, le fichier est automatiquement déplacé dans « Échange/Import/Traité avec succès ».

Le fichier CSV doit comporter une ligne en entête :

"cm:lastName";"cm:firstName";"cm:email";"cm:telephone";"cm:organization";"username";"password";"memberships";"groups";"notify"

Il est possible d'ajouter d'autres propriétés à l'utilisateur en rajoutant en entête le nom de la propriété. Les champs « username » et « password » sont obligatoires.

Le champ « membership » permet d'associer l'utilisateur à des sites en définissant son rôle au sein du site. Les différents rôles sont :

  • Consumer
  • Collaborator
  • Manager

Les sites doivent être séparés par des « | » et le rôle avec « _ ». Ainsi l'utilisateur «Test » appartenant au site « Site de test 1 » avec le rôle Manager et « Site de test 2 » avec le rôle « Consumer » aura le champ « membership » rempli comme suit : « Site de test1_Manager|Site de test2_Consumer »

Le champ « groups » permet d'associer l'utilisateur à un ou des groupes. Les différents groupes sont séparés par « | » un groupe peut être hiérarchique il est représenté en utilisant le séparateur de chemin « / ». Les groupes beCPG doivent être référencés par leurs noms systèmes :

  • Marketing (Marketing)
  • Responsables marketing (MarketingMgr)
  • Utilisateurs marketing (MarketingUser)
  • Achats (Purchasing)
  • Responsables Achats (PurchasingMgr)
  • Utilisateurs Achats (PurchasingUser)
  • Responsables Qualité (QualityMgr)
  • Utilisateurs Qualité (QualityUser)
  • R&D (RD)
  • Responsables R&D (RDMgr)
  • Utilisateurs R&D (RDUser)
  • Réviseurs Produit (ProductReviewer)
  • Responsables Système (SystemMgr)

Ainsi l'utilisateur appartenant au groupe « Réviseurs Produit » et au groupe « Groupe de test 2 » enfant de « Groupe de test 1 » aura le champ « groups » rempli comme suit : « ProductReviewer|Groupe de test 1/Groupe de test 2 »

Le champ « notify » permet d'envoyer un mail à l'utilisateur. Les valeurs possibles sont « true » ou « false ».

Un exemple complet de CSV pour l'utilisateur Test :

"cm:lastName";"cm:firstName";"cm:email";"cm:organization";"username";"password";"memberships";"groups";"notify"
"test";"test";"test@becpg.fr";"";"test";"test"; "Site de test 1_Manager|Site de test2_Consumer";"ProductReviewer|Groupe de test 1/ Groupe de test 2";"false"

Import avancé

Certains imports nécessitent un paramétrage pour indiquer au système comment importer les données. Par exemple, lorsqu'on importe :

  • des caractéristiques produits (Coûts, Nutriments, Allergènes, etc...);
  • des données dont l'unicité d'une entité est déterminée un ou plusieurs attributs autre que le code, par exemple, le code d'un autre système comme le code ERP;
  • des images ou documents.

Le paramétrage de ces imports se fait avec XML et/ou avec les annotations :

I- Paramétrage XML

Paramétrage en utilisant des fichiers de mapping XML qui se trouvent dans le dossier Système/Exchange/Import/Mapping.

Le format de l'import est le suivant :

PATH    /Temp/Products                                                  
TYPE    bcpg:rawMaterial                                                    
MAPPING Products                                                    
COLUMNS bcpg:productCode    cm:name cm:creator  cm:modified cm:modifier bcpg:suppliers  coutMP  coutMPPrev  coutEmb nutProteines    nutLipides  nutGlucides img1Path    img1Title
VALUES  1014    Saumon surgelé 80x20x4  admin       admin   12,13   1.0 2.0 3.1 2.5 3.6 5.6 file:/home/querephi/Documents/beCPG/projets/demo/jeu de données/Sushi/sushi saumon/produit.jpg   saumon

Où :

  • PATH: idem à la section précédente
  • TYPE: idem à la section précédente
  • COLUMNS: idem à la section précédente
  • VALUES: idem à la section précédente
  • MAPPING: le nom du mapping à utiliser pour l'import

Les caractéristiques importées dans l'exemple précédent sont :

  • coutMP
  • coutMPPrev
  • nutProteines
  • nutLipides
  • nutGlucides

et le fichier de mapping définit à quoi correspond chaque colonne, exemple :

    <column id="coutMP" dataListQName="bcpg:costList" charactQName="bcpg:costListCost" attribute="bcpg:costListValue"
        charactNodeRef="" charactName="Coût MP" type="Characteristic" />

Où :

  • id: l'id de la colonne;
  • dataListQName: le nom de liste de caractéristique (Coûts, Nutriments, Allergènes, etc...);
  • charactQName: la propriété de la liste où est stockée la caractéristique;
  • attribute: la propriété où la valeur est stockée;
  • charactNodeRef: l'id de la caractéristique dont le format est : workspace://SpacesStore/34e2f6eb-a139-4f93-8926-ae21612fd221;
  • charactName: le nom de la caractéristique importée;
  • charactQNameKey: le nom de la propriété utilisée pour chercher la caractéristique;
  • type : le type de la colonne à importer. Il existe 3 valeurs : Attribute, Characteristic, File.

Il faut renseigner soit charactNodeRef, soit charactName. Si charactNodeRef est renseigné, charactName n'est pas pris en compte.

Le format du mapping pour l'exemple précédent est le suivant :

    <mappings>
        <settings>
            <setting id="dateFormat" value="dd/MM/yyyy"/>
        </settings>
        <!-- PRODUCT -->
        <mapping name="bcpg:rawMaterial">       
            <nodeColumnKeys> 
                <nodeColumnKey attribute="bcpg:productCode"/>
            </nodeColumnKeys>
            <columns>
                <!-- characteristic properties -->
                <column id="coutMP" dataListQName="bcpg:costList" charactQName="bcpg:costListCost" attribute="bcpg:costListValue" charactNodeRef="" charactName="Coût MP" type="Characteristic" />
                <column id="coutMPPrev" dataListQName="bcpg:costList" charactQName="bcpg:costListCost" attribute="bcpg:costListValue"   charactNodeRef="" charactName="Coût prévisionnel MP" type="Characteristic" />
                <column id="coutEmb" dataListQName="bcpg:costList" charactQName="bcpg:costListCost" attribute="bcpg:costListValue"  charactNodeRef="" charactName="Coût emballage" type="Characteristic" />
                <column id="nutProteines" dataListQName="bcpg:nutList" charactQName="bcpg:nutListNut" attribute="bcpg:nutListValue" charactNodeRef="" charactName="Protéines" type="Characteristic" />
                <column id="nutLipides" dataListQName="bcpg:nutList" charactQName="bcpg:nutListNut" attribute="bcpg:nutListValue"   charactNodeRef="" charactName="Lipides" type="Characteristic" />
                <column id="nutGlucides" dataListQName="bcpg:nutList" charactQName="bcpg:nutListNut" attribute="bcpg:nutListValue"  charactNodeRef="" charactName="Glucides" type="Characteristic" />
                <!-- files -->
                <column id="img1Path" attribute="cm:content" path="Images/produit.jpg" type="File"/>
                <column id="img1Title" attribute="cm:title" path="Images/produit.jpg" type="File"/>
            </columns>
        </mapping>      
    </mappings>

  • [setting id="dateFormat" value="dd/MM/yyyy"] définit le format des dates
  • [nodeColumnKeys] définit les colonnes utilisées pour calculer l'existence de la données à importer
  • [mapping name="bcpg:rawMaterial"] définit le type à importer

Import des caractéristiques dynamiques

Dans le mapping (système>Echange>Import>mapping) A ajouter à Product.xml:

    <mapping name="bcpg:dynamicCharactList">
            <nodeColumnKeys>
                <nodeColumnKey attribute="bcpg:erpCode" />
            </nodeColumnKeys>
            <dataListColumnKeys>
                <dataListColumnKey attribute="bcpg:dynamicCharactTitle" />
            </dataListColumnKeys>
            <columns>
            </columns>
        </mapping>

Le format d'import sera à adapter en fonction de la caractéristique dynamique. Par exemple pour une caractéristique dynamique appliquée au niveau des ressources de votre produit fini :

    PATH    /Temp/Products                                                  
    TYPE    bcpg:dynamicCharactList
    LIST_TYPE bcpg:processList                                                      
    MAPPING Products
COLUMNS bcpg:erpCode bcpg:dynamicCharactTitle bcpg:dynamicCharactValue
VALUES code erp1 Nom_formule valeur

Import de documents

Le format de l'import est le suivant :

PATH    /Temp/Products                                                  
TYPE    bcpg:rawMaterial                                                    
MAPPING Products                                                    
COLUMNS bcpg:productCode  doc1Path    doc1Title
VALUES  1014 file:/home/querephi/Documents/beCPG/projets/demo/jeu de données/Sushi/sushi saumon/produit.jpg  saumon

Les fichiers importés dans l'exemple précédent sont définis par les 2 colonnes :

  • doc1Path
  • doc1Title

et le mapping est :

    <column id="doc1Path" attribute="cm:content" path="Images/produit.jpg" type="File"/>
    <column id="doc1Title" attribute="cm:title" path="Images/produit.jpg" type="File"/>

Où :

  • id: l'id de la colonne;
  • attribute: la propriété où la valeur est stockée (« cm:content » pour le contenu du fichier et « cm:title » pour le titre du fichier;
  • path: le chemin relatif à l'entité où est stocké le fichier :
  • « Images/produit.jpg » indique que le fichier est stocké dans le répertoire Images et le nom du fichier est produit.jpg;
  • type: le type de la colonne à importer, ici, File.

Dans le fichier CSV la valeur correspond au chemin vers le fichier. Il est possible d'utiliser les préfixes suivants :

  • file: - Pour le chemin d'un fichier en local
  • classpath:
  • url:
  • http: - Pour un fichier se trouvant sur un site web
  • ftp: - Pour un fichier obtenu avec le protocole FTP
  • reg: - Accompagné de l'entête DOCS_BASE_PATH :

    DOCS_BASE_PATH

Permet d'indiquer dans quel dossier se situent les documents à importer lors de l'utilisation de reg:

Nb. L'extension du fichier est conservée lors de l'import

II- Paramétrage avec les annotations

On utilise les annotations pour surcharger ou remplacer les fichiers de mapping XML.

  • Les annotations possibles:

Toutes les annotations respectent la règle de nommage des annotations Java: @Nom(attribute1="", attribute2="", attribute3="",...etc)

  • L'annotation commence par un @ suivie par le nom
  • Le nom de l'annotation commence par une majuscule
  • Les annotations possèdent des attributs
  • Les noms des attributs commencent par une minuscule
  • Les attributs sont séparés par une virgule
  • Les annotations possèdent des attributs obligatoires et des attributs optionnels

Exemple

  • COLUMNS_PARAMS: pour ajouter les annotations sur les colonnes (clé, famille, association, ...etc)
  • @Key: choisir l'identifiant de l'entité.

  • @Assoc: identifier l'association.

      key: la clé de l'association. (obligatoire)
      path: pour spécifier le chemin de recherche. (optionnel)
      type: pour préciser le type de la cible. (optionnel)
    
  • @DataListKey: la clé utilisée dans une liste. (composition, emballage, ..etc).

  • @Hierarchy: la famille/sous famille.

       path: le chemin de la liste des familles dans l'administration. (optionnel dans le cas de familles de produits)
       parentLevelColumn: la colonne parent c'est a dire la colonne famille. (obligatoire seulement pour les sous-familles)
       parentLevelAttribute: l'attribut qui relie la famille et la sous-famille, généralement c'est **bcpg:parentLevel**. (obligatoire seulement pour les sous-familles)
    
  • @File: importer de fichier/image ..etc.

       attribute: nom de la propriété utilisée, "cm:content", "cm:title", ...etc. (obligatoire) 
       path: le chemin de destination. (obligatoire)
    
  • @Attribute: importer un attribut depuis des propriétés de type d:nodeRef ou association.

       attribute: le nom de la propriété. (optionnel) 
       targetClass/type: le type de la cible. (obligatoire) 
    
  • @Charact: importer les caractéristique en colonne.

       dataListQName: le nom de liste de caractéristique. (Coûts, Nutriments, Allergènes, etc...). (obligatoire)
       charactQName: la propriété de la liste où est stockée la caractéristique. (obligatoire)
       charactKeyQName: la clé de recherche de l'association. (obligatoire)
       charactNodeRef: l'id de la caractéristique. (optionnel, si vide le système prends charactKeyValue ou charactName). (optionnel)
       charactKeyValue/charactName: le nom de la caractéristique importée. (optionnel, si vide le système prends le titre de colonne)
       charactKeyQName: le nom de la propriété utilisée pour chercher la caractéristique. (optionnel, si vide le système prends bcpg:charactName)
       dataListAttribute: l'attribut à remplir par la valeur de la colonne. (obligatoire)
    
  • @Formula: utiliser une formule SPEL dans une colonne.

  • @MLText: importer les champs multi-langues sans ajouter la colonne par défaut.

      Il faut l'ajouter sur la première colonne de chaque propriété MLText seulement.
    

Nb.
Le nom des annotations sensibles à la casse, il faut respecter les noms et les attributs obligatoires
On utilise une seule annotation par cellule ou vide si la colonne une propriété simple
Une colonne peut être une clé/assoc/MLtext en même temps, dans ce cas vous devez utiliser plusieurs lignes COLUMNS_PARAMS

Pour télécharger les fichiers samples, faites un clic droit sur les liens ci-dessous.

Divers

En cas d'erreur dans la saisie d'une datalist, il est possible de la ré-importer. Il faut supprimer l'ancienne datalist au moment du nouvel import en ajoutant le paramètre suivant :

DELETE_DATALIST  true
  • Cette fonction est équivalent à un "ANNULE ET REMPLACE"
STOP_ON_FIRST_ERROR false
  • Permet de continuer l'import en cas d'erreur d'une ligne
DISABLED_POLICIES true
  • Désactive les polices lors de l'import (Génération du code beCPG par exemple ou alors contraintes non respectés)
ENTITY_TYPE
  • Permet de spécifier le type d'entité lors de l'import par défaut c'est le type bcpg:product qui est utilisé.

results matching ""

    No results matching ""