Salesforce Administrateur Certifié logoDeveloppeur Salesforce certifié

Adrien Bayles Expert Webmarketing & CRM

Obtenir le Timestamp d'un champ date/heure dans Salesforce

Notez ce Tuto: 
Average: 3.6 (26 votes)

Dans Salesforce,les valeurs des champs de type date/heure sont automatiquement converties selon les paramètres régionaux que l'on vous a attribués. Le problème est que si tous vos collègues ne travaillent pas sur le même fuseau horaire, des confusions peuvent arriver.

Pour y remédier, il existe en Apex des méthodes pour faciliter la manipulation ce type de champ, mais sachez aussi qu'une simple formule au format texte suffit pour arriver au même résultat, en fabriquant un  timestamp. Je parie que vous préférez la 2e solution, alors la voici:

RIGHT(LEFT(TEXT(monChampDateHeure__c),FIND("-", TEXT(monChampDateHeure__c))+2),2)+
RIGHT(LEFT(TEXT(monChampDateHeure__c),FIND("-", TEXT(monChampDateHeure__c))+5),2)+"T"+
RIGHT(LEFT(TEXT(monChampDateHeure__c),FIND(":", TEXT(monChampDateHeure__c))-1),2)+
RIGHT(LEFT(TEXT(monChampDateHeure__c),FIND(":", TEXT(monChampDateHeure__c))+2),2)+"00Z"

A noter que dans cette formule, la fonction "TEXT(monChampDateHeure__c)" renvoie la valeur correspondant à la date/heure du champ en UTC au format texte, quels que soient vos paramètres utilisateur! Le reste de chaque ligne de la formule retrouve et traite indépendamment chaque "composante" de la date (année,mois, jour, heure, minutes), et enfin, concatène ces éléments, pour reformer au final un timestamp affiché en UTC !

Attention toutefois, car la formule compilée fait 1247 caractères ; vous risquez d'atteindre assez vite la limite des 5000 caractères si vous la référencez via une autre formule! De plus, cette formule ne fonctionnera pas - car trop grosse -si votre champ date/heure est lui-même une formule. Dans ces cas-là, il peut être plus intéressant de passer par une règle de workflow (par exemple, à chaque fois que monChampDateHeure__c change de valeur) et y associer une mise à jour de champ, pour y insérer votre formule. Votre champ timestamp est alors un champ texte de 16 caractères, et la formule est placée dans la mise à jour du champ.

Ainsi, pour prendre un exemple (et montrer que ça marche!), si je suis un utilisateur Salesforce en CEST (ou "GMT+2", fuseau horaire de Paris à l'heure d'été) et que ce fameux champ date/heure renvoie "09/07/2013 17:30" (affiché ainsi si votre paramètre régional est la France), le timestamp renvoyé par la formule sera dans ce cas : "20130709T153000Z". Pas mal, non ?