ADI Axway

Ce document a pour objectif de montrer comment créer une route camel dans ADI qui permet de récupérer les listes des commandes déjà intégrées dans ADI afin de filtrer et stocker dans un CSV uniquement les commandes passées par INTERNET.

 

Présentation d’Apache Camel dans le projet route camel dans ADI

Apache Camel est un framework d’intégration implémentant les EIP (Entreprise Integration Pattern).
Des problématiques de communication entre des systèmes hétérogènes existent (formatage de données, routage…).
Camel peut être utilisé de nombreuses façons sous ADI :

  • Connexion à des sources de données pour la récupération de données (formatage, imports des données dans l’application)
  • Mise en forme de données (à partir de ressources que l’on peut créer sous ADI)
  • Transmission de messages (envoi de mail…)

 

Ajout d’une queries pour créer une route camel dans ADI

  • Appuyez sur Queries dans la partie Endpoints
  • Veuillez à ce que le space soit FRM – Fetch
  • Cliquez sur New Query
  • Dans la partie Details, donnez le nom: Get_CanalVente
  • Dans la partie Dimensions, cliquez sur Add dimension, sélectionnez Canal de vente
  • Cliquez sur la Dimensions Canal de vente


 

  • Cliquez sur le bouton add filter by attribute pour pouvoir filtrer les canaux de vente sur Internet
  • Sélectionnez Type de canal
  • Paramétrez le filtre pour le canal soit INTERNET

 

créer une route camel dans ADI pour récupérer, filtrer et stocker des listes

 

  • Cliquez sur Done

Dans la partie Values, cliquez sur Add value, sélectionnez Type de canal

  • Placez la souris sur le long bouton bleu “Type de canal” pour renommer la valeur
  • Renommez par TypeCanal
  • Cliquez sur Save

 

créer une route camel dans ADI pour récupérer, filtrer et stocker des listes

 

Paramétrage de la propriété

  • Allez dans Properties de la partie Transformation pour configurer l’endroit où sera généré le fichier CSV lors du lancement de la route.
  • Veuillez à ce qu’on soit toujours dans le space FRM – Fetch.
  • Cliquez sur New Properties
  • Paramétrez la propriété pour qu’il ait le nom: Supervision_commandes_Internet  et le chemin: Path

 


Paramétrage de la ressource pour la route camel dans ADI

  • Allez dans Ressource de la partie Transformation
  • Veillez à ce qu’on soit toujours dans le space FRM – Fetch
  • Cliquez sur New Resource
  • Donnez à cette ressource le nom de List_CommandeInternet
  • Puis rentrez le requête suivantes :
SELECT

ID,

MONTANT,

NOM,

NB_ITEMS,

CANAL,

TO_CHAR (DATE_DEBUT, ‘DD/MM/YYYY HH24:MI:SS’) AS DATE_DEBUT

FROM Commande

WHERE CANAL LIKE ‘ $headers.Canal_substring$%’ /*Ajout le resultat du substring*/

Cette requête permet de filtrer le type de canal par la première lettre paramétrée dans la route précédemment.

 

 

Configuration de la route camel dans ADI

 

<?xml version= »1.0″ encoding= »UTF-8″?>

<routes xmlns= »http://camel.apache.org/schema/spring » xmlns:u= »http://www.systar.com/aluminium/camel-util »>

<route>

<!– Lance une fois la route dès que l’on appuie sur l’action play

Recuperer uniquement la premiere lettre des nom des gens qui ont commandé par internet

avec une Query

–>

<!– <from uri= »quartz://loop_Suivi_Commande?cron=0+*/2+*+*+*+? »/> –>

<from uri= »timer:SQL_unitaire_commande_internet?repeatCount=1″/>

<to uri= »direct:startQuery »/>

</route>

<route>

<from uri= »direct:startQuery »/>

<!– parametrage des proprietes de la query–>

<setProperty propertyName= »tnd-query.parameters »>

<u:map-create>

<u:map-entry key= »tnd-query.referenceTime »>

<simple resultType= »org.joda.time.ReadableInstant »>NOW</simple>

</u:map-entry>

</u:map-create>

</setProperty>

<!–appel de la query–>

<to uri= »tnd-query:Get_CanalVente »/>

<log message= »Nombre résultats provenant de la Query = ${body.rows.size} »/>

<split>

<simple>${body.rows}</simple>

<!–recuperation des donnees de la query + stockage dans une variable typeCanal–>

<setHeader headerName= »typeCanal »>

<simple>${body.[TypeCanal].value}</simple>

</setHeader>

<setHeader headerName= »Canal_substring »>

<groovy>request.headers.get(« typeCanal »).substring(0,1)</groovy>

</setHeader>

<!– Date du jour –>

<setHeader headerName= »pollDate »>

<u:date-format pattern= »yyyyMMdd »>

<u:date-add date= »NOW » scalar= »0″ type= »days »/>

</u:date-format>

</setHeader>

<!– Lancement de la ressource –>

<to uri= »string-template:tnd-resource:List_CommandeInternet?delimiterStart=$&amp;delimiterStop=$ »/>

<setHeader headerName= »jdbcQuery »>

<simple>${body}</simple>

</setHeader>

<log message= »header= ${headers} »/>

<log message= »[Mind7] Requête supervision commande local filtre sur internet  : ${header[jdbcQuery]} »/>

<!– Lancement de la requete dans la BDD –>

<to uri= »jdbc:Demo_ADI »/>

<choice>

<when>

<simple>${header.CamelJdbcRowCount} &gt; 0</simple>

<log message= »[Mind7] Requête supervision commande local filtre sur internet  – Ecrire fichier csv avec ${header.CamelJdbcRowCount} résultats »/>

