Appliquer séparément un traitement à l’ensemble des lignes d’un fichier grâce au composant tFlowToIterate
Dans ce tutoriel vous apprendrez à utiliser le composant tFlowToIterate afin d’appliquer un même traitement de manière itérative à l’ensemble des lignes d’un fichier source.
Prérequis :
- Avoir installé Studio Talend, la partie intégration ETL (Extract Transform Load) des solutions Talend.
- L’application gratuite TOSDI (Talend Open Studio for Data Integration) est suffisante pour disposer des composants utilisés dans ce tutoriel.
- Afin de se familiariser avec le fonctionnement des itérations dans Talend, avoir étudié le tutoriel suivant : Traiter tous les fichiers pertinents d’un répertoire avec le composant tFileList.
- Afin de se familiariser avec le fonctionnement du composant tWriteJSONField, avoir étudié le tutoriel suivant : Mapper des données vers une structure JSON grâce au composant tWriteJSONField.
- Si vous souhaitez en savoir plus sur l’authentification à D365 depuis Talend veuillez consulter le tutoriel suivant : Récupérer un jeton d’authentification à D365 grâce au composant tRESTClient.
- Si vous voulez en savoir plus sur le composant tReplicate veuillez consulter le tutoriel suivant :
Composants ETL utilisés dans le traitement :
tFileInputDelimited, tFileOutputDelimited, tReplicate, tFlowToIterate, tFixedFlowInput, tWriteJSONField, tRestClient.
Contexte
Vous souhaitez créez des journaux et les alimenter en données grâce à une application côté D365 qui nécessite tout d’abord la création d’entêtes de journaux en envoyant. A cette fin vous disposez en entrée d’un fichier creation_entete_journal_D365.csv contenant plusieurs lignes et déposé périodiquement par une application source dans un répertoire sur la machine hôte ou vos Job Talend sont exécutés :


Votre traitement Talend doit utiliser ces données afin de créer une nouvelle entête de journal pour chacune des lignes de votre fichier source puis envoyer ces données au format JSON à D365. Une itération de votre traitement correspondra donc à lecture des données d’une ligne, leur mapping vers une structure JSON puis l’envoi de celle – ci à D365 pour création d’une nouvelle entête de journal.
Si vous voulez en apprendre plus sur les méthodes utilisées par Talend afin d’interagir avec D365 par Data Project vous pouvez consulter le lien suivant https://learn.microsoft.com/en-us/dynamics365/fin-ops-core/dev-itpro/data-entities/data-management-api
Solution
Commencez par créer un nouveau Job Talend Iterate_To_D365. Ajoutez un objectif et une description à votre Job, celà est une bonne pratique permettant à vos collaborateurs d’identifier rapidement la fonction d’un Job :

Insérez le subJob réalisant la demande de jeton à D365 puis créez les contextes de votre Job, incluant les informations de connexion à D365 (grant_type, client_id, client_secret, tenant_id), le chemin du fichier source dans lequel lire les données (chemin_creation_entete) et l’URL de création des entêtes (URL_Creation_Entete_J) :

Depuis les métadonnées de votre référentiel de projet, créer un nouveau schéma de fichier délimité à partir d’un exemple du fichier CSV source utilisé dans votre Job :

Insérez le schéma de fichier obtenu en tant que source (tFileInputDelimited) dans votre Job puis faites le pointer vers le fichier source de création d’entête grâce au contexte chemin_creation_entete. Reliez le subJob de récupération du jeton au nouveau subJob ainsi obtenu par un lien OnSubjobOk puis utilisez un tWarn et un tDie pour le logging des succès et des erreurs de ce nouveau subJob :

Reliez votre tFileInputDelimited à un composant tFlowToIterate afin de transformer votre flux d’entrée en un flux d’itération. Chacune des lignes lues dans le fichier source donnera ainsi lieu à une itération du traitement et un envoi vers l’application cible :

Dans le composant tFlowToIterate décochez « Utiliser la paire (clé, valeur) par défaut dans les variables globales » puis ajoutez une colonne clé de même nom pour chaque colonne du schéma d’entrée :

Ainsi au sein du composant tFlowToIterate pour chaque ligne d’entrée 5 variables globales vont être instanciées avec les valeurs des colonnes de la ligne courante.
Faite un clic droit sur le tFlowToIterate puis choisissez un lien de type Itérer :

Connectez ce lien d’itération à un composant tFixedFlowInput puis pour ajoutez dans son schéma les colonnes correspondant au schéma d’entrée :

Pour chaque colonne du schéma vous devez maintenant récupérer la valeur de la variable globale correspondante générée dans le composant tFlowToIterate. Utilisez pour celà la fonction (String)globalMap.get :

Le reste du traitement à partir de ce tFixedFlowInput sera itératif grâce au lien Iterate, c’est à dire qu’il va s’exécuter une fois pour chaque ligne d’entrée lue, avec à chaque fois les valeurs de variables globales calculées pour l’itération courante. Les liens suivants du traitement seront ainsi des liens classiques « main ».
Reliez le tFixedFlowInput a un composant tWriteJSONField puis au sein de sa vue composant allez dans sa configuration de structure JSON :

Nomme la racine de votre structure XML (« string » ci – dessous) puis sélectionnez tous les champs d’entrée et glissez – déposez les sur la racine cible. Choisissez « Create as sub – element of target node » afin d’insérer ces champs en tant qu’éléments enfants de la racine :

Il n’y a pas de boucle dans la structure mappée mais vous êtes quand même obligés d’en définir une pour éviter une erreur sur le tWriteJSONField. Par un clic droit définissez par exemple le premier champs mappé comme élément de boucle puis validez par OK :

Dans le schéma d tWriteJSONField indiquez l’élément racine « string » en sortie puis sélectionnez « Supprimer le nœud racine » afin que cet élément n’apparaisse pas dans le JSON obtenu :

En sortie du tWriteJSONField insérez un composant Replicate puis un composant tRestClient et un tFileOutputDelimited en sortie du Replicate. Dans la vue composant du tRestClient indiquez l’URL de création d’entête puis la méthode HTTP POST pour un type de contenu JSON :

Toujours dans le composant tRestClient indiquez que vous communiquez avec D365 grâce à une authentification de type « OAuth2 » puis dans « Jeton Bearer » récupérez la valeur du Jeton obtenu, stockée dans la variable « Token » :

Dans la vue Composant du tFileOutputDelimited indiquez le chemin du fichier dans lequel seront envoyées les sorties JSON. Cochez « Ecrire à la suite de » afin qu’à chaque itération correspondant à une ligne source une nouvelle sortie JSON soit ajoutée :

Vérifiez le code de votre Job puis lancez son exécution. Vérifiez dans le fichier cible que pour chaque ligne source un JSON cible a été généré :

Vous savez désormais comment utiliser le composant tFlowToIterate afin d’appliquer un même traitement de manière itérative à l’ensemble des lignes d’un fichier source.
Laisser un commentaire
Il n'y a pas de commentaires pour le moment. Soyez le premier à participer !