IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

Développement de jobs Discussion :

Comment récupérer les données renvoyées par un tjava ou tjavaRow dans une base


Sujet :

Développement de jobs

  1. #1
    Membre habitué Avatar de bbl22
    Inscrit en
    Février 2009
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 114
    Points : 127
    Points
    127
    Par défaut Comment récupérer les données renvoyées par un tjava ou tjavaRow dans une base
    En fait , j'ai une date debut et une date fin, je vais lister les dates intermédiaires, donc j'ai fait un petit code java qui dit:
    en utilisant Calendar
    For (int i=0;i<nbrejours;i++)
    on incrémente d'un jour.

    le code en lui même marche avec tjava ou tjavaRow, mais seulement, je n'arrive pas à récupérer les résultats de tjava (ou tjavaRow) et l'envoyer dans un tmaysqlOuput par exemple...

    j'ai déclarer les contexts du job, mais j'ai pas très bien compris comment ça marche...
    Avez vous une idée?

    Je vous remercie par avance, ça fait un mois que je suis bloquée dessus.
    bbl MeMa

  2. #2
    Membre expérimenté Avatar de Benoit_Durand
    Profil pro
    Consultant en Business Intelligence Freelance
    Inscrit en
    Mars 2005
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence Freelance

    Informations forums :
    Inscription : Mars 2005
    Messages : 861
    Points : 1 308
    Points
    1 308
    Par défaut
    Dans le schema du tJavarow il faut déclarer un champ maDate qui contiendra la date (ou autre), dans le tJavaRow tu initialises output_row.maDate=maVariable;

    Mais en fait, pour chaque itération de ton For tu souhaites envoyer une ligne dans le tDBOutput ? si oui il aut utiliser un tJavaFlex...
    Pensez à la fonction Recherche

  3. #3
    Membre habitué Avatar de bbl22
    Inscrit en
    Février 2009
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 114
    Points : 127
    Points
    127
    Par défaut
    oui je vais envoyer dans la table pour chaque sortie de ma boucle for,

    merci, je vais tester ça, et vous tiens au courant.

    Merci
    bbl MeMa

  4. #4
    Membre habitué Avatar de bbl22
    Inscrit en
    Février 2009
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 114
    Points : 127
    Points
    127
    Par défaut
    j'ai fait avec tjavaflex, le code marche en lui même, mais mon for, n'est pas pris en compte dans la partie main du code, où dois je mettre la boucle for?

    merci
    bbl MeMa

  5. #5
    Membre habitué Avatar de bbl22
    Inscrit en
    Février 2009
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 114
    Points : 127
    Points
    127
    Par défaut
    la boucle fonction dans le loop du tjavaflex, en faisant un System.out.println.. j'ai bien les informations en boucles, mais dans ma base, j'ai les données données de l'input, et non pas du tjavaflex.

    Eclairer moi SVP
    bbl MeMa

  6. #6
    Membre expérimenté Avatar de Benoit_Durand
    Profil pro
    Consultant en Business Intelligence Freelance
    Inscrit en
    Mars 2005
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence Freelance

    Informations forums :
    Inscription : Mars 2005
    Messages : 861
    Points : 1 308
    Points
    1 308
    Par défaut
    Tu as une date de début et une date de fin, le but est d'insérer les dates intermédiaires dans une table, c'est bien ça ?

    Voilà comment je procéderais à première vue :
    - dans un premier subjob, mettre la date de début et date de fin dans des variables globales
    - dans un second (via onSubJobOK), créer un flux à partir du tjavaflex, le For (int i=0;i<nbrejours;i++){ doit se trouver dans l'en tête ainsi que les pré calculs. Le corps du for dans la partie main et un } dans le pied.

    cdt,
    Pensez à la fonction Recherche

  7. #7
    Membre habitué Avatar de bbl22
    Inscrit en
    Février 2009
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 114
    Points : 127
    Points
    127
    Par défaut
    Citation Envoyé par Hebus_Beer Voir le message
    Tu as une date de début et une date de fin, le but est d'insérer les dates intermédiaires dans une table, c'est bien ça ?

    Voilà comment je procéderais à première vue :
    - dans un premier subjob, mettre la date de début et date de fin dans des variables globales
    - dans un second (via onSubJobOK), créer un flux à partir du tjavaflex, le For (int i=0;i<nbrejours;i++){ doit se trouver dans l'en tête ainsi que les pré calculs. Le corps du for dans la partie main et un } dans le pied.

    cdt,
    Merci Hebus Beer,

    Je vais tester tout ça, donc j'ai récapitule:
    - dans le premier job, je déclare datedebut et dateFin, dans les context, Avec mon MysqlInput?
    - En suite dans le deuxième je crée un tjavaflex(ça j'ai bien comment faire), que je relie ensuite avec un onSubJobOK au premier job, puis j'envoie tout ça vers un MysqlOuput?

    je test...

    Merci encore
    bbl MeMa

  8. #8
    Membre habitué Avatar de bbl22
    Inscrit en
    Février 2009
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 114
    Points : 127
    Points
    127
    Par défaut
    J'ai un petit problème dans mon tjavaflex:
    voici le code:
    START CODE:
    Calendar cal = Calendar.getInstance();
    SimpleDateFormat df = new SimpleDateFormat("dd-MM-yyyy");
    context.getProperty("datedebut");
    System.out.println(context.getProperty("datedebut"));

    for (int i=0;i<Nbre_jours;i++)
    {

    MAIN CODE
    cal.setTime(row1.datedebut);
    cal.getTime();
    cal.add(Calendar.DAY_OF_MONTH,1);
    System.out.println(row1.col1+ " " + row1.col2 +" " + df.format(cal.getTime()));
    row2.dated=cal.getTime();
    row2.col1=row1.col1;
    row2.col2=row1.col2;


    END
    }
    le problème est que mon row1.Nbre_jours est null en déhors du main, alors que si je le met dans le main, il reprends bien les valeurs de ma requêtes, seulement je suis obligé de faire ma boucle jusqu'au nombre de jours enregistré dans ma table pour chaque enregistrement!!

    Je suis complètement bloquer pour cette étape.
    bbl MeMa

  9. #9
    Membre expérimenté Avatar de Benoit_Durand
    Profil pro
    Consultant en Business Intelligence Freelance
    Inscrit en
    Mars 2005
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence Freelance

    Informations forums :
    Inscription : Mars 2005
    Messages : 861
    Points : 1 308
    Points
    1 308
    Par défaut
    Ci-dessous une image de mon idée. (ca fonctionne également avec des variables de context)

    Mais dans ton cas ce n'est pas ce qu'il faut faire ....
    row1.type_abs et row1.d_matricule sont dans MySQL aussi ? Ils varient selon les dates ?

    cdt
    Pensez à la fonction Recherche

  10. #10
    Membre habitué Avatar de bbl22
    Inscrit en
    Février 2009
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 114
    Points : 127
    Points
    127
    Par défaut
    Merci Hebus,
    l'image reprend exactement ce que j'ai fait à l'exception du tsetglobalvar,
    un exemple de ce que dans ma table xy sous mysql
    col1|col2|dated |datefin |nbrejours|
    11111111|xxxxxxxx|15-01-2007|19-01-2007| 4 |
    11187411|xxxxyyyx|13-03-2008|14-03-2008| 1 |
    87552111|xxabdxxx|02-07-2009|06-07-2009| 5 |
    .......

    le but c'est de faire une boucle pour chaque entrée et avoir 4 lignes pour le matricule 11111111, 1 ligne pour 11187411 et 5 pour 87552111......

    Mais seulement quand j'essaie d'appeler mon row1.nbre_jours (et quelque soit le row) dans le start du code, j'ai une erreur, par contre dans le main, tout marche très bien.
    Or je ne peux pas mettre le for (){ dans le main, sinon j'ai pas les résultats de la boucle dans le Mysqloutput....

    MAis je vais quand même tester le tSetGlobalVar...

    Merci encore
    bbl MeMa

  11. #11
    Membre expérimenté Avatar de Benoit_Durand
    Profil pro
    Consultant en Business Intelligence Freelance
    Inscrit en
    Mars 2005
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence Freelance

    Informations forums :
    Inscription : Mars 2005
    Messages : 861
    Points : 1 308
    Points
    1 308
    Par défaut
    Après le tDBInput tu peux faire un tFlowToIterate qui lance le tJavaFlex.
    Le tFlowToIterate stocke toutes les données de la ligne en entrée dans des variables globales qu'il est possible de récupérer dans le tJavaFlex...
    Pensez à la fonction Recherche

  12. #12
    Membre habitué Avatar de bbl22
    Inscrit en
    Février 2009
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 114
    Points : 127
    Points
    127
    Par défaut
    Merci,
    donc j'ai testé avec un tFlowToIterate, il prend bien en compte le row1.nbre_jours, mais seulement, la fonction cal.add(), ne fonctionne plus, car je n'ai plus l'incrémentation, et en sortie, j'ai que la dernière ligne de la boucle qui est enregistrer dans la table.

    En fait ce qui se passe dans la boucle: elle boucle sur jour+1 et n Nombre de jours fois.
    càd que s'il y a 4 jours entre date debut(12-0-2007) et datefin(15-01-2007), incrémenté de 1 jours, j'ai:
    13-01-2007
    13-01-2007
    13-01-2007
    13-01-2007

    Une idée?

    Merci d'avance
    Images attachées Images attachées  
    bbl MeMa

  13. #13
    Membre expérimenté Avatar de Benoit_Durand
    Profil pro
    Consultant en Business Intelligence Freelance
    Inscrit en
    Mars 2005
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence Freelance

    Informations forums :
    Inscription : Mars 2005
    Messages : 861
    Points : 1 308
    Points
    1 308
    Par défaut
    Il serait possible de voir screenshot du code du tJavaFlex, car là j'ai du mal à comprendre ...
    Pensez à la fonction Recherche

  14. #14
    Membre habitué Avatar de bbl22
    Inscrit en
    Février 2009
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 114
    Points : 127
    Points
    127
    Par défaut
    j'ai rajouter un tIterarateToFlow entre le tjavaFlex et le touput, et donc là j'ai toutes les données renvoyées par la boucle mais j'ai toujours pas l'incrémentation:

    Voici le job: Input==>tFlowToIterate==>tjavaflex==>titerateToflow==>output

    voici le code
    START CODE
    Calendar cal = Calendar.getInstance();
    SimpleDateFormat df = new SimpleDateFormat("dd-MM-yyyy");
    for(int i=0;i<row1.nbj;i++)
    {


    MAIN CODE
    cal.setTime(row1.dated);
    cal.add(Calendar.DAY_OF_MONTH,1);
    System.out.println(row1.col1+ " " + row1.col2+ " " + df.format(cal.getTime()));
    row2.dated=cal.getTime();
    row2.col1=row1.col1;
    row2.col2=row1.col2;

    END
    }

    Merci
    bbl MeMa

  15. #15
    Membre expérimenté Avatar de Benoit_Durand
    Profil pro
    Consultant en Business Intelligence Freelance
    Inscrit en
    Mars 2005
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence Freelance

    Informations forums :
    Inscription : Mars 2005
    Messages : 861
    Points : 1 308
    Points
    1 308
    Par défaut
    je ne vois pas l'intéret du tIteratetoFlow après le tJavaFlex

    Il faut mettre le cal.setTime(row1.datedebut); dans le start pour ne pas réinitiliaser cette variable à chaque boucle du for et pourquoi ne pas faire
    cal.add(Calendar.DAY_OF_MONTH,i+1);
    ou cal=cal.add(Calendar.DAY_OF_MONTH,1);

    pour incrémenter à chaque fois
    Pensez à la fonction Recherche

  16. #16
    Membre habitué Avatar de bbl22
    Inscrit en
    Février 2009
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 114
    Points : 127
    Points
    127
    Par défaut
    ok pour cal.setTime(row1.dated),
    sinon j'ai fait cal.add(Calendar.DAY_OF_MONTH,1);
    puisque j'avais déclaré Calendar cal = Calendar.getInstance(); avant

    En fait, j'utilise tIteratetoFlow après pour pouvoir avoir toutes mes données(avec globalMap.get("row1.nom_col"), parce que que sans ça, je n'ai que la dernière boucle qui s'enregistre, par contre avec tIteratetoFlow j'ai toute ma boucle, mais sauf que je n'ai pas l'incrémentation...;

    je dois rater quelque chose, mais je ne sais pas quoi!!!!
    bbl MeMa

  17. #17
    Membre expérimenté Avatar de Benoit_Durand
    Profil pro
    Consultant en Business Intelligence Freelance
    Inscrit en
    Mars 2005
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence Freelance

    Informations forums :
    Inscription : Mars 2005
    Messages : 861
    Points : 1 308
    Points
    1 308
    Par défaut
    C'est du auto commit , ou utilises tu un tMySQLConnection ?
    Pensez à la fonction Recherche

  18. #18
    Membre habitué Avatar de bbl22
    Inscrit en
    Février 2009
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 114
    Points : 127
    Points
    127
    Par défaut [RESOLU]: Comment récupérer les données renvoyées par un tjava ou tjavaRow dans 1tabl
    c'est résolue, tout était ok, donc:

    MysqlInout==>TflowtoIterate ==>tjavaflex==>MysqlOutput.

    la seule chose c'est que j'avais mis clear la table dans le ouput, donc du coup il me supprimait chaque boucle et ne gardait que la dernier, donc j'ai mis "action on table" à None, et ça a marché.

    donc tout est OK,

    merci encore
    bbl MeMa

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 05/03/2010, 13h31
  2. Réponses: 1
    Dernier message: 19/02/2009, 15h37
  3. Comment balayer les données renvoyées par la requête ?!
    Par liv dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 09/06/2008, 11h52
  4. Réponses: 1
    Dernier message: 30/12/2007, 14h51

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