|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
|
Futur Membre du Club
![]() Inscription : juin 2006 Messages : 217 ![]() |
Bonjour
Voila j'ai un tmap comme ceci Je voudrais mettre un condition d'insertion. Je veux que la ligne s’insère uniquement si row1.matricule n'existe pas déjà dans la colonne matricule_c. merci d'avance |
|
|
00
|
|
|
#2 |
|
Membre émérite
![]() Nicolas SaumandeArchitecte Décisionnel Inscription : février 2008 Messages : 693 ![]() |
Bonjour,
Une discussion traite actuellement du même sujet : http://www.developpez.net/forums/d10...s/#post6001986 Pour compléter les différentes solutions possibles, tu peux éventuellement vouloir que dans le cas où le matricule existe déjà dans la table, la ligne soit mise à jour (update). Dans ce cas, la mise en oeuvre est assez simple : il suffit de définir le champs matricule_c en clé dans ton schéma de sortie, et de paramétrer le composant de mise à jour de base de données que tu utilises en 'Insert or Update'. Ainsi, si la valeur existe déjà les données de la ligne sont mises à jour, si elle n'existe pas alors la ligne est insérée. Nicolas |
|
|
00
|
|
|
#3 | ||
|
Futur Membre du Club
![]() Inscription : juin 2006 Messages : 217 ![]() |
Citation:
Citation:
Qu'est ce que tu appelle composant de mise à jour ? Dans ma sorti j'ai un composant sugarcrmOutput et il faut sélectionner soit insert soit update. |
||
|
|
00
|
|
|
#4 |
|
Membre émérite
![]() Nicolas SaumandeArchitecte Décisionnel Inscription : février 2008 Messages : 693 ![]() |
Ah oups...
Il est possible que ce composant ne gère pas le mode Update or Insert, contrairement à la plupart des autres composants base de données. Du coup tu vas être obligé de faire de la même manière que ce qui est proposé dans la discussions dont je t'ai donné le lien : tester si la valeur existe, et utiliser 2 flux de sortie, un qui gère l'insert et un qui gère l'update. Nicolas |
|
|
00
|
|
|
#5 |
|
Futur Membre du Club
![]() Inscription : juin 2006 Messages : 217 ![]() |
Pour l'instant je fais que l'insert.
J'ai regarder le lien. J'ai essayer ceci. et dans mon tmap j'ai bien fais la jointure, Et j'ai mit matricule_c en cle. ![]() Seulement malgré ceci l'insert ce fais plusieurs fois je ne vois pas ce qu'il ne va pas. Merci pour l'aide |
|
|
00
|
|
|
#6 |
|
Membre émérite
![]() Nicolas SaumandeArchitecte Décisionnel Inscription : février 2008 Messages : 693 ![]() |
Il manque juste la définition du filtre en sortie.
Il y a plusieurs façons de le faire. Tu peux utiliser le filtre du flux de sortie (flèche blanche avec le + vert) et entrer une condition du genre : Relational.ISNULL(row2.matricule_c). Ainsi une ligne passera dans le flux 'lien' uniquement si le lookup n'a pas ramené de donnée. La condition à utiliser pour le flux de l'update sera donc l'inverse : !Relational.ISNULL(row2.matricule_c). Nicolas |
|
|
10
|
|
|
#7 |
|
Futur Membre du Club
![]() Inscription : juin 2006 Messages : 217 ![]() |
Merci pour l'aide ça marche.
J'ai encore quelque question, comment sais-tu le Relational ? les filtres c'est du JAVA ? Pour le update maintenant il faut que je rajoute un outputSugar relier au tmap mais en update se coût si. Comment va t'il choisir entre l'update et l'insert ? Est-ce-que c'est le filtre qui va faire si on fais un update ou un insert ? Merci |
|
|
00
|
|
|
#8 |
|
Membre émérite
![]() Nicolas SaumandeArchitecte Décisionnel Inscription : février 2008 Messages : 693 ![]() |
Le Relational.ISNULL est une routine standard Talend.
Tu peux voir ces routines dans l'expression builder (quand tu cliques sur une expression). L'expression que tu mets dans un filtre est effectivement du java. Et oui, tu as bien compris. Ce sont les filtres que tu mets dans chacun des 2 flux de sorties dans le tMap qui définissent dans quel composant passe chaque ligne. Nicolas |
|
|
00
|
|
|
#9 |
|
Futur Membre du Club
![]() Inscription : juin 2006 Messages : 217 ![]() |
Bonjour
J'ai mis l'update en place seulement il y a un petit problème c'est que l'update me ré-insert les lignes même en étant en update. J'ai bien mis le filtre. |
|
|
00
|
|
|
#10 |
|
Membre émérite
![]() Nicolas SaumandeArchitecte Décisionnel Inscription : février 2008 Messages : 693 ![]() |
Alors je ne connais pas les composants sugarcrm, mais je ne vois pas comment un composant paramétré en update peut insérer une ligne...
|
|
|
00
|
|
|
#11 |
|
Futur Membre du Club
![]() Inscription : juin 2006 Messages : 217 ![]() |
Je ne comprend pas non plus mais pourtant sur l'image on que il y a deja 13 lignes d’inséré et il lit 6 lignes qui passe dans l'update mais ces lignes sont insère dans la base donc je comprend pas.
J'ai bien mis update après il faut peut être faire quelque chose d'autre mais je trouve rien sur internet pour les composants sugar. ![]()
|
|
|
00
|
|
|
#12 |
|
Futur Membre du Club
![]() Inscription : juin 2006 Messages : 217 ![]() |
Bonjour
Encore une petite question. Comment fais t'on pour passer l'ID de sugarcrm à l'id de l'update de façon à ce qu'il sache quel ligne mettre à jour? J'ai essayer lien.id=update.id sa marche pas. |
|
|
00
|
|
|
#13 |
|
Membre émérite
![]() Nicolas SaumandeArchitecte Décisionnel Inscription : février 2008 Messages : 693 ![]() |
Les mises à jour se font par rapport aux champs clés définis dans le schéma du composant.
Si on compare par rapport à un update SQL, les champs qui sont mis à jour (commande SET) sont ceux qui ne sont pas clés, et les critères de mise à jour (commande WHERE) sont ceux qui sont clés. C'est le comportement des tOutput pour les bases de données, j'imagine que le composant sugarcrm fonctionne de la même façon... Nicolas |
|
|
00
|
|
|
#14 |
|
Futur Membre du Club
![]() Inscription : juin 2006 Messages : 217 ![]() |
Oui mais dans ce cas la cela devrais fonctionner et la ce n'est pas le cas.
On ma dit d'essayer de lui passer l'id de sugarcrm et j'ai pas d'autre solution. Est-ce-que tu serais comment lui passer l'id ? |
|
|
00
|
|
|
#15 |
|
Membre émérite
![]() Nicolas SaumandeArchitecte Décisionnel Inscription : février 2008 Messages : 693 ![]() |
Oui, il faut lui passer un champ contenant l'ID et le définir en tant que clé.
Cet ID ne fait pas partie des données que tu as en entrée ? |
|
|
00
|
|
|
#16 |
|
Futur Membre du Club
![]() Inscription : juin 2006 Messages : 217 ![]() |
Ben dans le cas de l'insert l'id est générer automatiquement pas sugarcrm donc je ne m'en occupe pas.
Mais dans l'update l'Id n'est liée à rien du coup il génère un id comme pour un insert. Je pense que si l'id de l'update étais liée au ligne déjà insérer il serait qu'elle ligne modifier. Je n'arrive pas à lui passer l'id déjà insérer à l'update. |
|
|
00
|
|
|
#17 |
|
Membre émérite
![]() Nicolas SaumandeArchitecte Décisionnel Inscription : février 2008 Messages : 693 ![]() |
Donc à priori, il te faut récupérer l'ID de la ligne que tu as détectée via le lookup pour pouvoir le passer au composant update.
|
|
|
00
|
|
|
#18 |
|
Futur Membre du Club
![]() Inscription : juin 2006 Messages : 217 ![]() |
Ben non pas le lookup, car le lookup pointe sur une autre table d'une autre base.
Enfaite il me faut récupéré les IDs qui on étais générer par sugarcrm lors de l'insert. |
|
|
00
|
|
|
#19 |
|
Membre émérite
![]() Nicolas SaumandeArchitecte Décisionnel Inscription : février 2008 Messages : 693 ![]() |
Alors c'est un autre lookup qu'il te faut.
Un qui pointe sur la même table qui est alimentée, afin de récupérer l'ID qui correspond à la ligne que tu souhaites mettre à jour. |
|
|
00
|
|
|
#20 |
|
Futur Membre du Club
![]() Inscription : juin 2006 Messages : 217 ![]() |
J'ai mit un lookup en plus en dessous de l'autre et j'ai liée l'id.
Mais sa marche toujours pas j'ai pas du faire le bon truc. Je voulais savoir si il y aurais pas moyen de lancer un update sql d'une table à une autre. mais dans talend. Si oui comment faire, je crois que j'avais vue avec tMSSqlRow que il y avait possibilité d'exécuter des scripts sql. Mais je me demande comment je peux faire référence aux tables. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com