Manuel d'exemples > Contrôle du comportement de Transfert de Fichier par le biais de conditions dans un Workflow

Contrôle du comportement de transfert de fichier par le biais de conditions dans un workflow

Objectif : Un transfert de fichier doit être lancé via un workflow. Il faut pour cela vérifier dans le workflow s'il existe des fichiers source et cible et si les actions correspondantes sont activées.

Objets utilisés : Workflow, job (Windows), transfert de fichier

Eléments de script utilisés : SYS_TIME_PHYSICAL, SYS_DATE_PHYSICAL, STR_CUT, STR_FIND, :SET, :PSET, :PRINT, :DATA, :PUT_ATT

Cet exemple explique comment les conditions et les actions sont utilisées par les tâches de workflow.


Exemples

Le job Windows JOBS.WIN.CON, qui fait partie d'un workflow, doit appeler la liste de fichiers d'un répertoire et l'écrit dans un fichier texte. Puis, le transfert de fichier JOBF.CONDITIONS, qui fait aussi partie du workflow, est activé et transfère ce fichier sur un autre ordinateur.

Le système vérifie ensuite dans le workflow si des problèmes sont survenus lors du transfert de fichier et vous pouvez définir les actions correspondantes. Cette vérification est possible via les onglets Pré-conditions et Post-conditions dans les propriétés des tâches du workflow.

Ce mécanisme permet de vérifier qu'aucune erreur n'est survenue et que les fichiers cibles ne sont pas écrasés.

Créez d'abord le workflow : JOBP.CONDITIONS

Ouvrez l'objet et allez dans l'onglet Variables & Prompts. Saisissez ici les variables d'objet qui contiennent les valeurs des tâches du workflow. L'avantage réside dans le fait que les valeurs sont enregistrées à un endroit et peuvent ensuite être facilement modifiées.

Nom de variable Valeur Description
&SAGENT# WIN01 Agent source du transfert de fichier.
&DAGENT# WIN02 Agent cible du transfert de fichier.
&SLOGIN# GLOBAL.LOGIN Objet Login pour la connexion à l'ordinateur source
&DLOGIN# GLOBAL.LOGIN Objet Login pour la connexion à l'ordinateur cible
&DFILE# C:\temp\test2.txt Chemin et nom du fichier cible

Créez ensuite les objets du workflow :

Job Windows : JOBS.WIN.COND

Ajoutez les lignes de script suivantes dans l'onglet Pré-traitement:

:PUT_ATT HOST = &SAGENT#
:PUT_ATT LOGIN = &SLOGIN#

Les objets agent et Login du Job sont ainsi définis lors de l'exécution. Les Variables d'objet sont héritées du workflow. Veillez donc à ce que le paramètre Hérite du parent dans l'onglet "Variables & Prompts" soit activé en conséquence. Saisissez les lignes suivantes dans l'onglet Traitement :

:SET &DATE# = SYS_DATE_PHYSICAL("YYYYMMDD")
:SET &TIME# = SYS_TIME_PHYSICAL("HHMMSS")

:PSET &SFILE# = "C:\temp\&DATE#_&TIME#.txt"

:DATA dir C:\ >> &SFILE#
:DATA @set retcode=%errorlevel%
:DATA @if NOT %ERRORLEVEL% == 0 goto :retcode

Ce script crée un fichier texte dont le nom se compose de l'heure et de la date actuelles. Ce fichier texte est rempli avec la liste de fichiers de C:\. Le nom du fichier texte est également enregistré dans une variable d'objet et transmis au workflow pour le transfert de fichier.

 

Transfer de fichiers : JOBF.CONIDITONS

Accédez à l'onglet Transfert de fichier et activez l'option "Si le fichier existe" - "Interrompre". Tous les autres attributs requis sont activés lors de l'exécution à l'aide des Variables d'objet héritées du workflow. Pour cela, insérez les lignes suivantes dans l'onglet Traitement :

:PUT_ATT FT_SRC_HOST = &SAGENT#
:PUT_ATT FT_DST_HOST = &DAGENT#
:PUT_ATT FT_SRC_LOGIN = &SLOGIN#
:PUT_ATT FT_DST_LOGIN = &DLOGIN#
:PUT_ATT FT_SRC_FILE = &SFILE#
:PUT_ATT FT_DST_FILE = &DFILE#

 

