Bonjour à tous,
Ravi de voir qu'il existe des discussions francophones à propos de SalesForce, ça change.
Bref, j'aurai besoin de conseils pour la rédaction d'un trigger, étant novice dans le langage APEX, j'ai quand même essayé de produire quelque chose, ayant tout de même des compétences en langages orientés objet et en SQL.
Le fonctionnement recherché ici est de convertir un montant donné en fonction de la valeur d'une devise.
Je m'explique, le module de gestion des devises ne permettant pas le fonctionnement voulu par mon entreprise, le fonctionnement est tourné de telle manière :
- Il y a 3 objets custom : Notes de Frais, Ligne de frais et currency,
- qui enregistrent respectivement [un montant total et une devise], [un montant, un montant converti, une date et un champs de détail lié à Note de Frais] et [une date, une devise et la valeur de la devise].
- Le but étant de contrôler la devise utilisée par la note de frais correspondante, récupérer en fonction de ce champs la valeur enregistrée à une date donnée dans l'objet currency et de convertir le montant.
Ouff, c'est long.
Voici un exemple simplifié du code que j'essaye de faire :
Code JAVA : 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 trigger convertirMontant on Ligne_de_frais__c(before insert, before update) { //Pour chaque membre de l'objet List LignedeFrais, remplie avec les champs insérés, ... for(Ligne_de_frais__c LignedeFrais : Trigger.new){ // ... On crée une chaine et on lui affecte la valeur du champs de détail ligne_associee, ... // __r permet d'accéder par un pointage au champs DEVISE__c de l'objet perso Note_de_Frais__c String DEVISE = [SELECT DEVISE__c FROM Note_de_Frais__c c WHERE c.DEVISE__c = :LignedeFrais.ligne_associee__r.DEVISE__c LIMIT 1].DEVISE__c; // ... On récupère la date d'aujourd'hui ... Date today = Date.today(); // ... Puis on récupère dans une variable Decimal, en fonction de la devise et de sa date de création // sa valeur correspondante ... Decimal VALEUR = [SELECT valeur_devise__c FROM currency__c WHERE (DEVISE__c =: DEVISE) AND DAY_ONLY(LastModifiedDate) = :today LIMIT 1].valeur_devise__c; // ... Enfin, on utilise cette VALEUR en la multipliant au montant de la journée pour obtenir le montant converti LignedeFrais.Montant_converti__c = LignedeFrais.Montant_de_la_journ_e__c * VALEUR; } }
Malheureusement, je me heurte à chaque fois à une QueryException me notifiant que ma requête ne retourne aucun résultat. N'ayant pas les connaissances requises, je n'ai pas réussi à résoudre mon problème ou réfléchit à un autre fonctionnement.
Donc si quelqu'un dans l'assemblée pourrait m'éclairer, tout conseil est bon à prendre. On est ici pour apprendre après tout.
Merci d'avance.
Partager