Boucler avec un Transformer bloquant
FME peut créer des boucles de traitement autour des Transformers bloquants (ou basés sur des groupes) qui bloqueraient habituellement le flux des entités. Cette entité est similaire à la fonctionnalité de bouclage, mais elle fonctionne d'une manière très différente.
Couleur du fond
Dans un traitement standard, la boucle de traitement des entités traite une entité à la fois. Le flux de travail habituel de FME consiste à prendre une donnée du Reader, à la faire passer par des Transformers, puis à écrire le résultat dans un Writer avant de passer à la donnée d'entrée suivante. Les Transformers peuvent détourner les entités sur des chemins différents, mais FME poussera l'entité unique aussi loin que possible dans le traitement avant de passer à l'entité suivante.
FME Workbench permet de développer un Transformers personnalisé qui peut contourner le processus naturel de transformation de FME : la boucle de transformation permet à FME de prendre une entité d'un point de traitement dans le Transformers personnalisé et de l'insérer dans un autre point. C'est ce qu'on appelle le bouclage. Jusqu'à présent, la fonctionnalité de Boucle était limitée aux seuls Transformers basés sur des entités.
Certains Transformers peuvent se bloquer : c'est-à-dire qu'ils peuvent retenir certaines entités, très souvent jusqu'à ce que FME termine le traitement. (Cela se produit lorsque la fonctionnalité "Regrouper par" d'un Transformer est utilisée, par exemple, parce que les groupes ne peuvent pas se terminer tant que chaque entité n'a pas été considérée). Les Transformers comme celui-ci sont aussi souvent appelés Transformers "basés sur des groupes". Lorsque ces Transformers retiennent une entité, FME retourne au Reader pour obtenir l'entité suivante à traiter. Le Transformer bloquant ne peut générer aucune sortie tant que toutes ses entrées n'ont pas été accumulées. Logiquement, cela signifie qu'un Transformer bloquant ne peut pas être inclus dans une boucle de Transformer parce que la boucle se produit à un moment où le Transformer n'est pas encore prêt à recevoir de nouvelles entités.
La fonctionnalité d'activation de boucle avec un Transformer bloquant annule cette limitation.
Pré-requis
Il n'y a qu'un seul pré-requis lorsque l'on utilise des Transformers bloquants dans les boucles : les Transformers personnalisés doivent être externes (sauvegardés et stockés dans un fichier .fmx) et toujours liés (non intégrés).
Étapes
- Créer un Transformer personnalisé. S'il s'agit d'un Transformer personnalisé incorporé, exportez-le comme un Transformer personnalisé lié.
- Ouvrir le Transformer personnalisé lié (fichier .fmx) dans FME Workbench. Dans le navigateur, sous Paramètres du Transformer > Avancé, régler l'option Activer le bouclage sur Oui.
- Insérer ce Transformers personnalisé lié dans un traitement qui nécessite un bouclage. Lorsque vous ajoutez le Transformers à un traitement, il apparaît comme "Lié". (Si ce n'est pas le cas, cliquez avec le bouton droit de la souris sur le Transformers inséré et choisissez l'option Lier).
- Ce Transformer personnalisé inséré et lié aura un port de sortie supplémentaire appelé INCOMPLETE. Vous ne pouvez pas renommer ce port. Il est créé automatiquement pour acheminer les entités qui satisfont la condition de bouclage mais qui ne peuvent pas être rebouclées parce que le nombre d'itérations de la boucle a dépassé la valeur du "Nombre maximum d'itérations".
Sinon, lorsque vous ajoutez un port de bouclage dans un Transformer personnalisé qui contient un Transformer bloquant, FME vous demande d'exporter le Transformer personnalisé, et affiche le message suivant :
Lorsque le "bouclage bloqué" est activé dans un Transformer personnalisé lié, deux paramètres supplémentaires sont exposés dans le Transformer : Nombre maximal d'itérations et Attribut qui tient le décompte des itérations.
Ces deux paramètres contrôlent combien de fois le bouclage doit être exécuté et aident à prévenir le bouclage infini.