L'agence Blog Contact

AdvancedCsvConnector ou comment booster ses imports / exports Akeneo

 

Publié le 05/02/2020 par Simon CARRE

Le PIM Akeneo nous permet nativement d'importer et d'exporter des produits au format CSV (qui peut être édité & généré depuis Excel). Ce connecteur natif est très efficace mais il nécessite toujours quelques lignes de code pour s'adapter aux fichiers de nos clients : entêtes différentes, prix au mauvais format, valeurs par défaut pour les colonnes non renseignées, etc.

Suite à plusieurs projets Akeneo, nous avions souvent l'impression d'avoir un code très similaire pour des clients différents. Le développement et la mise en place de notre bundle AdvancedCsvConnector nous a permis de gagner énormément en productivité et d'assurer une qualité optimiale sur tous les projets.

Ce dernier fonctionne sur un principe simple : il ajoute un nouveau connecteur CSV basé sur le natif avec un paramètre de job supplémentaire appelé "mapping". Ce mapping permet de faire correspondre une entête de colonne avec un code attribut d'Akeneo et d'y ajouter de la "magie" si nécessaire (callback's, normalisation des valeurs, etc.). Nous n'avons pratiquement plus aucune ligne de PHP grâce à ce bundle !

Lien GitHub : https://github.com/ClickAndMortar/AdvancedCsvConnectorBundle

Installation

L'installation du bundle se réalise simplement via la commande Composer suivante :

composer require clickandmortar/advanced-csv-connector-bundle

Il faut ensuite charger le bundle dans votre fichier AppKernel.php :

<?php
// app/AppKernel.php

// ...
class AppKernel extends Kernel
{
    protected function registerProjectBundles()
    {
        return [
            // ...
            new \Pim\Bundle\CustomEntityBundle\PimCustomEntityBundle(),
            new \ClickAndMortar\AdvancedCsvConnectorBundle\ClickAndMortarAdvancedCsvConnectorBundle(),
        ];
      }
    // ...
}

Mettre à jour votre fichier de routing (app/config/routing.yml) :

pim_customentity:
        prefix: /reference-data
        resource: "@PimCustomEntityBundle/Resources/config/routing.yml"
        
candm_advanced_csv_connector:
    prefix: /candm-advanced-csv-connector
    resource: "@ClickAndMortarAdvancedCsvConnectorBundle/Resources/config/routing.yml"

Et enfin lancer une mise à jour de votre base de données :

php bin/console doctrine:schema:update --force

Utilisation

Passons à la partie la plus intéressante, l'utilisation de ce bundle pour gérer vos imports et exports CSV

Import

Avant de créer notre profil d'import, nous allons créer notre mapping qui utilise une entité référentielle. Dans la partie Référenciel / Mappings d'import, cliquer sur Créer en haut à droite.

Un mapping d'import est composé des propriétés suivantes :

Le tableau de mapping contient les colonnes suivantes :

Une fois le mapping enregistré, il peut être sélectionné au niveau du profil d'import :

Export

Le système d'export fonctionne exactement comme l'import pour lier un code attribut Akeneo à une colonne spécifique du fichier CSV en sortie. Dans la partie Référenciel / Mappings d'export, cliquer sur Créer en haut à droite.

Un mapping d'export est composé des mêmes propriétés qu'un mapping d'import. Seuls les colonnes du tableau sont différentes :

Script LUA

Les scripts LUA peuvent être créés dans la partie Référenciel / Scripts LUA. Ils permettent de créer des transformations dynamiques sur des chaînes de characters, des entiers, etc. On peut par exemple imaginer un script permettant de forcer une valeur en majuscule :

Le script peut être rédigé directement dans l'interface d'Akeneo (la référence sur le langage LUA est disponible ici : https://www.lua.org/manual/) et testé aussi via le bouton Tester. Une fois le script enregistré, il peut être utilisé dans les différents mappings d'import ou d'export. Voici quelques exemples de scripts :

newValue = attributeValue .. ".xlsx"

return attributeValue;
return string.upper(attributeValue);
return attributeValue*12;

 

N'hésitez pas à nous contacter si vous souhaitez obtenir plus d'informations ou une démonstration de notre bundle spécifique à Akeneo.