Usage de la fonction file_exists de SAP Data Services

Dans ce tutoriel vous apprendrez comment rendre plus flexible la lecture de fichiers dans un répertoire en utilisant la fonction file_exists.

Prérequis :

Contexte :

Vous avez créée un Job dont l’exécution doit être lancée quand des fichiers sources sont disponibles dans un répertoire source.

Le nombre de fichiers disponible dans le répertoire source est variable, vous cherchez donc un moyen de n’exécuter le traitement ETL de lecture d’un fichier source que si il est bien présent dans le répertoire source.

Nous utiliserons pour exemple la lecture dans le dossier « Rep Source » contenant au plus 3 fichiers, chacun associé à un traitement SAP BODS :

Solution :

Créez un nouveau Job puis ajoutez y un Workflow nommé WF_LECTURE_FICHIERS dans lequel vous placez trois composants conditionnels :

Ajoutez un script initial à votre Workflow puis connectez en séquence tous les composants. Chacun des composants conditionnel contiendra un Dataflow de lecture d’un des trois fichiers source :

Placez vous au niveau du Workflow et ouvrez l’assistant de création de variables :

Créez les variables suivantes, locales au Workflow :

  • $VAR_L_REP_SOURCE : prendra comme valeur le chemin des fichiers sources. Type : VARCHAR(255).
  • $VAR_L_FIC_EXISTE : prendra successivement comme valeur la valeur de retour d’une fonction testant l’existence de chacun des trois fichiers. vaudra 1 si le fichier existe, 0 sinon. Type : Entier.
  • 3 variables $VAR_L_FIC_N (N = 1 à 3) avec N le numéro du fichier, les noms de chacun des fichiers lui seront respectivement affectées. Type : VARCHAR(255).

Ouvrez le script d’initialisation du Workflow (SRC_TEST_PRESENCE_FICHIER) puis affectez les variables locales créées :

  • $VAR_L_REP_SOURCE prend la valeur du répertoire source.
  • $VAR_L_FIC_N (N = 1 à 3) prend la valeur du chemin de chacun des fichiers source grâce à une concaténation du nom de répertoire source au nom de fichier.

En fin d’initialisation la variable $VAR_L_FIC_EXISTE est affectée une première fois avec le retour de la fonction file_exists prenant comme paramètre $VAR_L_FIC_1, testant ainsi l’existence du premier fichier dans le répertoire source. Si le fichier existe ce retour vaudra 1, sinon 0 :

Ajoutez deux autre scripts intercalés en séquence entre les deux conditions suivantes :

Chacun de ces scripts réaffectera $VAR_L_FIC_EXISTE avec le retour du test de l’exécution de chacun des deux autres fichiers. Ci – dessous vous pouvez ainsi voir le contenu du script SRC_FIC_EXISTE_2 :

Ouvrez le premier composant condition, chargé d’exécuter le traitement de lecture du premier fichier. Ajoutez la condition permettant de n’exécuter ce traitement de lecture que si le fichier existe (1) afin d’éviter la levée d’une erreur de lecture lors de l’exécution. Puis ajoutez le Dataflow chargé de la lecture (2). Faites de même pour les deux autres composants condition chargés de la lecture des deux autres fichiers :

Vous pouvez ensuite choisir d’écrire en dur le chemin du répertoire source dans chacun des trois composants de lecture, ou bien créer dans chacun des Dataflows de lecture un paramètre de lecture $VAR_P_REP_SOURCE :

Ce paramètre de Dataflow devra être affecté de la valeur de la variable globale depuis le composant condition, qui possède le même contexte que le Workflow :

Ouvrez chacun des trois Dataflows de lecture, puis son composant de lecture (format de fichier) :

Utilisez le paramètre créé pour spécifier le répertoire de lecture qui sera ainsi automatiquement affecté lors de chaque lecture :

Vous pouvez désormais valider le Job puis tester son exécution, il n’exécutera chacun des traitements de lecture que si le fichier source correspondant existe.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *