Question

Voici mon processus :

Job Layout and tJava_1 configuration

Vous pouvez voir le code Java dans tJava_1.Il analyse les données du fichier et s'il atteint la dernière page de recherche, il définira une valeur sur true.Il s'agit du critère d'arrêt du tLoop_1, comme indiqué ici :

tLoop configuration

Est-ce que je gère mal les variables Talend ?Comment puis-je arrêter l'exécution de la boucle une fois que j'ai atteint les critères de mon code Java ?

Était-ce utile?

La solution

Vous n'avez pas besoin des valeurs "Déclaration" ou "Itération".Ce que vous voulez, c'est une variable dans la "Condition" qui est un booléen qui s'évalue à true et est réglé sur false quand vous voulez terminer la boucle.

La meilleure pratique indique que vous devez utiliser des variables de contexte pour les contextes réels fournis à une tâche soit au moment de l'exécution, soit lors du démarrage d'une tâche enfant, puis utiliser globalMap pour les variables disponibles globalement dans une seule tâche.

Donc, dans ce cas, vous devez initialiser une variable booléenne globalMap définie sur true (vous pouvez le faire dans un composant tJava avec globalMap.put("loop",true) ou utilisez le composant tSetGlobalVar), puis dans votre tJavaRow, vous pouvez définir la variable globalMap sur false avec globalMap.put("loop",false).

Si vous deviez utiliser "loop" comme variable globalMap, vous utiliseriez ((Boolean)globalMap.get("loop")) dans votre "Condition" dans le tLoop.

Un exemple simple et fonctionnel pourrait ressembler à ceci :

While loop job layout

Nous définissons d’abord la variable de boucle sur true car nous voulons au moins que ça commence !

tSetGlobalVar configuration

Et puis nous définissons la condition de la boucle while sur la variable globale booléenne :

tLoop configuration

Et enfin, nous exécutons du code dans le composant tJava qui fait quelque chose et définit conditionnellement la variable globale sur false, mettant ainsi fin à la boucle :

if (((Integer)globalMap.get("tLoop_2_CURRENT_ITERATION")) == 3) {
    globalMap.put("loop", false);
} else {
    System.out.println(((Integer)globalMap.get("tLoop_2_CURRENT_ITERATION")));
};
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top