OSBI.FR - Open Source Business Intelligence

Réutilisation de code JS dans PDI

Cet article synthétise une demande client toute simple : « Comment réutiliser du code dans l’étape Javascript de l’ETL Pentaho Data Integration » ?

Lors de la mise en place de vos traitements PDI, vous pouvez en effet être amenés à intégrer des fonctions utilitaires dans l’étape de traitement Javascript (« Appel script interprété Rhino »)

Par exemple des fonctions de traitement de chaînes de caractères qui sont chargées d’enlever des caractères spéciaux, des retours chariots, ou encore des lettres accentuées.

La méthode employée habituellement est la suivante : vous placez votre fonction de traitement dans l’étape, et à chaque fois que vous avez besoin de l’utiliser, vous faites des copier/coller dans les étapes Javascript où elle est nécessaire. Pas génial pour la maintenance, car en cas de modification il vous faut retrouver et éditer toutes les étapes qui utilisent la fonction 🙁 :

Dans PDI, vous pouvez mutualiser des fonctions JS dans un fichier, et invoquer celles-ci dans vos étapes Javascript. Voici la méthode :

1/ Créez un fichier avec l’extension *.js, (dans cet exemple, « common.js ») et placez-y le code de votre (vos) fonction(s) :

function enleve_accents(chaine) {
return replace(chaine, "À","A","Á","A","Â","A","Ã","A","Ä","A","Å","A","à","a","á","a","â","a","ã","a","ä","a","å","a","Ò","O","Ó","O","Ô","O","Õ","O","Ö","O","Ø","O","ò","o","ó","o","ô","o","õ","o","ö","o","ø","o","È","E","É","E","Ê","E","Ë","E","è","e","é","e","ê","e","ë","e","Ì","I","Í","I","Î","I","Ï","I","ì","i","í","i","î","i","ï","i","Ù","U","Ú","U","Û","U","Ü","U","ù","u","ú","u","û","u","ü","u","ÿ","y","Ñ","N","ñ","n","Ç","C","ç","c");
}

2/ Dans l’étape Javascript, créez un nouvel onglet, déclarez le en tant que « Script de démarrage » (via bouton droit sur l’onglet), puis insérez la fonction LoadScriptFile. Cette méthode a pour but de charger votre script à l’initialisation de l’étape. Dans notre exemple, le fichier « common.js » est situé dans le même répertoire que la transformation, via la variable d’environnement « Internal.Entry.Current.Directory« ):

Il suffit ensuite d’appeler votre fonction dans l’onglet de script de votre transformation, comme suit :

Et hop, le tour est joué. Vous pouvez mutualiser autant de fonctions que nécessaires pour vos étapes Rhino JS.

Vous pouvez télécharger l’exemple ici : reuse_js_pdi.zip

Mise à jour du 1er Mars 2019 :

Il existe une fonction puissante qui permet simplement de retirer tous les diacritiques (donc bien plus propre que mon exemple ci-dessus). Il s’agit de la méthode Java « normalize » de la classe java.text.Normalizer qu’il vous suffit d’invoquer dans une étape « Exécution d’expression java » comme suit :

java.text.Normalizer.normalize(chaine, java.text.Normalizer.Form.NFD).replaceAll("[\\p{InCombiningDiacriticalMarks}]", "")

Retrouvez plus d’informations sur l’utilisation de cette classe ici : https://memorynotfound.com/remove-accents-diacritics-from-string

Soyez le premier à commenter

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée.


*