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

Salesforce.com Discussion :

Modification de l'objet requete via un trigger RequeteAfterUpdate


Sujet :

Salesforce.com

  1. #1
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2009
    Messages
    177
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 177
    Points : 86
    Points
    86
    Par défaut Modification de l'objet requete via un trigger RequeteAfterUpdate
    Bonjour à tous,

    Voila j'ai un petit problème (j'espère ), j'essaie de mettre à jour une donnée (de l'objet requete) lorsqu'une autre est renseigné. Pour cela je fais appelle à un trigger RequeteAfterUpdate. Je ne passe pas par un workflow car j'utilise le processus d'autorisation. En fait lorsque je ferme un jalon (appelé T2) et que je renseigne la date CompletionDate (dans l'objet CaseMilestone) je veux que ça mette à jour une donnée (j'insère cette même date dans un champ date de l'objet requête).

    J'ai finis le code mais je rencontre un problème, le message d'erreur est le suivant:

    Erreur :Le déclencheur Apex CaseAfterUpdate a provoqué une exception inattendue. Contactez l'administrateur : CaseAfterUpdate: System.LimitException: Too many SOQL queries: 101

    Le code du trigger:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    //----------------------------------------------------------------------------------------
    	// —	mettre à jour la date de proposition commerciale lorsque Avancee_Jalon_TEC__c == '2'
    	//----------------------------------------------------------------------------------------  
    	
    	if(PAD.canTrigger('AP15')){
    		System.debug('###################### -> AP15QSD');
    		List<Case> lstCaseDateUpdate = new List<Case>();
    		
    		for(integer i=0;i<Trigger.new.size();i++){
    			//Trigger.new[i].Date_proposition_financement__c != null && 
    			if(Trigger.new[i].Avancee_Jalon_TEC__c == '2')
      				lstCaseDateUpdate.add(Trigger.new[i]);
    		}
    		
    		System.debug('###################### -> AP1544 ' + lstCaseDateUpdate);
    		
    		
    		
    		if(lstCaseDateUpdate.size() > 0)
    		{
    		AP15CaseMajDate.setDatePropositionCommerciale(lstCaseDateUpdate);
    		}
    	}
    Voila code appelé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    
    public without sharing class AP15CaseMajDate{
    	
    	public static void setDatePropositionCommerciale  (List<Case> lstCase){
    		
    		System.debug('###################### -> AP15CaseMajDate.setDatePropositionCommerciale - BEGIN -');
    		
    	   	set<Id> setIdCaseUpdate = new set<Id>();
    		
    		 for(Case cCase: lstCase)
    		 {
    		 	setIdCaseUpdate.add(cCase.Id);
    		 }
    	 
    	 		System.debug('###################### -> AP15CaseMajDate.setDatePropositionCommerciale setIdCaseUpdate - BEGIN -' + setIdCaseUpdate);
    		    //List récupérant la date de la fermeture du jalon T2 CompletionDate de la table CaseMilestone) 
        	    List<CaseMilestone> lstCaseMilestone = [Select MilestoneTypeId, Id, CompletionDate, CaseId From CaseMilestone WHERE CaseId IN :setIdCaseUpdate  AND MilestoneTypeId IN (:System.Label.Case_MilestoneTypeId_T2_ContactReseauPhysique, :System.Label.Case_MilestoneTypeId_T2_DossierReseauPhysique_DossierReseauPlateau)];
    			System.debug('###################### -> AP15CaseMajDate.setDatePropositionCommerciale setIdCaseUpdate - BEGIN qsd-' + lstCaseMilestone);
    		
    			Map<Id, DateTime> mapIdCaseDateT2 = new Map<Id, DateTime>();
    
    			for(CaseMilestone m: lstCaseMilestone)
    			{
    				if(m.CompletionDate != null)
    				{
    					mapIdCaseDateT2.put(m.CaseId, m.CompletionDate);
    					System.debug('###################### -> mapIdCaseDateT2 m.CaseId' + m.CaseId);
    					System.debug('###################### -> mapIdCaseDateT2  m.CompletionDate' +  m.CompletionDate);
    				}
    			}
    			
    			
    			List<Case> lstCaseRecup = [SELECT Id, Date_proposition_financement__c FROM Case WHERE Id IN :setIdCaseUpdate];
    		        
    			List<Case> lstUpdateCase = new List<Case>();
    			
    			for(Case a: lstCaseRecup)
    			{
    				if(mapIdCaseDateT2.containskey(a.Id))
    				{
    				    //mettre la date CompletionDate dans la date de proposition commerciale
    	       		    //CompletionDate est de type dateTime et Date_proposition_financement__c est de type Date
    	       			//utilisation de Date.newinstance pour pour avoir le bon format
    					DateTime datePropCommerciale = mapIdCaseDateT2.get(a.Id);
    					Date DtePropComm = Date.newinstance(datePropCommerciale.year(), datePropCommerciale.month(), datePropCommerciale.day());
    					a.Date_proposition_financement__c = DtePropComm;
    					//a.Date_proposition_financement__c = null;
    					System.debug('###################### -> DtePropComm' + DtePropComm);
    					lstUpdateCase.add(a);
    					System.debug('###################### -> lstUpdateCaseqsdd d' + lstUpdateCase);
    				}
    				
    			}
    			
    			System.debug('###################### -> lstUpdateCasesdsdaz' + lstUpdateCase);
    	        if(lstUpdateCase.size() > 0)
    			{
    			update lstUpdateCase;
    			}
    			
    
    	        System.debug('###################### -> AP15CaseMajDate.setDatePropositionCommerciale - END');
    	
    	
    	}
    }
    J'ai cherché mais pas moyen de trouver.

    Pouvez-vous m'aider s'il vous plait?

    Merci beaucoup.


    Si ça peut aider:

    Nom : Capture.JPG
