Retour

Exécuter un script paramétré depuis SAP Data Services et récupérer ses messages d’erreurs

Temps de lecture : 6 minutes

Dans ce tutoriel vous apprendrez à lancer l’exécution d’un script .cmd appelé depuis SAP Data Services avec des paramètres d’entrée. Vous saurez aussi comment récupérer le message d’erreur généré par le script en cas d’échec de l’exécution.

Prérequis :

  • Version SAP Data Services (SAP BODS) 4.x
  • Avoir installé SAP BODS avec un IPS (Platform Information Service) de version compatible.
  • Avoir crée une base de donnée et configuré un référentiel local SAP BODS sur cette base. Disposer des droits d’accès à ce référentiel, définis depuis la CMC de l’IPS.
  • Savoir créer un Job SAP BODS simple.
  • Savoir déclarer et utiliser des variables globales ou locales. Le tutoriel suivant donne des détails sur la création de variables.
  • Savoir créer un script SAP BODS. Le tutoriel suivant utilise un script appelé en boucle grâce au composant While.
  • Facultatif mais utile : avoir lu le tutoriel SAP Data Services sur la fonction file_exists.

Contexte :

Remarque : Nous allons utiliser un exemple d’utilisation depuis SAP Data Services d’un script externe réalisant un déplacement de fichier. Mais vous pourrez appliquer les techniques présentées ici à n’importe quel autre script externe ayant des valeurs de retour.

Vous souhaitez déplacer des fichiers depuis un répertoire source vers un répertoire cible :

Vous disposez d’un script « Script_Copie_Fichiers.cmd » afin de réaliser ce déplacement de fichier en prenant pour paramètres :

  • 1 / Le nom du fichier à copier.
  • 2 / Le répertoire source.
  • 3 / Le répertoire cible.

Ce script envoie 3 codes de retour dans les contextes suivants :

  • CodeRetour = 1 si un des 3 paramètres du script manque (1).
  • CodeRetour = 2 si le fichier à déplacer n’existe pas (2).
  • CodeRetour = 3 si une erreur survient lors du déplacement du fichier (3).

Vous souhaitez que ce script soit lancé depuis un Job SAP Data Services avec ses paramètres sous la forme de variables et que les éventuelles erreurs qu’il rencontre soient récupérées par ce Job.

Solution :

Dans notre exemple le répertoire source, la répertoire cible et le script se trouvent dans le répertoire « C:/Fichiers » :

Créez un Job (JOB_EXEC_EXTERNE) contenant un Workflow (WF_EXEC_EXTERNE) et un script (SC_EXEC_EXTERNE). Depuis le contexte de votre Workflow allez dans « Outils » puis « Variables » afin de créer les variables locales suivantes :

  • $VAR_L_FICHIER : prendra comme valeur le nom du fichier à déplacer.
  • $VAR_L_REP_SOURCE : prendra comme valeur le chemin du répertoire source.
  • $VAR_L_REP_CIBLE : prendra comme valeur le chemin du répertoire cible.
  • $VAR_L_RETOUR : prendra comme valeur la valeur de retour de l’exécution du script « Script_Copie_Fichiers.cmd »

Ces variables locales seront visibles depuis SC_EXEC_EXTERNE car il est situé directement dans le contexte de WF_EXEC_EXTERNE :

Ouvrez le script SC_EXEC_EXTERNE puis affectez les variables de répertoire source et cible et du premier fichier à déplacer (1). Afin d’effectuer en une seule ligne le lancement d’exécution du script de déplacement et l’affectation de $VAR_L_RETOUR avec la valeur de retour de cette exécution, nous allons utiliser la fonction exec que vous pouvez obtenir par complétion automatique :

Cette fonction attend comme premier argument le script à exécuter et comme deuxième argument une chaîne de caractère constituée de la succession des valeurs de paramètres à lui passer, séparées par un espace. Le dernier argument (« Flags ») conditionne le type d’information retournée par l’exécution :

Indiquez les arguments demandés par la fonction exec, n’oubliez pas d’inclure les espaces entre la concaténation des paramètres en deuxième argument. En dernier argument la valeur 5 va nous permettre en cas d’erreur d’exécution du script externe de récupérer dans $VAR_L_RETOUR son numéro et message d’erreur. Si aucune erreur ne survient $VAR_L_RETOUR vaudra NULL :

Les autres valeurs possible de de dernier argument sont :

  • 0 : lève une exception « System function failure » en cas d’erreur, rien sinon.
  • 1 : lève une exception « System function failure » en cas d’erreur, renvoie NULL sinon.
  • 2 : renvoie NULL en cas d’erreur, rien sinon.
  • 3 : renvoie NULL dans tous les cas.
  • 4 : renvoie le message d’erreur, et rien si pas d’erreur.
  • 8 : renvoie une concaténation du code de retour et du flux stdout and stderr.
  • 256 : renvoie NULL dans tous les cas, et autorise le Job SAP Data Services à ne pas attendre la fin d’exécution du script externe.

Attention : dans les versions SAP Data Services 4.2 le premier argument doit être constant : il ne peut pas être une variable comme le deuxième argument.

Si le script externe s’est exécuté sans erreur, $VAR_L_RETOUR vaudra NULL, on va donc utiliser deux condition IF, ELSE (une pour chacun de fichiers à déplacer) afin d’afficher un message confirmant le bon déroulement de l’opération de déplacement de fichier, ou bien son échec dans le bloc ELSE :

Vérifiez que la syntaxe du script est validée puis allez dans le contexte du Job et lancez son exécution. Si aucune erreur n’est survenue vous verrez les messages de confirmation s’afficher dans le journal de suivi de l’exécution :

En effet les fichiers ont bien été déplacés :

Afin de tester le comportement en cas d’erreur retirez le dernier paramètre d’entrée du script externe dans la fonction exec qui appelle son exécution pour le premier fichier :

Lancez l’exécution du Job. Cette fois ci le premier fichier n’a pu être déplacé. Le code d’erreur du script externe et son message sont affichés :

Seul le deuxième fichier a été déplacé :

Si vous relancez l’exécution du Job cette fois – ci le code d’erreur 2 sera retourné lors de l’exécution du déplacement du deuxième fichier qui n’est pas trouvé dans le répertoire source :

Vous savez désormais comment lancer l’exécution d’un script .cmd appelé depuis SAP Data Services avec des paramètres d’entrée puis comment le récupérer dans votre Job ses messages d’erreur en cas d’échec.

Laisser un commentaire

Il n'y a pas de commentaires pour le moment. Soyez le premier à participer !