{"id":3957,"date":"2019-08-03T09:00:06","date_gmt":"2019-08-03T09:00:06","guid":{"rendered":"https:\/\/understanddrupal.com\/?p=3957"},"modified":"2022-01-26T20:18:55","modified_gmt":"2022-01-26T20:18:55","slug":"utilisation-de-plugins-de-processus-pour-la-transformation-de-donnees-dans-les-migrations","status":"publish","type":"post","link":"https:\/\/understanddrupal.com\/fr\/blog\/utilisation-de-plugins-de-processus-pour-la-transformation-de-donnees-dans-les-migrations\/","title":{"rendered":"Utilisation de plugins de processus pour la transformation de donn\u00e9es dans les migrations Drupal"},"content":{"rendered":"\n<p>Dans l&#8217;entr\u00e9e pr\u00e9c\u00e9dente, nous avons \u00e9crit notre\u00a0<a href=\"https:\/\/understanddrupal.com\/fr\/articles\/ecrire-votre-premiere-migration-drupal\">premi\u00e8re migration Drupal<\/a>. Dans cet exemple, nous avons copi\u00e9 les valeurs mot \u00e0 mot de la source vers la destination. D\u2019habitude, les donn\u00e9es doivent \u00eatre transform\u00e9es d&#8217;une mani\u00e8re ou d&#8217;une autre pour correspondre au format attendu par la destination ou pour r\u00e9pondre aux besoins m\u00e9tier. Aujourd&#8217;hui, nous allons en apprendre plus sur les plugins de processus et comment ils fonctionnent dans le cadre de le pipeline de migration Drupal.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"360\" data-src=\"https:\/\/understanddrupal.com\/wp-content\/uploads\/2022\/01\/process_plugins_intro-1-scaled.jpeg\" alt=\"\" class=\"wp-image-3962 lazyload\" data-srcset=\"https:\/\/understanddrupal.com\/wp-content\/uploads\/2022\/01\/process_plugins_intro-1-scaled.jpeg 640w, https:\/\/understanddrupal.com\/wp-content\/uploads\/2022\/01\/process_plugins_intro-1-300x169.jpeg 300w, https:\/\/understanddrupal.com\/wp-content\/uploads\/2022\/01\/process_plugins_intro-1-768x432.jpeg 768w\" data-sizes=\"(max-width: 640px) 100vw, 640px\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" style=\"--smush-placeholder-width: 640px; --smush-placeholder-aspect-ratio: 640\/360;\" \/><noscript><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"360\" src=\"https:\/\/understanddrupal.com\/wp-content\/uploads\/2022\/01\/process_plugins_intro-1-scaled.jpeg\" alt=\"\" class=\"wp-image-3962\" srcset=\"https:\/\/understanddrupal.com\/wp-content\/uploads\/2022\/01\/process_plugins_intro-1-scaled.jpeg 640w, https:\/\/understanddrupal.com\/wp-content\/uploads\/2022\/01\/process_plugins_intro-1-300x169.jpeg 300w, https:\/\/understanddrupal.com\/wp-content\/uploads\/2022\/01\/process_plugins_intro-1-768x432.jpeg 768w\" sizes=\"(max-width: 640px) 100vw, 640px\" \/><\/noscript><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-sucre-syntactique\">Sucre syntactique<\/h2>\n\n\n\n<p>L&#8217;API Migrate offre beaucoup de&nbsp;<a href=\"https:\/\/fr.wikipedia.org\/wiki\/Sucre_syntaxique\">sucre syntaxique<\/a>&nbsp;pour faciliter l&#8217;\u00e9criture des fichiers de d\u00e9finition de migration. Les mappages de champs dans la section processus en sont un exemple. Chacun d&#8217;entre eux n\u00e9cessite la d\u00e9finition d&#8217;un plugin de processus. Si aucun n&#8217;est d\u00e9fini manuellement, alors le plugin `get` est choisi par d\u00e9faut. Les deux extraits de code suivants sont \u00e9quivalents en fonctionnalit\u00e9s.<\/p>\n\n\n\n<p><code>Loading gist https:\/\/gist.github.com\/dinarcon\/1421ad601fa94815587cc95f505166a5<\/code><\/p>\n\n\n\n<p><code>Loading gist https:\/\/gist.github.com\/dinarcon\/1421ad601fa94815587cc95f505166a5<\/code><\/p>\n\n\n\n<p>Le plugin de processus `<a href=\"https:\/\/api.drupal.org\/api\/drupal\/core%21modules%21migrate%21src%21Plugin%21migrate%21process%21Get.php\/class\/Get\">get<\/a>` copie simplement une valeur de la source vers la destination sans faire aucun changement. Comme il s&#8217;agit d&#8217;une op\u00e9ration courante, `get`&nbsp;<a href=\"https:\/\/www.drupal.org\/docs\/8\/api\/migrate-api\/migrate-process-plugins\/migrate-process-overview\">est consid\u00e9r\u00e9 comme la valeur par d\u00e9faut<\/a>. Il existe de nombreux plugins de processus fournis par le&nbsp;<a href=\"https:\/\/www.drupal.org\/docs\/8\/api\/migrate-api\/migrate-process-plugins\/list-of-core-migrate-process-plugins\">c\u0153ur Drupal<\/a>&nbsp;et les&nbsp;<a href=\"https:\/\/www.drupal.org\/docs\/8\/api\/migrate-api\/migrate-process-plugins\/list-of-process-plugins-provided-by-migrate-plus\">modules contribu\u00e9s<\/a>. Leur configuration peut \u00eatre g\u00e9n\u00e9ralis\u00e9e comme suit :<\/p>\n\n\n\n<p><code>Loading gist https:\/\/gist.github.com\/dinarcon\/1421ad601fa94815587cc95f505166a5<\/code><\/p>\n\n\n\n<p>Le plugin de processus est configur\u00e9 dans un niveau suppl\u00e9mentaire d&#8217;indentation sous le champ de destination. La cl\u00e9 `plugin` est n\u00e9cessaire et d\u00e9termine quel plugin utiliser. Ensuite, une liste d&#8217;options de configuration suit. Consultez la documentation de chaque plugin pour conna\u00eetre les options disponibles. Certaines options de configuration seront requises tandis que d&#8217;autres seront optionnelles. Par exemple, le plugin `concat` n\u00e9cessite une `source`, mais le `delimiter` est facultatif. Un exemple d&#8217;utilisation puis dans cet article.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-fourniture-des-valeurs-par-defaut\">Fourniture des valeurs par d\u00e9faut<\/h2>\n\n\n\n<p>Parfois, la destination exige qu&#8217;une propri\u00e9t\u00e9 ou un champ soit d\u00e9fini, mais cette information n&#8217;est pas pr\u00e9sente dans la source. Imaginez que vous migrez des n\u0153uds. Comme nous l&#8217;avons mentionn\u00e9, il est recommand\u00e9 d&#8217;<a href=\"https:\/\/understanddrupal.com\/fr\/articles\/ecrire-votre-premiere-migration-drupal\">\u00e9crire un fichier de migration par type de contenu<\/a>. Si vous savez \u00e0 l&#8217;avance que pour une migration particuli\u00e8re vous cr\u00e9erez toujours des n\u0153uds de type `Basic page`, alors il serait redondant d&#8217;avoir une colonne dans la source avec la m\u00eame valeur pour chaque ligne. Les donn\u00e9es peuvent ne pas \u00eatre n\u00e9cessaires. Ou peut-\u00eatre qu&#8217;il n&#8217;existe pas. Dans tous les cas, le plugin `<a href=\"https:\/\/api.drupal.org\/api\/drupal\/core%21modules%21migrate%21src%21Plugin%21migrate%21process%21DefaultValue.php\/class\/DefaultValue\">default_value<\/a>` peut \u00eatre utilis\u00e9 pour fournir une valeur lorsque les donn\u00e9es ne sont pas disponibles dans le source.<\/p>\n\n\n\n<p><code>Loading gist https:\/\/gist.github.com\/dinarcon\/1421ad601fa94815587cc95f505166a5<\/code><\/p>\n\n\n\n<p>L&#8217;exemple ci-dessus d\u00e9finit la propri\u00e9t\u00e9 `type&#8217;; pour tous les n\u0153uds de cette migration sur `page&#8217;;, qui est le nom de machine du type de contenu `Basic page`. Ne confondez pas le nom du plugin avec le nom de sa propri\u00e9t\u00e9 de configuration car ils sont identiques : `default_value`. Notez \u00e9galement qu&#8217;\u00e9tant donn\u00e9 qu&#8217;un type (contenu) est d\u00e9fini manuellement dans la section process, la cl\u00e9 `default_bundle` dans la section destination n&#8217;est plus n\u00e9cessaire. Vous pouvez voir ce dernier \u00eatre utilis\u00e9 dans l&#8217;exemple du billet de blog sur l&#8217;<a href=\"https:\/\/understanddrupal.com\/fr\/articles\/ecrire-votre-premiere-migration-drupal\">\u00e9criture d\u2019une migration Drupal<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-concatenation-des-valeurs\">Concat\u00e9nation des valeurs<\/h2>\n\n\n\n<p>Consid\u00e9rez la demande de migration suivante : vous avez une liste de personnes avec le pr\u00e9nom et le nom de famille dans des colonnes s\u00e9par\u00e9es. Les deux sont capitalis\u00e9s. Les deux valeurs doivent \u00eatre mises ensemble (concat\u00e9n\u00e9es) et utilis\u00e9es comme titre des noeuds de type `Basic page`. Le corps de caract\u00e8re doit \u00eatre modifi\u00e9 de fa\u00e7on \u00e0 ce que seule la premi\u00e8re lettre de chaque mot soit en majuscule. S&#8217;il est n\u00e9cessaire de les afficher en majuscules, le CSS peut \u00eatre utilis\u00e9 pour la pr\u00e9sentation. Par exemple : `<a href=\"https:\/\/www.drupal.org\/u\/xamanu\">FELIX DELATTRE<\/a>` serait transform\u00e9 en `Felix Delattre`.<\/p>\n\n\n\n<p><em>Conseil<\/em>: Remettre en question les exigences op\u00e9rationnelles lorsqu&#8217;elles peuvent produire des r\u00e9sultats non d\u00e9sir\u00e9s. Par exemple, si vous deviez impl\u00e9menter cette fonctionnalit\u00e9 comme demand\u00e9, `<a href=\"https:\/\/www.drupal.org\/u\/damienmckenna\">DAMIEN MCKENNA<\/a>` serait transform\u00e9 en `Damien Mckenna`. Ce n&#8217;est pas la majuscule correcte pour le nom de famille `McKenna`. Si la transformation automatique n&#8217;est pas possible ou faisable pour toutes les variations des donn\u00e9es source, prenez des notes et effectuez des mises \u00e0 jour manuelles apr\u00e8s la migration initiale. \u00c9valuer autant de cas d&#8217;utilisation que possible et les porter \u00e0 l&#8217;attention du client.<\/p>\n\n\n\n<p>Pour impl\u00e9menter cette fonctionnalit\u00e9, cr\u00e9ons un nouveau module `ud_migrations_process_intro`, cr\u00e9ons un dossier `migrations`, et \u00e9crivons un fichier de d\u00e9finition de migration appel\u00e9 `udm_process_intro.yml` dedans. Suivez les instructions de ce&nbsp;<a href=\"https:\/\/understanddrupal.com\/fr\/articles\/ecrire-votre-premiere-migration-drupal\">post<\/a>&nbsp;pour trouver l&#8217;emplacement et la structure de dossier appropri\u00e9s ou t\u00e9l\u00e9chargez le module exemple \u00e0 partir de&nbsp;<a href=\"https:\/\/github.com\/dinarcon\/ud_migrations\">https:\/\/github.com\/dinarcon\/ud_migrations<\/a>. C&#8217;est celui nomm\u00e9 `UD Process Plugins Introduction` et le nom de machine `udm_process_intro`. Pour cet exemple, nous supposons une installation Drupal utilisant le profil d&#8217;installation `standard` qui est fourni avec le type de contenu `Basic Page`. Voyons comment g\u00e9rer la concat\u00e9nation du pr\u00e9nom et du nom de famille.<\/p>\n\n\n\n<p><code>Loading gist https:\/\/gist.github.com\/dinarcon\/1421ad601fa94815587cc95f505166a5<\/code><\/p>\n\n\n\n<p>Le plugin `<a href=\"https:\/\/api.drupal.org\/api\/drupal\/core%21modules%21migrate%21src%21Plugin%21migrate%21process%21Concat.php\/class\/Concat\">concat<\/a>&#8216;; peut \u00eatre utilis\u00e9 pour coller un nombre arbitraire de cha\u00eenes de caract\u00e8res. Sa propri\u00e9t\u00e9 `source` contient un tableau de toutes les valeurs que vous voulez mettre ensemble. Le `delimiter` est un param\u00e8tre optionnel qui d\u00e9finit une cha\u00eene \u00e0 ajouter entre les \u00e9l\u00e9ments lorsqu&#8217;ils sont concat\u00e9n\u00e9s. S&#8217;il n&#8217;est pas d\u00e9fini, il n&#8217;y aura pas de s\u00e9paration entre les \u00e9l\u00e9ments dans le r\u00e9sultat concat\u00e9n\u00e9. Ce plugin a une&nbsp;<strong>limitation importante<\/strong>. Vous ne pouvez pas utiliser des cha\u00eenes de caract\u00e8res litt\u00e9raux (string literals) comme partie de ce que vous voulez concat\u00e9ner. Par exemple, joignant la cha\u00eene `Hello` \u00e0 la valeur de la colonne `first_name`. Toutes les valeurs \u00e0 concat\u00e9ner doivent \u00eatre des colonnes dans la source ou des zones d\u00e9j\u00e0 disponibles dans le pipeline du processus. Nous en parlerons dans un prochain billet de blog.<\/p>\n\n\n\n<p>Pour ex\u00e9cuter la migration ci-dessus, vous devez activer le module `ud_migrations_process_intro`. En supposant que vous avez install\u00e9 `<a href=\"https:\/\/www.drupal.org\/project\/migrate_run\">Migrate Run<\/a>`, ouvrez un terminal, changez les r\u00e9pertoires \u00e0 votre `docroot` Drupal, et ex\u00e9cutez la commande suivante : `drush migrate:import udm_process_intro`. Consultez ce&nbsp;<a href=\"https:\/\/understanddrupal.com\/fr\/articles\/ecrire-votre-premiere-migration-drupal\">billet<\/a>&nbsp;si la migration \u00e9choue. Si \u00e7a marche, vous verrez trois pages de base dont le titre contient les noms de certains de mes&nbsp;<a href=\"https:\/\/www.drupal.org\/community\/mentoring\">mentors Drupal<\/a>.&nbsp;<a href=\"https:\/\/twitter.com\/search?q=%23DrupalThanks\">#DrupalThanks<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-chainage-de-plugins-de-processus\">Cha\u00eenage de plugins de processus<\/h2>\n\n\n\n<p>Des progr\u00e8s satisfaisants ont \u00e9t\u00e9 r\u00e9alis\u00e9s jusqu&#8217;\u00e0 pr\u00e9sent, mais la fonctionnalit\u00e9 n&#8217;a pas encore \u00e9t\u00e9 enti\u00e8rement mise en \u0153uvre. Vous devez encore changer la majuscule pour que seule la premi\u00e8re lettre de chaque mot du titre r\u00e9sultant soit en majuscules. Heureusement, l&#8217;API Migrate permet de&nbsp;<a href=\"https:\/\/www.drupal.org\/docs\/8\/api\/migrate-api\/migrate-process-plugins\/migrate-process-overview#full-pipeline\"><strong>cha\u00eener les plugins de processus<\/strong><\/a>. Cela fonctionne de la m\u00eame mani\u00e8re que les&nbsp;<a href=\"https:\/\/fr.wikipedia.org\/wiki\/Tube_(shell)\">pipelines unix<\/a>&nbsp;en ce sens que la sortie d&#8217;un plugin de processus devient l&#8217;entr\u00e9e du plugin suivant dans la cha\u00eene. Lorsque le dernier plugin de la cha\u00eene termine sa transformation, la valeur de retour est attribu\u00e9e au champ de destination. Voyons \u00e7a en action :<\/p>\n\n\n\n<p><code>Loading gist https:\/\/gist.github.com\/dinarcon\/1421ad601fa94815587cc95f505166a5<\/code><\/p>\n\n\n\n<p>Le plugin de processus `<a href=\"https:\/\/api.drupal.org\/api\/drupal\/core%21modules%21migrate%21src%21Plugin%21migrate%21process%21Callback.php\/class\/Callback\">callback<\/a>` passe une valeur \u00e0 une fonction PHP et retourne son r\u00e9sultat. La fonction \u00e0 appeler est sp\u00e9cifi\u00e9e dans l&#8217;option de configuration `callable`. Notez que ce plugin attend une option `source` contenant une colonne de la source ou de la valeur du pipeline de processus. Cette valeur est envoy\u00e9e comme premier argument \u00e0 la fonction. Parce que nous utilisons le plugin `callback` comme partie d&#8217;une cha\u00eene, la source est suppos\u00e9e \u00eatre la derni\u00e8re sortie du plugin pr\u00e9c\u00e9dent. Il n&#8217;est donc pas n\u00e9cessaire de d\u00e9finir une `source;. Ainsi, nous concat\u00e9nons les colonnes, les mettons toutes en minuscules, puis capitalisons chaque mot.<\/p>\n\n\n\n<p>S&#8217;appuyer sur des appels directs de fonctions PHP ne devrait \u00eatre qu&#8217;un dernier recours. De meilleures alternatives incluent l&#8217;<a href=\"https:\/\/www.drupal.org\/docs\/8\/api\/migrate-api\/migrate-process\/writing-a-process-plugin\">\u00e9criture de vos propres plugins de processus<\/a>&nbsp;qui encapsule votre logique s\u00e9par\u00e9ment de la d\u00e9finition de la migration. Le plugin `callback` a ses propres limitations. Par exemple, vous ne pouvez pas passer de param\u00e8tres suppl\u00e9mentaires \u00e0 la fonction `callable`. Il recevra la valeur sp\u00e9cifi\u00e9e comme premier argument et rien d&#8217;autre. Dans l&#8217;exemple ci-dessus, nous pourrions combiner les appels \u00e0&nbsp;<a href=\"https:\/\/www.php.net\/manual\/fr\/function.mb-strtolower.php\">mb_strtolower<\/a>() et&nbsp;<a href=\"https:\/\/www.php.net\/manual\/fr\/function.ucwords.php\">ucwords<\/a>() en un seul appel \u00e0&nbsp;<a href=\"https:\/\/www.php.net\/manual\/fr\/function.mb-convert-case.php\">mb_convert_case<\/a>($source, MB_CASE_TITLE) si les param\u00e8tres suppl\u00e9mentaires \u00e9taient autoris\u00e9s.<\/p>\n\n\n\n<p><em>Conseil<\/em>&nbsp;: Vous devriez avoir une bonne compr\u00e9hension de vos formats de source et de destination. Dans cet exemple, une des valeurs \u00e0 vouloir transformer est `MELAN\u00c7ON`. A cause de la c\u00e9dille (<strong>\u00e7<\/strong>), l&#8217;utilisation de&nbsp;<a href=\"https:\/\/www.php.net\/manual\/fr\/function.strtolower.php\">strtolower<\/a>() n&#8217;est pas ad\u00e9quate dans ce cas car elle laisserait ce caract\u00e8re en majuscules (`melan\u00c7on`).&nbsp;<a href=\"https:\/\/www.php.net\/manual\/fr\/ref.mbstring.php\">Les fonctions de cha\u00eenes de caract\u00e8res multioctets<\/a>&nbsp;(mb_*) sont n\u00e9cessaires pour une transformation correcte. ucwords() n&#8217;en fait pas partie et pr\u00e9senterait des probl\u00e8mes similaires si la premi\u00e8re lettre des mots est un caract\u00e8re sp\u00e9cial. Une attention particuli\u00e8re doit \u00eatre port\u00e9e \u00e0 l&#8217;encodage des caract\u00e8res des tables dans votre base de donn\u00e9es de destination.<\/p>\n\n\n\n<p><em>Note technique<\/em>: `mb_strtolower` est une fonction fournie par l&#8217;extension PHP `<a href=\"https:\/\/www.php.net\/manual\/fr\/mbstring.installation.php\">mbstring<\/a>`. Il n&#8217;est pas activ\u00e9 par d\u00e9faut ou vous ne l&#8217;avez peut-\u00eatre pas install\u00e9. Dans ces cas, la fonction ne serait pas disponible lorsque Drupal essaie de l&#8217;appeler. L&#8217;erreur suivante se produit lorsque vous essayez d&#8217;appeler une fonction qui n&#8217;est pas disponible : Le `callable` doit \u00eatre une fonction ou m\u00e9thode valide. Pour Drupal et cette fonction particuli\u00e8re, cette erreur ne serait jamais d\u00e9clench\u00e9e, m\u00eame si l&#8217;extension est manquante. C&#8217;est parce que le&nbsp;<a href=\"https:\/\/packagist.org\/packages\/drupal\/core\">c\u0153ur Drupal<\/a>&nbsp;d\u00e9pend de certains&nbsp;<a href=\"https:\/\/packagist.org\/packages\/symfony\/http-foundation\">paquets Symfony<\/a>&nbsp;qui d\u00e9pendent du paquet `<a href=\"https:\/\/packagist.org\/packages\/symfony\/polyfill-mbstring\">symfony\/polyfill-mbstring<\/a>`. Ce dernier fournit un&nbsp;<a href=\"https:\/\/fr.wikipedia.org\/wiki\/Polyfill\">polyfill<\/a>&nbsp;pour les fonctions mb_* qui a \u00e9t\u00e9 utilis\u00e9 depuis la&nbsp;<a href=\"https:\/\/www.drupal.org\/node\/2850048\">version 8.6.x de Drupal<\/a>.<\/p>\n\n\n\n<p>Qu&#8217;avez-vous appris dans le billet d&#8217;aujourd&#8217;hui ? Saviez-vous que le sucre syntaxique vous permet d&#8217;\u00e9crire des d\u00e9finitions de plugins plus courtes ? Etiez-vous au courant de l&#8217;encha\u00eenement de plugins de processus pour effectuer plusieurs transformations sur les m\u00eames donn\u00e9es ? Lors de la planification de vos migrations, aviez-vous pris en compte l&#8217;encodage des caract\u00e8res sur la source et la destination ? Faites-vous de votre mieux pour \u00e9viter le plugin de processus `callback ? Veuillez partager vos r\u00e9ponses dans les commentaires. Aussi, je vous serais reconnaissant de bien vouloir partager ce billet de blog avec vos coll\u00e8gues.<\/p>\n\n\n\n<p>Cette s\u00e9rie de billets est rendue possible gr\u00e2ce \u00e0 ces&nbsp;<a href=\"https:\/\/understanddrupal.com\/migrations\">g\u00e9n\u00e9reux commanditaires<\/a>.&nbsp;<a href=\"https:\/\/understanddrupal.com\/fr\/contact\/feedback\">Contactez-nous<\/a>&nbsp;si votre organisation souhaite soutenir ce projet de documentation, qu&#8217;il s&#8217;agisse de la s\u00e9rie sur la migration ou d&#8217;autres sujets.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dans l&#8217;entr\u00e9e pr\u00e9c\u00e9dente, nous avons \u00e9crit notre premi\u00e8re migration Drupal. Dans cet exemple, nous avons copi\u00e9 les valeurs mot \u00e0 mot de la source vers la destination. D\u2019habitude, les donn\u00e9es doivent \u00eatre transform\u00e9es d&#8217;une mani\u00e8re ou d&#8217;une autre pour correspondre au format attendu par la destination ou pour r\u00e9pondre aux besoins m\u00e9tier. Aujourd&#8217;hui, nous allons en apprendre plus sur les plugins de processus et comment ils fonctionnent dans le cadre de le pipeline de migration Drupal.<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[23],"tags":[72],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v22.8 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Utilisation de plugins de processus pour la transformation de donn\u00e9es dans les migrations Drupal - Understand Drupal<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/understanddrupal.com\/fr\/blog\/utilisation-de-plugins-de-processus-pour-la-transformation-de-donnees-dans-les-migrations\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Utilisation de plugins de processus pour la transformation de donn\u00e9es dans les migrations Drupal - Understand Drupal\" \/>\n<meta property=\"og:description\" content=\"Dans l&#039;entr\u00e9e pr\u00e9c\u00e9dente, nous avons \u00e9crit notre premi\u00e8re migration Drupal. Dans cet exemple, nous avons copi\u00e9 les valeurs mot \u00e0 mot de la source vers la destination. D\u2019habitude, les donn\u00e9es doivent \u00eatre transform\u00e9es d&#039;une mani\u00e8re ou d&#039;une autre pour correspondre au format attendu par la destination ou pour r\u00e9pondre aux besoins m\u00e9tier. Aujourd&#039;hui, nous allons en apprendre plus sur les plugins de processus et comment ils fonctionnent dans le cadre de le pipeline de migration Drupal.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/understanddrupal.com\/fr\/blog\/utilisation-de-plugins-de-processus-pour-la-transformation-de-donnees-dans-les-migrations\/\" \/>\n<meta property=\"og:site_name\" content=\"Understand Drupal\" \/>\n<meta property=\"article:published_time\" content=\"2019-08-03T09:00:06+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-01-26T20:18:55+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/understanddrupal.com\/wp-content\/uploads\/2022\/01\/process_plugins_intro-1-scaled.jpeg\" \/>\n<meta name=\"author\" content=\"Mauricio Dinarte\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Mauricio Dinarte\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/understanddrupal.com\/fr\/blog\/utilisation-de-plugins-de-processus-pour-la-transformation-de-donnees-dans-les-migrations\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/understanddrupal.com\/fr\/blog\/utilisation-de-plugins-de-processus-pour-la-transformation-de-donnees-dans-les-migrations\/\"},\"author\":{\"name\":\"Mauricio Dinarte\",\"@id\":\"https:\/\/understanddrupal.com\/#\/schema\/person\/73fa828d2b498d144def1204a114b7d3\"},\"headline\":\"Utilisation de plugins de processus pour la transformation de donn\u00e9es dans les migrations Drupal\",\"datePublished\":\"2019-08-03T09:00:06+00:00\",\"dateModified\":\"2022-01-26T20:18:55+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/understanddrupal.com\/fr\/blog\/utilisation-de-plugins-de-processus-pour-la-transformation-de-donnees-dans-les-migrations\/\"},\"wordCount\":1849,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/understanddrupal.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/understanddrupal.com\/fr\/blog\/utilisation-de-plugins-de-processus-pour-la-transformation-de-donnees-dans-les-migrations\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/understanddrupal.com\/wp-content\/uploads\/2022\/01\/process_plugins_intro-1-scaled.jpeg\",\"keywords\":[\"migrations\"],\"articleSection\":[\"Non classifi\u00e9(e)\"],\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/understanddrupal.com\/fr\/blog\/utilisation-de-plugins-de-processus-pour-la-transformation-de-donnees-dans-les-migrations\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/understanddrupal.com\/fr\/blog\/utilisation-de-plugins-de-processus-pour-la-transformation-de-donnees-dans-les-migrations\/\",\"url\":\"https:\/\/understanddrupal.com\/fr\/blog\/utilisation-de-plugins-de-processus-pour-la-transformation-de-donnees-dans-les-migrations\/\",\"name\":\"Utilisation de plugins de processus pour la transformation de donn\u00e9es dans les migrations Drupal - Understand Drupal\",\"isPartOf\":{\"@id\":\"https:\/\/understanddrupal.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/understanddrupal.com\/fr\/blog\/utilisation-de-plugins-de-processus-pour-la-transformation-de-donnees-dans-les-migrations\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/understanddrupal.com\/fr\/blog\/utilisation-de-plugins-de-processus-pour-la-transformation-de-donnees-dans-les-migrations\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/understanddrupal.com\/wp-content\/uploads\/2022\/01\/process_plugins_intro-1-scaled.jpeg\",\"datePublished\":\"2019-08-03T09:00:06+00:00\",\"dateModified\":\"2022-01-26T20:18:55+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/understanddrupal.com\/fr\/blog\/utilisation-de-plugins-de-processus-pour-la-transformation-de-donnees-dans-les-migrations\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/understanddrupal.com\/fr\/blog\/utilisation-de-plugins-de-processus-pour-la-transformation-de-donnees-dans-les-migrations\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/understanddrupal.com\/fr\/blog\/utilisation-de-plugins-de-processus-pour-la-transformation-de-donnees-dans-les-migrations\/#primaryimage\",\"url\":\"https:\/\/understanddrupal.com\/wp-content\/uploads\/2022\/01\/process_plugins_intro-1-scaled.jpeg\",\"contentUrl\":\"https:\/\/understanddrupal.com\/wp-content\/uploads\/2022\/01\/process_plugins_intro-1-scaled.jpeg\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/understanddrupal.com\/fr\/blog\/utilisation-de-plugins-de-processus-pour-la-transformation-de-donnees-dans-les-migrations\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/understanddrupal.com\/fr\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Utilisation de plugins de processus pour la transformation de donn\u00e9es dans les migrations Drupal\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/understanddrupal.com\/#website\",\"url\":\"https:\/\/understanddrupal.com\/\",\"name\":\"Understand Drupal\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/understanddrupal.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/understanddrupal.com\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/understanddrupal.com\/#organization\",\"name\":\"Understand Drupal\",\"url\":\"https:\/\/understanddrupal.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/understanddrupal.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/understanddrupal.com\/wp-content\/uploads\/2021\/12\/understanddrupal_logo_white.png\",\"contentUrl\":\"https:\/\/understanddrupal.com\/wp-content\/uploads\/2021\/12\/understanddrupal_logo_white.png\",\"width\":100,\"height\":73,\"caption\":\"Understand Drupal\"},\"image\":{\"@id\":\"https:\/\/understanddrupal.com\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/understanddrupal.com\/#\/schema\/person\/73fa828d2b498d144def1204a114b7d3\",\"name\":\"Mauricio Dinarte\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/understanddrupal.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/20c842c5c006728abe93e6122524f5b7?s=96&d=blank&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/20c842c5c006728abe93e6122524f5b7?s=96&d=blank&r=g\",\"caption\":\"Mauricio Dinarte\"},\"url\":\"https:\/\/understanddrupal.com\/fr\/blog\/author\/dinarcon\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Utilisation de plugins de processus pour la transformation de donn\u00e9es dans les migrations Drupal - Understand Drupal","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/understanddrupal.com\/fr\/blog\/utilisation-de-plugins-de-processus-pour-la-transformation-de-donnees-dans-les-migrations\/","og_locale":"fr_FR","og_type":"article","og_title":"Utilisation de plugins de processus pour la transformation de donn\u00e9es dans les migrations Drupal - Understand Drupal","og_description":"Dans l'entr\u00e9e pr\u00e9c\u00e9dente, nous avons \u00e9crit notre premi\u00e8re migration Drupal. Dans cet exemple, nous avons copi\u00e9 les valeurs mot \u00e0 mot de la source vers la destination. D\u2019habitude, les donn\u00e9es doivent \u00eatre transform\u00e9es d'une mani\u00e8re ou d'une autre pour correspondre au format attendu par la destination ou pour r\u00e9pondre aux besoins m\u00e9tier. Aujourd'hui, nous allons en apprendre plus sur les plugins de processus et comment ils fonctionnent dans le cadre de le pipeline de migration Drupal.","og_url":"https:\/\/understanddrupal.com\/fr\/blog\/utilisation-de-plugins-de-processus-pour-la-transformation-de-donnees-dans-les-migrations\/","og_site_name":"Understand Drupal","article_published_time":"2019-08-03T09:00:06+00:00","article_modified_time":"2022-01-26T20:18:55+00:00","og_image":[{"url":"https:\/\/understanddrupal.com\/wp-content\/uploads\/2022\/01\/process_plugins_intro-1-scaled.jpeg"}],"author":"Mauricio Dinarte","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Mauricio Dinarte","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/understanddrupal.com\/fr\/blog\/utilisation-de-plugins-de-processus-pour-la-transformation-de-donnees-dans-les-migrations\/#article","isPartOf":{"@id":"https:\/\/understanddrupal.com\/fr\/blog\/utilisation-de-plugins-de-processus-pour-la-transformation-de-donnees-dans-les-migrations\/"},"author":{"name":"Mauricio Dinarte","@id":"https:\/\/understanddrupal.com\/#\/schema\/person\/73fa828d2b498d144def1204a114b7d3"},"headline":"Utilisation de plugins de processus pour la transformation de donn\u00e9es dans les migrations Drupal","datePublished":"2019-08-03T09:00:06+00:00","dateModified":"2022-01-26T20:18:55+00:00","mainEntityOfPage":{"@id":"https:\/\/understanddrupal.com\/fr\/blog\/utilisation-de-plugins-de-processus-pour-la-transformation-de-donnees-dans-les-migrations\/"},"wordCount":1849,"commentCount":0,"publisher":{"@id":"https:\/\/understanddrupal.com\/#organization"},"image":{"@id":"https:\/\/understanddrupal.com\/fr\/blog\/utilisation-de-plugins-de-processus-pour-la-transformation-de-donnees-dans-les-migrations\/#primaryimage"},"thumbnailUrl":"https:\/\/understanddrupal.com\/wp-content\/uploads\/2022\/01\/process_plugins_intro-1-scaled.jpeg","keywords":["migrations"],"articleSection":["Non classifi\u00e9(e)"],"inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/understanddrupal.com\/fr\/blog\/utilisation-de-plugins-de-processus-pour-la-transformation-de-donnees-dans-les-migrations\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/understanddrupal.com\/fr\/blog\/utilisation-de-plugins-de-processus-pour-la-transformation-de-donnees-dans-les-migrations\/","url":"https:\/\/understanddrupal.com\/fr\/blog\/utilisation-de-plugins-de-processus-pour-la-transformation-de-donnees-dans-les-migrations\/","name":"Utilisation de plugins de processus pour la transformation de donn\u00e9es dans les migrations Drupal - Understand Drupal","isPartOf":{"@id":"https:\/\/understanddrupal.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/understanddrupal.com\/fr\/blog\/utilisation-de-plugins-de-processus-pour-la-transformation-de-donnees-dans-les-migrations\/#primaryimage"},"image":{"@id":"https:\/\/understanddrupal.com\/fr\/blog\/utilisation-de-plugins-de-processus-pour-la-transformation-de-donnees-dans-les-migrations\/#primaryimage"},"thumbnailUrl":"https:\/\/understanddrupal.com\/wp-content\/uploads\/2022\/01\/process_plugins_intro-1-scaled.jpeg","datePublished":"2019-08-03T09:00:06+00:00","dateModified":"2022-01-26T20:18:55+00:00","breadcrumb":{"@id":"https:\/\/understanddrupal.com\/fr\/blog\/utilisation-de-plugins-de-processus-pour-la-transformation-de-donnees-dans-les-migrations\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/understanddrupal.com\/fr\/blog\/utilisation-de-plugins-de-processus-pour-la-transformation-de-donnees-dans-les-migrations\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/understanddrupal.com\/fr\/blog\/utilisation-de-plugins-de-processus-pour-la-transformation-de-donnees-dans-les-migrations\/#primaryimage","url":"https:\/\/understanddrupal.com\/wp-content\/uploads\/2022\/01\/process_plugins_intro-1-scaled.jpeg","contentUrl":"https:\/\/understanddrupal.com\/wp-content\/uploads\/2022\/01\/process_plugins_intro-1-scaled.jpeg"},{"@type":"BreadcrumbList","@id":"https:\/\/understanddrupal.com\/fr\/blog\/utilisation-de-plugins-de-processus-pour-la-transformation-de-donnees-dans-les-migrations\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/understanddrupal.com\/fr\/"},{"@type":"ListItem","position":2,"name":"Utilisation de plugins de processus pour la transformation de donn\u00e9es dans les migrations Drupal"}]},{"@type":"WebSite","@id":"https:\/\/understanddrupal.com\/#website","url":"https:\/\/understanddrupal.com\/","name":"Understand Drupal","description":"","publisher":{"@id":"https:\/\/understanddrupal.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/understanddrupal.com\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/understanddrupal.com\/#organization","name":"Understand Drupal","url":"https:\/\/understanddrupal.com\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/understanddrupal.com\/#\/schema\/logo\/image\/","url":"https:\/\/understanddrupal.com\/wp-content\/uploads\/2021\/12\/understanddrupal_logo_white.png","contentUrl":"https:\/\/understanddrupal.com\/wp-content\/uploads\/2021\/12\/understanddrupal_logo_white.png","width":100,"height":73,"caption":"Understand Drupal"},"image":{"@id":"https:\/\/understanddrupal.com\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/understanddrupal.com\/#\/schema\/person\/73fa828d2b498d144def1204a114b7d3","name":"Mauricio Dinarte","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/understanddrupal.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/20c842c5c006728abe93e6122524f5b7?s=96&d=blank&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/20c842c5c006728abe93e6122524f5b7?s=96&d=blank&r=g","caption":"Mauricio Dinarte"},"url":"https:\/\/understanddrupal.com\/fr\/blog\/author\/dinarcon\/"}]}},"_links":{"self":[{"href":"https:\/\/understanddrupal.com\/fr\/wp-json\/wp\/v2\/posts\/3957"}],"collection":[{"href":"https:\/\/understanddrupal.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/understanddrupal.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/understanddrupal.com\/fr\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/understanddrupal.com\/fr\/wp-json\/wp\/v2\/comments?post=3957"}],"version-history":[{"count":0,"href":"https:\/\/understanddrupal.com\/fr\/wp-json\/wp\/v2\/posts\/3957\/revisions"}],"wp:attachment":[{"href":"https:\/\/understanddrupal.com\/fr\/wp-json\/wp\/v2\/media?parent=3957"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/understanddrupal.com\/fr\/wp-json\/wp\/v2\/categories?post=3957"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/understanddrupal.com\/fr\/wp-json\/wp\/v2\/tags?post=3957"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}