Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Membre à l'essai
    Inscrit en
    octobre 2009
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : octobre 2009
    Messages : 25
    Points : 16
    Points
    16

    Par défaut [TOS] tLoop et tPOP - Boucler 3x sinon KO

    Bonjour,

    Je tourne en rond avec le composant tLoop et au final me demande si ce que je veux faire est réalisable.

    Actuellement j'ai un Job qui récupère des mails et extrait les PJ. Le job fonctionne bien mais je rencontre souvent des problèmes de connexion vers la boite mail (office365 en POP3).
    Le Job tourne toute les 5min et me spam ma boite car un mail est envoyé lorsque mon Job tombe en échec.

    Je souhaiterais donc boucler la connexion à la boite mail 3 fois si erreur, puis vraiment tomber KO au bout des 3 fois. Et c'est là ou je coince depuis hier.

    J'essaye d'utiliser le code erreur du tWarn_3 mais ça ne semble pas fonctionner. Et quand je met 3 en itération c'est encore pire. Avez-vous une idée de comment je dois procéder ?

    Nom : Capture5.PNG
Affichages : 57
Taille : 72,8 KoNom : Capture2.PNG
Affichages : 56
Taille : 7,9 KoNom : Capture3.PNG
Affichages : 57
Taille : 10,7 Ko

    J'ai passé récemment une formation "TALEND - Niveau 1" mais nous n'avons fait que survolé le composant tLoop, du coup je ne suis pas sur de l'utiliser correctement.
    Merci d'avance.

  2. #2
    Membre à l'essai
    Inscrit en
    octobre 2009
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : octobre 2009
    Messages : 25
    Points : 16
    Points
    16

    Par défaut

    Bonjour,

    J'avance un peu sur ma problématique. J'ai changé de méthode pour utiliser maintenant le tLoop avec un tRunJob et un tJava : tLoop ---iterate---> tRunJob -----OnComponentOk-----> tJava.

    Nom : Capture1_1.PNG
Affichages : 49
Taille : 42,8 Ko

    J'ai crus comprendre que le tloop n'accepte que du Boolean en variable, j'ai essayé de partir la dessus pour mes conditions du tLoop

    Le tRunJob appel appel un job fils qui exécute la connexion tPOP. J'ai décoché "Arrêt en cas d'erreur du fils" sur le tRunJob. Je récupère dans mon tJava le code retour du fils (0=Ok, 1=KO) et créer une variable de contexte avec le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if ( 1 == ((Integer)globalMap.get("tRunJob_1_CHILD_RETURN_CODE")) ){
    context.ERREUR_TPOP=true;}
    else{
    context.ERREUR_TPOP=false;}
    Afin d'avoir la valeur "true" lors d'un code de sortie 1 et la valeur "false" lors d'un code de sortie 0. J'ai du aussi créer dans mes contexts la valeur ERREUR_TPOP sinon le Job ne se compilait pas bien :
    Nom : Capture1_5.PNG
Affichages : 50
Taille : 3,1 Ko

    Le tLoop utilise la variable de contexte ERREUR_TPOP en condition pour ma boucle While :
    Nom : Capture1_2.PNG
Affichages : 51
Taille : 7,1 Ko

    Donc maintenant j'en suis au stade ou ça boucle bien et relance bien mon tRunJob, mais lors d'une connexion réussis et d'un code de sortie 0 du job fils, ça continue de boucler ...

    J'ai ajouté des System.out.println pour comprendre un peu le comportement de mes variables, et me rend compte que lors d'un code de sortie 0 du job fils, la valeur "true" est remonté au lieu de "false".
    J'ai essayé différentes méthodes sans succès pour insérer true ou false dans ERREUR_TPOP. Voici le code du tJava et le compte rendu de l'exécution avec un code sortie 0 du job fils :
    Nom : Capture1_3.PNG
