Aller plus loin : mode expert

Les Convertisseurs sont le cœur de la personnalisation du module. Ils permettent d’adapter le comportement sans toucher au pipeline global.

Le module mets à disposition des interfaces de conversion de ligne pour les imports et les exports.

Un convertisseur de ligne permet de convertir des lignes de données brutes afin d'exporter ou importer.

Les convertisseurs métier en import

Les RowImportProcessor doivent respecter une Interface RowImportProcessor

use fractalCms\importExport\exceptions\RowProcessorResult;
use ractalCms\importExport\pipeline\interfaces\RowImportProcessor;
use fractalCms\importExport\runtime\contexts\Import as ImportContext;

final class ImportRowProcessor implements RowImportProcessor
{


    /**
     * @return string
     */
    public function getName(): string
    {
        return 'nom-1';
    }

    /**
     * @param array $row
     * @param ImportContext $context
     * @param array $params
     * @return RowProcessorResult
     */
    public function process(array $row, ImportContext $context, $params = []): RowProcessorResult
    {
        try {
            /**
            * Ici le code de traitement de la ligne avant l'import
            * 
            **/
            return new RowProcessorResult($row, true);
        } catch (Exception $e)  {
            Yii::error($e->getMessage(), __METHOD__);
            throw  $e;
        }
    }
}

Afin de pouvoir l'utiliser, le RowImportProcessor doit être ajouté dans la configuration de l'application

'fractal-cms-export' => [
        'class' =>  \fractalCms\importExport\Module::class,
        'pathsNamespacesModels' => [
            '@app/models' => 'app\\models\\', /*path des models active record de votre application*/
        ],
        /*Ajout de processeurs de ligne (RowTransformer)*/
        'rowProcessorss' => [
        /* Pour les configurations import*/
            'import' => [
                'nom-1' => [
                    'class' => ImportRowProcessor::class,
                    'label' => 'Nom 1 (Import)',
                ],
            ]
    ],

il suffit ensuite de le sélectionner dans le formulaire pour que toutes les lignes soient traitées par le transformer.

Les convertisseurs métier en export

Les RowExportProcessor doivent respecter une Interface RowExportProcessor

use fractalCms\importExport\exceptions\RowProcessorResult;
use fractalCms\importExport\runtime\contexts\Export as ExportContext;
use ractalCms\importExport\pipeline\interfaces\RowExportProcessor;

final class ExportRowProcessor implements RowExportProcessor
{


    /**
     * @return string
     */
    public function getName(): string
    {
        return 'nom-2';
    }

    /**
     * @param array $row
     * @param ExportContext $context
     * @param array $params
     * 
     * @return RowProcessorResult
     */
    public function process(array $row, ExportContext $context, $params = []): RowProcessorResult
    {
        try {

            /**
            * Icic le code de traitement de la ligne avant de l'écrire dans le fichier
            *
            **/
            $context->rowOffset = 1;
            //Défini l'intitulé de l'onglet (export en Xlsx )
            $context->sectionName = 'structure';
            //Ecrit les colonnes d'entête
            $context->writePreambleOne(ArrayHelper::merge(
                [
                    'Production',
                    'normalisée de la période (A)',
                    'Production normalisée N-1 (B)',
                    'Objectif Attendu (C)',
                    '% var N/N-1 (A/B-1)',
                    '% Atteint (A/C)'
                ],
                1,
                1
            );
            //Ecrit les données
            $context->writeRow(row: row);
            return new RowProcessorResult($row, true);
        } catch (Exception $e)  {
            Yii::error($e->getMessage(), __METHOD__);
            throw  $e;
        }
    }
}

Afin de pouvoir l'utiliser, le RowExportProcessor doit être ajouté dans la configuration de l'application

'fractal-cms-export' => [
        'class' =>  \fractalCms\importExport\Module::class,
        'pathsNamespacesModels' => [
            '@app/models' => 'app\\models\\', /*path des models active record de votre application*/
        ],
        /*Ajout de transformer de ligne (RowProcessor)*/
        'rowProcessors' => [
        /* Pour les configurations import*/
            'import' => [
                'nom-1' => [
                    'class' => ImportRowProcessor::class,
                    'label' => 'Nom 1 (Import)',
                ],
            ],
        /* Pour les configurations export*/
            'export' => [
                'nom-1' => [
                    'class' => ExportRowProcessor::class,
                    'label' => 'Nom TDB (export)',
                ],
            ],

        ],
    ],

il suffit ensuite de le sélectionner dans le formulaire pour que toutes les lignes soient traitées par le transformer.