FME_BEGIN_TCL et FME_END_TCL

Hooks au début/à la fin des conversions

Quand l'outil de conversion FME est incorporé dans un système plus grand, il peut être utile de demander à FME d'effectuer un traitement supplémentaire spécifique au site avant ou après chaque conversion.

Les utilisateurs peuvent spécifier plusieurs directives FME_BEGIN_TCL et FME_END_TCL. Les erreurs rencontrées pendant l'exécution des scripts Tcl de début et de fin feront échouer la traduction.

Les directives du fichier de mappage FME_BEGIN_TCL et FME_END_TCL spécifient les scripts Tcl à exécuter avant ou après (respectivement) la traduction proprement dite. Le script FME_END_TCL a accès à un certain nombre de variables qui contiennent les statistiques et l'état de la traduction, et en tant que tel, il peut être utilisé pour écrire des journaux personnalisés ou insérer des enregistrements dans une base de données (peut-être à l'aide des extensions TclODBC ou Oratcl - voir les exemples 6 et 7 dans Exemples Tcl, respectivement) afin d'enregistrer l'activité de la traduction.

Le script FME_END_TCL peut aussi être lu via le fichier de log produit par FME pour extraire des messages en particulier et également enregistrer ces résultats.

Les scripts FME_BEGIN_TCL et FME_END_TCL partagent un interpréteur Tcl, ce qui signifie que le script FME_BEGIN_TCL peut configurer certaines variables globales Tcl qui seront ensuite disponibles pour le script FME_END_TCL. Toutefois, dans la plupart des scénarios, il est probable que seul le script FME_END_TCL sera nécessaire. Enfin, l'interpréteur FME_BEGIN_TCL et FME_END_TCL est complètement distinct des autres interpréteurs Tcl utilisés dans FME ; par exemple, les fonctions FME @TCL et @Tcl2 ne partagent pas cet interpréteur.

Les scripts à exécuter pour FME_BEGIN_TCL ou FME_END_TCL peuvent être spécifiés directement dans le fichier de mappage, ou ils peuvent être introduits à partir d'un fichier externe. S'ils sont spécifiés dans le fichier de mappage, les guillemets doivent être échappés avec un \ et des caractères de continuation doivent être utilisés pour joindre toutes les lignes du script en une seule ligne logique du fichier de mappage FME. Cela nécessite également l'utilisation du séparateur d'instructions ; dans le code Tcl.

Par ailleurs, si le script Tcl est placé dans un fichier externe et introduit dans le code source, les guillemets et le formatage natifs de Tcl peuvent être utilisés. Par exemple :

FME_END_TCL proc finalize {} { \
           ... Tcl code here ...   \
       };                          \
       finalize;
        or
         
    FME_END_TCL source $(FME_MF_DIR_UNIX)/finalization.tcl

Pour information, si le script contient une définition de procédure, il doit appeler la procédure définie, sinon la procédure elle-même ne sera pas exécutée et aucun traitement n'aura lieu.

Si des erreurs sont rencontrées pendant le traitement du script FME_BEGIN_TCL ou FME_END_TCL, elles sont écrites dans le fichier journal. S'il n'y a pas de fichier journal, les erreurs ne seront pas signalées. Toute erreur soulevée par le script Tcl sera propagée vers le haut au traducteur FME et provoquera l'arrêt du traitement avec un code d'erreur, afin que les appelants externes du traducteur FME puissent prendre les mesures appropriées.

Ces crochets ne sont pas disponibles dans la définition d'un format personnalisé. Ils peuvent, bien entendu, être utilisés dans un fichier de mappage ou un traitement qui utilise lui-même un format personnalisé.

L'interface Tcl de FME Objects ne peut être utilisée dans les scripts FME_BEGIN_TCL ou FME_END_TCL.  En effet, l'utilisation de FME Objects au début et à la fin de la traduction entraînerait un conflit de configuration dans le système de traitement de FME.  Cependant, les scripts FME_BEGIN_TCL/FME_END_TCL peuvent eux-mêmes démarrer de nouveaux processus via la commande Tcl "exec", et ces nouveaux processus pourraient impliquer FME Objects Tcl sans aucun conflit.

Note: Pour voir des exemples, consulter Scripts Tcl et Python de lancement et de fermeture