Enregistrez ensuite les objets et ajoutez-les au workflow. Le job doit être exécuté avant le transfert de fichier.

 

Définissez les conditions et les instructions du transfert de fichier dans le workflow. Ouvrez pour cela les propriétés de JOBF.CONDITIONS et accédez à l'onglet Pré-conditions.

JOBF.CONDITIONS - Onglet Pré-conditions

Définissez la condition CHECK FILE avec les paramètres suivants: Agent *OWN,nom de fichier : &SFILE#, condition : existe

Définissez RUN TASK comme instruction principale. Un bloc Sinon doit également être ajouté dans CHECK FILE avec l'action CANCEL PROCESSFLOW (Etendue : *OWN, tâches subordonnées : inclues).

Vérifiez que le paramètre "Générer à l'exécution" n'est pas activé dans l'objet transfert de fichier. Une erreur due à l'utilisation de la Variable d'objet &SFILE# dans les pré-conditions survient alors.

JOBF.CONDITIONS - Onglet Post-conditions

Dans cet onglet, définissez les conditions qui vérifient si le transfert de fichier a été interrompu (STATUS) et si le fichier cible existe (CHECK FILE). La variable prédéfinie &$RESTART_COUNT# renvoie la fréquence à laquelle la tâche a été redémarrée via cet onglet. Pour éviter une boucle sans fin, la tâche doit être interrompue après trois tentatives de reprise.

Si ce nombre n'est pas encore atteint, le Job JOBS.WIN.COND2, qui renomme le fichier cible existant, est démarré. Aucune donnée n'est ainsi écrasée. Le transfert de fichier est ensuite répété (RESTART TASK).

Le job est démarré avec un alias qui se compose du nom de l'agent cible et du nom de l'objet Login, séparés par un tiret. Ces valeurs sont lues à partir de l'alias dans le Pré Traitement du Job et saisies dans les attributs.

Créez enfin le Job Windows JOBS.WIN.COND2.

Ce job modifie le nom du fichier cible et n'est démarré qu'en cas d'erreur via les propriétés du transfert de fichier qui ont été définies dans le workflow. Le script suivant récupère les objets agent et Login à partir de l'alias dans l'onglet Pré-traitement et les définit via :PUT_ATT.

:SET &ALIAS# = &$ALIAS#
:SET &STRPOS# = STR_FIND(&ALIAS#,'_')
:SET &STRPOS# = &STRPOS#+1
:SET &LOGIN# = STR_CUT(&ALIAS#,&STRPOS#)
:SET &STRPOS# = &STRPOS#-2
:SET &AGENT# = STR_CUT(&ALIAS#,1,&STRPOS#)

:PUT_ATT HOST = &AGENT#
:PUT_ATT LOGIN = &LOGIN#

Les lignes de l'onglet Traitement servent à renommer le fichier cible correspondant (nouveau nom de fichier = heure actuelle):

:SET &TIME# = SYS_TIME_PHYSICAL("HHMMSS")
:DATA rename "C:\temp\test2.txt" &TIME#.txt
:DATA @set retcode=%errorlevel%
:DATA @if NOT %ERRORLEVEL% == 0 goto :retcode

Le nom du fichier cible n'est pas transmis de façon dynamique au job et doit donc être modifié manuellement si nécessaire.

Résultat

Lorsque le workflow JOBP.CONDITIONS est démarré, le job JOBS.WIN.COND cré un fichier sur l'ordinateur de l'agent WIN01. Le transfert de fichier doit transférer ce fichier de cet ordinateur (WIN01) vers un autre ordinateur (WIN02). Si le fichier source existe, le transfert de fichier n'est pas démarré.

Si le fichier cible existe, le transfert de fichier est interrompu. Le fichier cible est ensuite renommé et l'opération répétée. Aucun fichier n'est ainsi écrasé et les données enregistrées sont conservées.

Il est donc possible d'intercepter certaines erreurs et d'activer les actions correspondantes directement dans le workflow en exécutant des vérifications définies.