Affichages : 48
Taille : 20,7 KoNom : Capture1_4.PNG
Affichages : 49
Taille : 10,6 Ko

    J'ai voulu effectuer le même procédé pour l'itération, et je rencontre aussi un comportement qui ne correspond pas à mes attentes avec le code suivant dans mon tjava:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if ( 3 <= ((Integer)globalMap.get("tLoop_1_CURRENT_ITERATION")) ){
    context.ITERATION_TPOP=false;}
    else{
    context.ITERATION_TPOP=true;}

  3. #3
    Membre à l'essai
    Inscrit en
    octobre 2009
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : octobre 2009
    Messages : 25
    Points : 16
    Points
    16

    Par défaut

    Bonjour à tous,

    J'ai trouvé une solution à mon problème, je ne sais pas si c'est la plus pertinente mais ça a le mérite de marcher.

    Mon problème avec les mauvaises valeurs renvoyées venait du fait que dans mon tJava, la suite If ... était après les Sysout.print ou des commentaires, et ne rafraichissait pas bien ma variable de contexte au premier passage, et du coup décalait tous les résultats, exemple :

    Code de sortie tRunJob : 1 ; 1 ; 0 ; 0 ; 1 ; 1 ...
    context.ERREUR_TPOP : null ; 1 ; 1 ; 0 ; 0 ; 1 ...

    Je ne serais dire pourquoi, depuis que j'ai passé la suite If en tout premier dans le tJava, plus de soucis.

    Voici donc le chaînage du Job, le tRunJob appel toujours mon job fils qui réalise la connexion à Office365 avec le composant tPOP :
    Nom : Capture2_1.PNG
Affichages : 40
Taille : 30,2 Ko

    Les conditions de la boucle while du tLoop :
    Nom : Capture2_2.PNG
Affichages : 41
Taille : 8,0 Ko

    Les codes des tJava, il y avait peut-être moyen de faire ça plus propre, je ne sais pas trop. Et si je mettais tous dans le même tJava, le second If ne fonctionnait pas bien et ne me rafraichissait pas ma variable de contexte au premier passage, et décalait mes résultats comme vu plus haut, j'ai donc fait deux tJava :
    Nom : Capture2_3.PNG
Affichages : 41
Taille : 13,0 KoNom : Capture2_4.PNG
Affichages : 41
Taille : 13,5 Ko

    Et la déclaration de mes variables de contexte :
    Nom : Capture2_5.PNG
Affichages : 41
Taille : 12,8 Ko


    Voilà, avec tous ceci j'ai bien le comportement attendu :
    Boucler 4 fois puis passer à la suite du traitement si le code retour du job fils est à 1 (code retour erreur), et si le code retour est différent de 1 on arrête la boucle et on passe à la suite du traitement.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    juin 2018
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : juin 2018
    Messages : 27
    Points : 31
    Points
    31

    Par défaut

    Excuse moi, mais ma question n'a absolument rien a voir avec le sujet mais... tu utilises quelle version de TALEND ?

  5. #5
    Membre à l'essai
    Inscrit en
    octobre 2009
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : octobre 2009
    Messages : 25
    Points : 16
    Points
    16

    Par défaut

    Citation Envoyé par rhum_ain Voir le message
    Excuse moi, mais ma question n'a absolument rien a voir avec le sujet mais... tu utilises quelle version de TALEND ?
    Bonjour,

    J'utilise la version TALEND Open Studio 6.3.0.20161026_1219 en Win32.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. utiliser des variables contenues dans des boucles While
    Par Fbertran-pro dans le forum LabVIEW
    Réponses: 1
    Dernier message: 18/02/2011, 01h32
  2. Boucle while et if et tableau variable
    Par beninsky dans le forum Débuter
    Réponses: 5
    Dernier message: 21/02/2009, 23h11
  3. Boucle While et les variables
    Par joboy84 dans le forum Syntaxe
    Réponses: 5
    Dernier message: 05/06/2008, 14h16
  4. Portée d une variable (boucle while)
    Par racoboss dans le forum Langage
    Réponses: 4
    Dernier message: 11/12/2007, 10h37
  5. Affectation de variable boucle FOR à l'intérieur d'une boucle WHILE
    Par Droïde Système7 dans le forum Débutant
    Réponses: 10
    Dernier message: 05/11/2007, 20h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo