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 :

Modifier les composants de base


Sujet :

Développement de jobs

  1. #1
    Membre chevronné

    Homme Profil pro
    Responsable projets techniques
    Inscrit en
    Février 2003
    Messages
    980
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable projets techniques
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Février 2003
    Messages : 980
    Points : 1 894
    Points
    1 894
    Par défaut Modifier les composants de base
    Bonjour à tous,

    j'ai un problème un peu particulier, et je souhaiterais modifier un composant de base de Talend (DynamicUtils.java qui se trouve dans ...\plugins\org.talend.desinger.routines.tisprovider_5.0.2.r78327\resources\java\routines\system).

    En fait, lorsque j'utilise un schéma dynamique, Talend sort des chaînes "null" pour toutes les valeurs null... ce qui ne m'arrange pas trop, et je voudrais lui dire de mettre plutôt des chaînes vides "". Pour le moment, le moyen le plus simple que j'ai trouvé est de modifier la fonction writeValuesToStringArray du fichier DynamicUtils.java, mais je ne sais pas si c'est faisable et si oui, comment faire ^^

    Quelqu'un a déjà fait ce genre de modifs ?

    Merci d'avance.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 93
    Points : 110
    Points
    110
    Par défaut
    Salut,

    Tu n'aurai pas plus vite fait de creer une routine qui prend en entrée la colonne dynamique et te renvois un type dynamique epuré des "null"

    la type dynamique integre toutes les routines pour accéder au informations et parcourir le tableau

    boubsy

  3. #3
    Membre chevronné

    Homme Profil pro
    Responsable projets techniques
    Inscrit en
    Février 2003
    Messages
    980
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable projets techniques
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Février 2003
    Messages : 980
    Points : 1 894
    Points
    1 894
    Par défaut
    Hello,

    aucune idée, mais dis comme ça, ça semble plus simple ^^ sauf que je ne maîtrises pas assez Talend pour comprendre ce que tu veux dire : je n'ai notamment pas encore jeté un oeil aux routines :s

    Mais je vais regarder si j'arrive à en tirer un truc (si tu as une ou deux pistes pour me guider, je suis preneur !).

    Merci pour la réponse en tout cas, je commençais à désespérer :p

  4. #4
    Membre émérite
    Avatar de haskouse
    Homme Profil pro
    Salesforce
    Inscrit en
    Août 2009
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Maroc

    Informations professionnelles :
    Activité : Salesforce
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2009
    Messages : 923
    Points : 2 684
    Points
    2 684
    Par défaut
    Pour comprendre comment utiliser les routines je te renvoies vers ce tuto :
    http://haskouse.developpez.com/tutor...ation-routine/
    "Le savant qui enseigne le bien aux gens et ne le met pas en pratique, est semblable à la torche qui éclaire en se brûlant." Mohammed le Messager d’Allah (que la paix et le salut d'Allah soient sur lui)

    Tutoriels Talend
    Mes articles publiés
    Mon CV en-ligne

  5. #5
    Membre chevronné

    Homme Profil pro
    Responsable projets techniques
    Inscrit en
    Février 2003
    Messages
    980
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable projets techniques
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Février 2003
    Messages : 980
    Points : 1 894
    Points
    1 894
    Par défaut
    Merci, je suis déjà passé dessus ^^

    C'était plus le coup de la gestion de la colonne Dynamic qui me posait problème... mais en fait, je me suis inspiré de la partie que je voulais modifier dans DynamicUtils.java et je l'ai réécrite en version simplifiée

    Ca donne un truc du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        public static void removeNull(Dynamic column) {
        	for (int i = 0; i < column.getColumnCount(); i++) {
    		    DynamicMetadata metadata = column.getColumnMetadata(i);
    			if ("id_String".equals(metadata.getType()) && column.getColumnValue(i) == null) {
    				column.setColumnValue(i, "");
    			} else if ("id_Double".equals(metadata.getType()) && column.getColumnValue(i) == null) {
    				column.setColumnValue(i, 0.0);
    			} else if (("id_Long".equals(metadata.getType()) || "id_Integer".equals(metadata.getType())) && column.getColumnValue(i) == null) {
    				column.setColumnValue(i, 0);
    			}
    		}
        }
    C'est sûrement pas extraordinaire, mais ça semble faire le boulot sur un petit test... je vais passer ça dans mon job qui posait problème pour vous dire !

  6. #6
    Membre éclairé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2010
    Messages
    343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 343
    Points : 653
    Points
    653
    Par défaut
    De plus, une fois des évolution effectué tu pourras les poster pour que Talend les prennent en compte directement dans la class Dynamic pour les prochaines version :
    http://jira.talendforge.org/secure/Dashboard.jspa

  7. #7
    Membre chevronné

    Homme Profil pro
    Responsable projets techniques
    Inscrit en
    Février 2003
    Messages
    980
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable projets techniques
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Février 2003
    Messages : 980
    Points : 1 894
    Points
    1 894
    Par défaut
    Rah, mais c'est des boulets chez Talend...
    (désolé si quelqu'un de chez Talend lit ça, mais des fois, il y'a des trucs bizarres...)

    Donc ma modification ci-dessus ne marche pas, car la classe Dynamic.java est foireuse... extrait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        public void setColumnValue(int index, Object value) {
            if (index < this.metadatas.size()) {
                modifyColunmValue(index, value);
            }
        }
    // *** jusque là, ok
        private void modifyColunmValue(int index, Object value) {
            if (values.get(index) != null)
                values.set(index, value);
            else
                values.add(index, value);
    // *** sic
        }
    On voit donc que la fonction modifyColunmValue teste si la valeur à modifier est nulle ou pas. Si elle est nulle, ça ajoute (!!) la valeur à la liste au niveau de l'index donné au lieu de modifier la valeur... je suis pas un expert java, mais d'un point de vue logique, je ne comprends pas...
    Dans tous les cas, d'un point de vue fonctionnel, si j'ai une liste "toto",null,"tata" et que je veux modifier le null en "titi", ben en faisant un setColumnValue(1, "titi"), je me retrouve à faire un values.add(1,"titi") et à avoir donc la liste "toto","titi",null,"tata" ce qui ne m'arrange pas, mais alors pas du tout !!


  8. #8
    Membre émérite
    Avatar de haskouse
    Homme Profil pro
    Salesforce
    Inscrit en
    Août 2009
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Maroc

    Informations professionnelles :
    Activité : Salesforce
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2009
    Messages : 923
    Points : 2 684
    Points
    2 684
    Par défaut
    Pourquoi vouloir réutiliser le code de Talend, crées a propre routine et mets y le code qui te conviens.
    "Le savant qui enseigne le bien aux gens et ne le met pas en pratique, est semblable à la torche qui éclaire en se brûlant." Mohammed le Messager d’Allah (que la paix et le salut d'Allah soient sur lui)

    Tutoriels Talend
    Mes articles publiés
    Mon CV en-ligne

  9. #9
    Membre chevronné

    Homme Profil pro
    Responsable projets techniques
    Inscrit en
    Février 2003
    Messages
    980
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable projets techniques
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Février 2003
    Messages : 980
    Points : 1 894
    Points
    1 894
    Par défaut
    Ben à un moment, je suis bien obligé d'utiliser la classe Dynamic pour gérer la colonne non ?

    Enfin, quand je récupère la colonne dynamique dans mon tJavaRow, c'est un objet de type Dynamic, et mon problème, c'est la fonction setColumnValue(...) de cette classe Dynamic.

    Je ne vois pas comment je peux, simplement, passer outre ce point là ?

  10. #10
    Membre émérite
    Avatar de haskouse
    Homme Profil pro
    Salesforce
    Inscrit en
    Août 2009
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Maroc

    Informations professionnelles :
    Activité : Salesforce
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2009
    Messages : 923
    Points : 2 684
    Points
    2 684
    Par défaut
    Pourquoi tu ne crées pas ta propre routine avec une fonction prenant comme attribut la classe Dynamic ?
    "Le savant qui enseigne le bien aux gens et ne le met pas en pratique, est semblable à la torche qui éclaire en se brûlant." Mohammed le Messager d’Allah (que la paix et le salut d'Allah soient sur lui)

    Tutoriels Talend
    Mes articles publiés
    Mon CV en-ligne

  11. #11
    Membre chevronné

    Homme Profil pro
    Responsable projets techniques
    Inscrit en
    Février 2003
    Messages
    980
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable projets techniques
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Février 2003
    Messages : 980
    Points : 1 894
    Points
    1 894
    Par défaut
    Ben je crois que c'est ce que je fais ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        public static void removeNull(Dynamic COLUMN) {
        	FOR (int i = 0; i < COLUMN.getColumnCount(); i++) {
    		    DynamicMetadata metadata = COLUMN.getColumnMetadata(i);
    			IF ("id_String".equals(metadata.getType()) && COLUMN.getColumnValue(i) == NULL) {
    				COLUMN.setColumnValue(i, "");
    			} else IF ("id_Double".equals(metadata.getType()) && COLUMN.getColumnValue(i) == NULL) {
    				COLUMN.setColumnValue(i, 0.0);
    			} else IF (("id_Long".equals(metadata.getType()) || "id_Integer".equals(metadata.getType())) && COLUMN.getColumnValue(i) == NULL) {
    				COLUMN.setColumnValue(i, 0);
    			}
    		}
        }
    Mais le problème, c'est que COLUMN.setColumnValue(i,0) ne marche pas si la valeur de la colonne i est nulle...

  12. #12
    Membre émérite
    Avatar de haskouse
    Homme Profil pro
    Salesforce
    Inscrit en
    Août 2009
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Maroc

    Informations professionnelles :
    Activité : Salesforce
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2009
    Messages : 923
    Points : 2 684
    Points
    2 684
    Par défaut
    Tu ne peux pas modifier le code de setColumnValue().
    Je n'arrive pas à retrouver cette fonction sur mon Talend.
    Quel est le chemin complet (packages) de la classe Dyanmic ?
    "Le savant qui enseigne le bien aux gens et ne le met pas en pratique, est semblable à la torche qui éclaire en se brûlant." Mohammed le Messager d’Allah (que la paix et le salut d'Allah soient sur lui)

    Tutoriels Talend
    Mes articles publiés
    Mon CV en-ligne

  13. #13
    Membre chevronné

    Homme Profil pro
    Responsable projets techniques
    Inscrit en
    Février 2003
    Messages
    980
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable projets techniques
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Février 2003
    Messages : 980
    Points : 1 894
    Points
    1 894
    Par défaut
    Le source :
    en v5
    Talend-5.0.2\studio\Talend-Studio-r78327-V5.0.2\plugins\org.talend.desinger.routines.tisprovider_5.0.2.r78327\resources\java\routines\system\Dynamic.java

    en v4
    C:\Program Files\Talend-4.2.3\studio\Talend-All-r67267-V4.2.3\plugins\org.talend.desinger.routines.tisprovider_4.2.3.r67267\resources\java\routines\system\Dynamic.java


    La classe :
    en v5
    Talend-5.0.2\studio\Talend-Studio-r78327-V5.0.2\plugins\org.talend.desinger.routines.tisprovider_5.0.2.r78327\routines\system\Dynamic.class

    en v4
    Talend-4.2.3\studio\Talend-All-r67267-V4.2.3\plugins\org.talend.desinger.routines.tisprovider_4.2.3.r67267\routines\system\Dynamic.class

  14. #14
    Membre émérite
    Avatar de haskouse
    Homme Profil pro
    Salesforce
    Inscrit en
    Août 2009
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Maroc

    Informations professionnelles :
    Activité : Salesforce
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2009
    Messages : 923
    Points : 2 684
    Points
    2 684
    Par défaut
    Je vois que tu utilises TIS et non pas TOS.
    Je n'ai pas TOS donc je ne pourrais pas t'aider, tu devrais voir avec quelqu'un qui a le même environnement que toi sur son poste il te sera de plus grande aide.
    "Le savant qui enseigne le bien aux gens et ne le met pas en pratique, est semblable à la torche qui éclaire en se brûlant." Mohammed le Messager d’Allah (que la paix et le salut d'Allah soient sur lui)

    Tutoriels Talend
    Mes articles publiés
    Mon CV en-ligne

  15. #15
    Membre chevronné

    Homme Profil pro
    Responsable projets techniques
    Inscrit en
    Février 2003
    Messages
    980
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable projets techniques
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Février 2003
    Messages : 980
    Points : 1 894
    Points
    1 894
    Par défaut
    ok, merci quand même

    à tout hasard, tu ne saurais pas si je peux recompiler les classes de Talend ?

  16. #16
    Membre émérite
    Avatar de haskouse
    Homme Profil pro
    Salesforce
    Inscrit en
    Août 2009
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Maroc

    Informations professionnelles :
    Activité : Salesforce
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2009
    Messages : 923
    Points : 2 684
    Points
    2 684
    Par défaut
    Franchement je ne sais pas.
    "Le savant qui enseigne le bien aux gens et ne le met pas en pratique, est semblable à la torche qui éclaire en se brûlant." Mohammed le Messager d’Allah (que la paix et le salut d'Allah soient sur lui)

    Tutoriels Talend
    Mes articles publiés
    Mon CV en-ligne

  17. #17
    Membre chevronné

    Homme Profil pro
    Responsable projets techniques
    Inscrit en
    Février 2003
    Messages
    980
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable projets techniques
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Février 2003
    Messages : 980
    Points : 1 894
    Points
    1 894
    Par défaut
    Bon, en attendant, la classe sera corrigée en v 5.0.3

    http://jira.talendforge.org/browse/TDI-21019

    Sinon, j'ai "trouvé" une solution de contournement, mais c'est galère (il faut copier la liste des métadonnées - ce qui me pose un souci car je n'arrive pas à dupliquer la liste complète pour le moment, je ne connais pas bien cette partie de Java - supprimer la colonne ajoutée lors du setColumnValue et remettre la bonne liste des métadonnées puisque sinon, les métadonnées ne correspondent plus aux colonnes...)

    'fin, vivement que ça soit corrigé -_-'

  18. #18
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2008
    Messages : 108
    Points : 174
    Points
    174
    Par défaut
    Rah, mais c'est des boulets chez Talend...
    Passons.

    Le bug est fixé et ne nécessite plus que de la QA. Le fix sera disponible en 5.0.3.

    Rémy.

  19. #19
    Membre chevronné

    Homme Profil pro
    Responsable projets techniques
    Inscrit en
    Février 2003
    Messages
    980
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable projets techniques
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Février 2003
    Messages : 980
    Points : 1 894
    Points
    1 894
    Par défaut
    Citation Envoyé par rdubois Voir le message
    Passons.

    Le bug est fixé et ne nécessite plus que de la QA. Le fix sera disponible en 5.0.3.

    Rémy.
    Bonjour,

    je sais, c'est un peu raide comme commentaire, c'est pour ça que j'ai ajouté :
    "(désolé si quelqu'un de chez Talend lit ça, mais des fois, il y'a des trucs bizarres...)"

    je continue en mp, ça n'a rien à faire ici.

  20. #20
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2008
    Messages : 108
    Points : 174
    Points
    174
    Par défaut
    Bonjour,

    à tout hasard, tu ne saurais pas si je peux recompiler les classes de Talend ?
    Oui c'est possible, mais la modification entraînerait la perte du support.

    Cordialement,

    Rémy.

Discussions similaires

  1. Réponses: 3
    Dernier message: 28/02/2011, 14h11
  2. Ou trouver les composants de data base ( DBGO )
    Par Nadirov dans le forum Delphi
    Réponses: 2
    Dernier message: 14/08/2006, 14h15
  3. Comment modifier les données d'une base
    Par anassyto dans le forum Access
    Réponses: 8
    Dernier message: 27/07/2006, 13h26
  4. Problème Update Base de données avec les composants ADO
    Par lingli dans le forum Bases de données
    Réponses: 5
    Dernier message: 20/04/2006, 00h41
  5. Réponses: 4
    Dernier message: 27/05/2004, 15h00

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