<marshal>

<custom ref= »JDBC_TO_CSV »/>

</marshal>

<setHeader headerName= »file »>

<simple>${header.pollDate}_Supervision_Commande_local</simple>

</setHeader>

<to uri= »file:{{Supervision_commandes_Internet}}?fileName=${header.file}.csv »/>

<log message= »[Mind7] Requête supervision des commandes local filtre sur internet – Fetch terminé OK »/>

<setBody>

<simple>${header.jdbcQuery}</simple>

</setBody>

<to uri= »file:{{Supervision_commandes_Internet}}?fileName=${header.file}.csv.done »/>

</when>

<otherwise>

<log message= »[Mind7] Requête supervision des commandes local filtre sur internet  – pas de données »/>

</otherwise>

</choice>

</split>

</route>

</routes>

Description des principales étapes de la route Camel dans ADI

 

  • Etape 1 : Lancement de la route

<from uri= »timer:SQL_unitaire_commande_internet?repeatCount=1″/>

Cette étape permet de définir le nombre de fois où la route va être lancée. Dans cet exemple, la route sera lancée qu’une seule fois.

  • Etape 2 : Appel à la Queries

<from uri= »direct:startQuery »/>

<!– parametrage des proprietes de la query–>

<setProperty propertyName= »tnd-query.parameters »>

<u:map-create>

<u:map-entry key= »tnd-query.referenceTime »>

<simple resultType= »org.joda.time.ReadableInstant »>NOW</simple>

</u:map-entry>

</u:map-create>

</setProperty>

<!–appel de la query–>

<to uri= »tnd-query:Get_CanalVente »/>

Ce script standard permet de faire appel à la queries afin de récupérer les résultats dans ADI.

  • Etape 3 : balises SetHeader

<setHeader headerName= »typeCanal »>

<simple>${body.[TypeCanal].value}</simple>

</setHeader>

<setHeader headerName= »Canal_substring »>

<groovy>request.headers.get(« typeCanal »).substring(0,1)</groovy>

</setHeader>

<!– Date du jour –>

<setHeader headerName= »pollDate »>

<u:date-format pattern= »yyyyMMdd »>

<u:date-add date= »NOW » scalar= »0″ type= »days »/>

</u:date-format>

</setHeader>

 

Concernant les header :

– « typeCanal » permet de récupérer la valeur de la Queries TypeCanal
– « Canal_substring » de récupérer le premier caractère de la requête en utilisant une balise groovy et la fonction substing
– « pollDate »   permet de formater et d’enregistrer la date du jour.

  • Etape 4 : Lancement de la ressource

<to uri= »string-template:tnd-resource:List_CommandeInternet?delimiterStart=$&amp;delimiterStop=$ »/>

Ce script permet de récupérer la valeur du Substring de la Queries puis passer le paramètre dans la ressource afin de lancer la requête SQL et filtrer sur les commandes INTERNET

 

  • Etape 5 : Lancement de la BDD

<to uri= »jdbc:Demo_ADI »/>

Ce script permet de lancer la requête dans la base de données.

 

  • Etape 6 : Création d’un fichier

<choice>

<when>

<simple>${header.CamelJdbcRowCount} &gt; 0</simple>

<log message= »[Mind7] Requête supervision commande local filtre sur internet  – Ecrire fichier csv avec ${header.CamelJdbcRowCount} résultats »/>

<marshal>

<custom ref= »JDBC_TO_CSV »/>

</marshal>

<setHeader headerName= »file »>

<simple>${header.pollDate}_Supervision_Commande_local</simple>

</setHeader>

<to uri= »file:{{Supervision_commandes_Internet}}?fileName=${header.file}.csv »/>

<log message= »[Mind7] Requête supervision des commandes local filtre sur internet – Fetch terminé OK »/>

<setBody>

<simple>${header.jdbcQuery}</simple>

</setBody>

<to uri= »file:{{Supervision_commandes_Internet}}?fileName=${header.file}.csv.done »/>

</when>

<otherwise>

<log message= »[Mind7] Requête supervision des commandes local filtre sur internet  – pas de données »/>

</otherwise>

</choice>

 

Le script utilise, dans cette étape, une expression conditionnelle “choice when otherwise”.

La balise “when” permet de :

  • Compter le nombre de résultats dans la base de données retrouvée grâce à la requête dans l’expression “simple”
  • L’expression Marshall permet de définir le type de format que vont prendre les données (ici transformation du format JDBC au format CSV)
  • Définir le nom du fichier à travers l’expression “Set Header”.
  • Créer et stocker les résultats de la requête dans la première expression “to uri” dans un fichier CSV.
  • Créer et stocker un fichier au format .DONE comprenant la requête utilisée qui a été stockée dans une variable plus tôt dans la route à travers les expressions “setbody” et “to uri”
  • La partie “otherwise” permet d’afficher un message de log s’il n’est pas possible d’exécuter les actions citées ci-dessus.

D’autres tutoriels d’ADI sont aussi disponibles sur le site :

Vous pouvez également visionner ce tutoriel sur notre chaîne YouTube. 

 


AlexisDepuis plus de 15 ans maintenant, je travaille sur des sujets liés à la BI et à l’amélioration des processus. J’ai participé à un grand nombre de projets en tant que leader technique sur de nombreuses technologies. De nature pédagogue, je donne également des cours de langage de programmation.

N’hésitez pas à me faire un retour sur cet article ou à me contacter sur LinkedIn pour échanger sur ces sujets!

Alexis

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

Abonnez-vous à notre newsletter

Saisissez votre adresse e-mail pour vous abonner à ce blog et recevoir les derniers articles publiés!