Affichages : 277
Taille : 66,0 Ko

  2. #2
    Membre régulier
    Homme Profil pro
    Salesforce Developer
    Inscrit en
    Mai 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Australie

    Informations professionnelles :
    Activité : Salesforce Developer

    Informations forums :
    Inscription : Mai 2013
    Messages : 14
    Points : 99
    Points
    99
    Par défaut
    Je ne vois pas trop dans ton code ou est l'erreur exact, pourrais tu detailler un peu plus ton trigger?
    Mais en gros l'erreur que tu as c'est quand tu as une requete SQL dans une boucle.

    Stupide Example :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for (Account acct: Trigger.new){
           List<Contact> contacts = [select id from Contact where AccountId = :acct.Id];
    }
    Si tu as 150 Accounts, tu aura donc 150 requetes SQL. Salesforce limite le nombre a 100 par transaction.
    Tu dois absolument enlever tes requests SQL de tes boucles et passer par l'utlisation de map.

  3. #3
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2009
    Messages
    177
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 177
    Points : 86
    Points
    86
    Par défaut
    Merci pour ta réponse brovasi.
    Et bien en fait lorsque je mets le journal de débogage dans salesforce.
    Même le trigger est appelé plusieurs fois. Donc je me dis que le Update (l.58: update lstUpdateCase) rappelle le trigger.

    Est ce que le problème ne viendrait pas de ma condition dans le trigger!?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    			if(Trigger.new[i].Avancee_Jalon_TEC__c == '2')
      				lstCaseDateUpdate.add(Trigger.new[i]);
    		}
    Une fois que je fais l'update, Avancee_Jalon_TEC__c est toujours = '2' du coup ça re rentre dans la condition et sa appel à nouveau le update...


    Merci beaucoup pour ton aide. (je test de mon côté).

    ps:J'ai testé mes requêtes elle retourne qu'une ligne

  4. #4
    Membre régulier
    Homme Profil pro
    Salesforce Developer
    Inscrit en
    Mai 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Australie

    Informations professionnelles :
    Activité : Salesforce Developer

    Informations forums :
    Inscription : Mai 2013
    Messages : 14
    Points : 99
    Points
    99
    Par défaut
    Ha ok, je vois c'est quoi ton probleme. Donc tu es dans ton trigger case et tu veux modifier un champs du meme objet. Verifie que tu appelles bien "before update" et non "after update".Ensuite tu n'auras pas besoin de update ta list de Case a nouveau. Voici un simple example :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    trigger CaseTrigger on Case (before update){
    	for(Case record: Trigger.new){
    		if (record.Avancee_Jalon_TEC__c == '2'){
    			record.Description = 'Ceci est appele before update pcq mon avancee jalon tec = 2';
    		}
    	}
    }
    Donc les lignes suivantes te sont inutiles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    System.debug('###################### -> lstUpdateCasesdsdaz' + lstUpdateCase);
    if(lstUpdateCase.size() > 0)
    {
    	update lstUpdateCase;
    }

  5. #5
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2009
    Messages
    177
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 177
    Points : 86
    Points
    86
    Par défaut
    J'appel CaseAfterUpdate mais c'est fait exprès car je dois récupérer la valeur CompletionDate de l'objet CaseMilestone pour l'insérer dans un champ de l'objet Case par la suite. Et je pense que la valeur CompletionDate de l'objet CaseMilestone est renseigné qu'une fois enregistrée, c'est pour ça que je fais appel à un after update.

    Tu vois?

  6. #6
    Membre régulier
    Homme Profil pro
    Salesforce Developer
    Inscrit en
    Mai 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Australie

    Informations professionnelles :
    Activité : Salesforce Developer

    Informations forums :
    Inscription : Mai 2013
    Messages : 14
    Points : 99
    Points
    99
    Par défaut
    Je pense qu'un before update serait plus utile. Sinon je pense que dans ton trigger tu devrais faire qqch comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for(integer i=0;i<Trigger.new.size();i++){
    			//Trigger.new[i].Date_proposition_financement__c != null && 
    			if(Trigger.new[i].Avancee_Jalon_TEC__c == '2' 
    				&& Trigger.oldMap.get(Trigger.new[i].id).Avancee_Jalon_TEC__c != '2')
      				lstCaseDateUpdate.add(Trigger.new[i]);
    		}
    Ceci veut dire que tu appelle le reste de ton code seulement si la valeur de 'Avancee_Jalon_TEC__c' passe de n'importe qu'elle valeur a 2

  7. #7
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2009
    Messages
    177
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 177
    Points : 86
    Points
    86
    Par défaut
    Je veux bien tester mais du coup la valeur CompletionDate de l'objet CaseMilestone n'existe pas. C'est justement cette valeur que je veux insérer dans le champ Date_proposition_financement__c de l'objet Case.

    Avant de faire la modif j'ai fait ça dans le trigger avec ton code car bien utile
    et du coup tu m'as mis sur la piste alors j'ai aussi rajouté en plus de la condition que tu me proposes une ptite modification dans la condition, ce qui donne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for(integer i=0;i<Trigger.new.size();i++){
    			//Trigger.new[i].Date_proposition_financement__c != null && 
    			if(Trigger.new[i].Avancee_Jalon_TEC__c == '2' 
    				&& Trigger.oldMap.get(Trigger.new[i].id).Avancee_Jalon_TEC__c != '2' && Trigger.new[i].Date_proposition_financement__c == null)
      				lstCaseDateUpdate.add(Trigger.new[i]);
    		}
    Cette nouvelle condition évite au trigger d'appeler une nouvelle fois le code de la classe: AP15CaseMajDate.setDatePropositionCommerciale();
    Du coup on a plus un appel illimité, parfait, merci beaucoup!

    Mais est-ce que cela reste dans les bonnes pratiques? (toujours AfterUpdate)

    Est-ce necessaire de tester via un trigger beforeUpdate (comme je te l'ai dit je ne vois pas comment récupérer la valeur si elle n'est pas enregistrée, je ne peux récupérer l'objet courant que de case et non de CaseMilestone je me trompe?

    Merci beaucoup

  8. #8
    Membre régulier
    Homme Profil pro
    Salesforce Developer
    Inscrit en
    Mai 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Australie

    Informations professionnelles :
    Activité : Salesforce Developer

    Informations forums :
    Inscription : Mai 2013
    Messages : 14
    Points : 99
    Points
    99
    Par défaut
    Generalement si tu a un trigger d'un object A et que tu veux modifier un champs dans ton object A, ton trigger devrait tjs etre before insert, before update

    Dans ton cas, l'objet que tu modifies es Case et non CaseMilestone non ? Donc tu devrais avoir la bonne valeur.

  9. #9
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2009
    Messages
    177
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 177
    Points : 86
    Points
    86
    Par défaut
    Oui en effet mais comme je te l'ai dit, je dois récupéré une valeur de l'objet CaseMilestone.
    Mais à ce que tu me dis, l'objet CaseMilestone serait déjà enregistré.
    Je n'aurai donc qu'à faire une requête pour récupérer la valeur qu'il me faut.

    Et bien je vais tester et reviens dés que c'est ok pour mettre le sujet en résolu...

    Merci pour ton aide précieuse

  10. #10
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2009
    Messages
    177
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 177
    Points : 86
    Points
    86
    Par défaut
    Je viens donc de faire appel au code depuis un trigger beforeUpdate, le code reste inchangé sauf que j'ai mis en commentaire la ligne update.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    
    public without sharing class AP15CaseMajDate{
    	
    	public static void setDatePropositionCommerciale  (List<Case> lstCase){
    		
    		System.debug('###################### -> AP15CaseMajDate.setDatePropositionCommerciale - BEGIN -');
    		
    	   	set<Id> setIdCaseUpdate = new set<Id>();
    		
    		 for(Case cCase: lstCase)
    		 {
    		 	setIdCaseUpdate.add(cCase.Id);
    		 }
    	 
    	 		System.debug('###################### -> AP15CaseMajDate.setDatePropositionCommerciale setIdCaseUpdate - BEGIN -' + setIdCaseUpdate);
    		    //List récupérant la date de la fermeture du jalon T2 CompletionDate de la table CaseMilestone) 
        	    List<CaseMilestone> lstCaseMilestone = [Select MilestoneTypeId, Id, CompletionDate, CaseId From CaseMilestone WHERE CaseId IN :setIdCaseUpdate  AND MilestoneTypeId IN (:System.Label.Case_MilestoneTypeId_T2_ContactReseauPhysique, :System.Label.Case_MilestoneTypeId_T2_DossierReseauPhysique_DossierReseauPlateau)];
    			System.debug('###################### -> AP15CaseMajDate.setDatePropositionCommerciale setIdCaseUpdate - BEGIN qsd-' + lstCaseMilestone);
    		
    			Map<Id, DateTime> mapIdCaseDateT2 = new Map<Id, DateTime>();
    
    			for(CaseMilestone m: lstCaseMilestone)
    			{
    				if(m.CompletionDate != null)
    				{
    					mapIdCaseDateT2.put(m.CaseId, m.CompletionDate);
    					System.debug('###################### -> mapIdCaseDateT2 m.CaseId' + m.CaseId);
    					System.debug('###################### -> mapIdCaseDateT2  m.CompletionDate' +  m.CompletionDate);
    14:10:54.464 (464171760)|USER_DEBUG|[46]|DEBUG|###################### -> mapIdCaseDateT2  m.CompletionDate2014-04-22 12:10:00
    				}
    			}
    			
    			
    			List<Case> lstCaseRecup = [SELECT Id, Date_proposition_financement__c FROM Case WHERE Id IN :setIdCaseUpdate];
    		        
    			List<Case> lstUpdateCase = new List<Case>();
    			
    			for(Case a: lstCaseRecup)
    			{
    				if(mapIdCaseDateT2.containskey(a.Id))
    				{
    				    //mettre la date CompletionDate dans la date de proposition commerciale
    	       		    //CompletionDate est de type dateTime et Date_proposition_financement__c est de type Date
    	       			//utilisation de Date.newinstance pour pour avoir le bon format
    					DateTime datePropCommerciale = mapIdCaseDateT2.get(a.Id);
    					Date DtePropComm = Date.newinstance(datePropCommerciale.year(), datePropCommerciale.month(), datePropCommerciale.day());
    					a.Date_proposition_financement__c = DtePropComm;
    					//a.Date_proposition_financement__c = null;
    					System.debug('###################### -> DtePropComm' + DtePropComm);
    14:10:54.470 (470325373)|USER_DEBUG|[66]|DEBUG|###################### -> DtePropComm2014-04-22 00:00:00
    					lstUpdateCase.add(a);
    					System.debug('###################### -> lstUpdateCaseqsdd d' + lstUpdateCase);
    					
    				}
    				
    			}
    			
    			System.debug('###################### -> lstUpdateCasesdsdaz' + lstUpdateCase);
    	        if(lstUpdateCase.size() > 0)
    			{
    			//update lstUpdateCase;
    			}
    			
    
    	        System.debug('###################### -> AP15CaseMajDate.setDatePropositionCommerciale - END');
    	
    	
    	}
    }
    En rouge la réponse via le journal de debogage et en orange le code qui devrait faire la mise à jour: a.Date_proposition_financement__c = DtePropComm;

    Via l'after (quand je passe par le trigger after update) ça marche, via le before (a.Date_proposition_financement__c = DtePropComm) comme tu me conseilles ça ne marche pas.

    Une idée de mon erreur?

    ps: l'objet CaseMilestone était bien déjà renseigné

  11. #11
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2009
    Messages
    177
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2009
    Messages : 177
    Points : 86
    Points
    86
    Par défaut
    Ok sujet résolu.

    Alors voila pourquoi ça ne marchait pas (via un trigger updatebefore).

    En fait il fallait que je boucle sur lstCase (le lstCase que j'ai envoyé en paramètre via mon trigger) et non sur lstCaseRecup (l.34)

    List<Case> lstCaseRecup = [SELECT Id, Date_proposition_financement__c FROM Case WHERE Id IN :setIdCaseUpdate];

    qui en fin de compte ne sert à rien dans mon beforeUpdate mais je pense utile pour un after vu que l'on ne peut modifier un trigger.new via un after.

    J'espère que ce petit topic en aidera plus d'un!!


    Du coup voila le code pour un trigger BeforeUpdate:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    
    public without sharing class AP15CaseMajDate{
    	
    	public static void setDatePropositionCommerciale  (List<Case> lstCase){
    		
    		System.debug('###################### -> AP15CaseMajDate.setDatePropositionCommerciale - BEGIN -');
    		
    	   	set<Id> setIdCaseUpdate = new set<Id>();
    		
    		 for(Case cCase: lstCase)
    		 {
    		 	setIdCaseUpdate.add(cCase.Id);
    		 }
    	 
    	 		System.debug('###################### -> AP15CaseMajDate.setDatePropositionCommerciale setIdCaseUpdate - BEGIN -' + setIdCaseUpdate);
    		    //List récupérant la date de la fermeture du jalon T2 CompletionDate de la table CaseMilestone) 
        	    List<CaseMilestone> lstCaseMilestone = [Select MilestoneTypeId, Id, CompletionDate, CaseId From CaseMilestone WHERE CaseId IN :setIdCaseUpdate  AND MilestoneTypeId IN (:System.Label.Case_MilestoneTypeId_T2_ContactReseauPhysique, :System.Label.Case_MilestoneTypeId_T2_DossierReseauPhysique_DossierReseauPlateau)];
    			System.debug('###################### -> AP15CaseMajDate.setDatePropositionCommerciale setIdCaseUpdate - BEGIN qsd-' + lstCaseMilestone);
    		
    			Map<Id, DateTime> mapIdCaseDateT2 = new Map<Id, DateTime>();
    
    			for(CaseMilestone m: lstCaseMilestone)
    			{
    				if(m.CompletionDate != null)
    				{
    					mapIdCaseDateT2.put(m.CaseId, m.CompletionDate);
    					System.debug('###################### -> mapIdCaseDateT2 m.CaseId' + m.CaseId);
    					System.debug('###################### -> mapIdCaseDateT2  m.CompletionDate' +  m.CompletionDate);
    				}
    			}
    			
    			
    			for(Case a: lstCase)
    			{
    				if(mapIdCaseDateT2.containskey(a.Id))
    				{
    				    //mettre la date CompletionDate dans la date de proposition commerciale
    	       		            //CompletionDate est de type dateTime et Date_proposition_financement__c est de type Date
    	       			    //utilisation de Date.newinstance pour pour avoir le bon format
    					DateTime datePropCommerciale = mapIdCaseDateT2.get(a.Id);
    					Date DtePropComm = Date.newinstance(datePropCommerciale.year(), datePropCommerciale.month(), datePropCommerciale.day());
    					a.Date_proposition_financement__c = DtePropComm;
    					System.debug('###################### -> DtePropComm' + DtePropComm);
    
    					
    				}
    				
    			}
    			
    
    	        System.debug('###################### -> AP15CaseMajDate.setDatePropositionCommerciale - END');
    	
    	
    	}
    }

    Le code du trigger reste inchangé.

    brovasi merci beaucoup!!

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

Discussions similaires

  1. Modification de l'objet request via plugin
    Par Nighty dans le forum MVC
    Réponses: 3
    Dernier message: 09/12/2008, 17h56
  2. requete via VBA sur different schema oracle
    Par FO dans le forum Access
    Réponses: 3
    Dernier message: 19/01/2006, 15h40
  3. Réponses: 2
    Dernier message: 24/11/2005, 11h46
  4. Requete via phpmyadmin
    Par louroulou dans le forum Langage SQL
    Réponses: 2
    Dernier message: 10/11/2005, 22h36
  5. Pb d'envoi de requete via un TADOQuery à une BD access
    Par gsmurf dans le forum Bases de données
    Réponses: 4
    Dernier message: 15/06/2004, 13h20

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