PIM Akeneo : passer des données entre les différents étapes d’un job
7 janvier 2020
Akeneo PIM est une puissante solution de gestion d’information produit (Product Information Management) aujourd’hui plébiscitée par nombre d’acteurs du e-commerce pour sa simplicité d’utilisation et les services rendus. Akeneo PIM permet de collecter, gérer, enrichir l’information produit, créer des catalogues, afin de les distribuer sur différents canaux de diffusion (web, print, etc…).
L’une des tâches les plus fréquentes qu’un développeur est amené à effectuer avec le PIM Akeneo, est l’écriture de jobs d’import ou d’export assurant les flux de données entre un ETL et le PIM ou entre le PIM et des solutions ecommerce comme Magento, Oro Commerce ou Sylius. Ces jobs se déroulent en différentes étapes, représentées, dans le code, par des classes d’objets indépendantes les unes des autres. Dans leur séquence d’exécution, les étapes ultérieures n’ont a priori pas accès aux données calculées dans les étapes antérieures. Il existe pourtant un objet qui permet d’emmagasiner des données afin notamment de les rendre disponibles dans toutes les étapes d’un job. C’est l’objet JobExecution. Son utilisation est très simple.
Comment passer des données entre les différentes étapes d’un job grâce au contexte d’exécution
En effet, la récupération ou le calcul de données peut être très coûteux. Par exemple, on peut avoir besoin de récupérer un contenu distant sur Internet et de l’utiliser dans plusieurs étapes (steps) d’un job d’import ou d’export.
Pour des raisons de performances notamment, on ne peut pas se permettre de récupérer ce contenu distant à chacune des étapes du job. Si on récupère ces données dans une étape A, il faut qu’une étape B (ou C ou D) puisse en profiter.
On peut stocker des données dans le contexte d’exécution d’un job pour ensuite les récupérer facilement dans n’importe quelle étape du job. Chaque Step d’un Job se voit injecter un objet StepExecution qui lui-même contient l’objet JobExecution.
Step A et enregistrement de la donnée dans le contexte d’exécution du job :
$stepExecution
->getJobExecution()
->getExecutionContext()
->put('remoteContent', $remoteContent)
;
Step B et récupération de la donnée enregistrée dans le Step A :
$stepExecution
->getJobExecution()
->getExecutionContext()
->get('remoteContent')
;
Lead Developer