0
votes

Conversion du format Salesforce DateTime dans Mule-3.8.4 à l'aide de Dataweave 1.0

J'essaie de convertir une colonne DateTime dans un CSV à un format Salesforce DateTime pour effectuer une upert. J'ai essayé d'expression comme ci-dessous dans mule-3.8.4 dataweave1.0 mais je reçois une erreur.

J'ai essayé ce qui suit:

essaie < Pré> xxx

Sortie attendue : 2019-01-14t06: 2019-01-14t06: 31: 00Z

Sortie réelle : mon janvier 14 18 : 31: 00 Est 2019

Après UPSert dans Salesforce, il ressemble à ceci: 2019-01-14t00: 00: 00.000 + 0000 . Il ne sauve pas l'heure.


deuxième essai xxx

Sortie attendue : 2019-01-14t06: 31: 00

Sortie réelle : mon janvier 14 18:31:00 EST 2019

après upert in Salesforce, On dirait que ceci: 2019-01-14t00: 00: 00.000 + 0000 . Il ne sauve toujours pas l'heure.

Quel est le problème?


0 commentaires

3 Réponses :


0
votes

Pour formater une date, la lecture de modèle de format de gauche à droite doit correspondre à votre sortie attendue. Donc, pour votre exemple:

2019-01-14t06: 31: 00Z

AAAA-MM-DD'HHHHHH: MM: SSZ

y est pour l'année M est pour le mois (Minuscule m est pour minute

D est pour la journée

H est pour une heure au format de 24 heures. (Minuscule serait au format 12)

s est pour millisecondes

et z est un fuseau horaire Vous pouvez plus configurer pour le fuseau horaire et les millisecondes si nécessaire.

Voici les informations sur le format de la date Salesforce:

https: //developer.salesforce .COM / DOCS / ATLAS.EN-US-US.API_ASYNCH.MORTA / API_ASYNCH / DATAFILES_DATE_FORMAT.HTM

Plus de format de date Info:

https://docs.oracle.com /javase/7/docs/api/java/text/simpledeformat.html


1 commentaires

Test_date: "1/2/19 18:31" As: localDateTime {Format: "M / DD / YY H: mm A"} Comme: localDateTime {format: "AAAA: MM: MM: MM: MM: SSZ "}). J'ai essayé les modifications que vous avez suggérées mais toujours les heures et les minutes ne sont pas annexées lorsque UPSert a été effectué dans Salesforce.Après le résultat UPSert: 2019-01-22T00: 00.000 + 0000. Pour une raison quelconque, Salesforce ne met que la mise à jour de la partie de date et de l'annexe 00 à des heures, minutes et secondes. Merci encore.



0
votes

Avez-vous essayé de l'envoyer à Salesforce en tant que string code>? Une fois que quelque chose est de type localDateTime code>, il n'y a pas d'autre mise en forme. Le formatage est uniquement dans le but d'analyser une chaîne code> dans un localDaTetime Code> ou formatant la sortie d'un localDaTetime code> à un chaîne code>. Par exemple:

...
%var inputFormat  = "M/dd/yy h:mm a"
%var outputFormat = "yyyy-MM-dd'T'HH:mm:ss"
---
"1/14/19 6:31 PM" 
  as :localdatetime { format: inputFormat  } // Used to parse the input string
  as :string        { format: outputFormat } // Used to format the output string


3 commentaires

Quand j'ai essayé de l'envoyer à Salesforce en tant que chaîne? Il a échoué dans la transformation du message dans Dataweave Steweave avec l'erreur ci-dessous. Test_date: "21/02/19 18:31 PM" Comme: localDateTime {format: "M / DD / YY H: mm a"} As: chaîne {format: "AAAA-MM-DD'HH: MM: MM: MM: MM: MM: SS.SSSZ "}) ne peut pas coercer A: LocalDaTime To A: String, causée par: champ non pris en charge: offsetseconds.


Droite, je crois que c'est parce que localDateTime n'a pas de fuseau horaire. docs.oracle.com/javase/8/docs/ API / Java / Time / LocalDateTime.ht ML "Cette classe ne stocke pas ou ne représente pas une zone horaire."


Cela pourrait réussir si vous prenez le z hors du format, mais cela fait un certain temps depuis que j'ai intégré avec Salesforce.



0
votes

Enfin, au-dessous du code a fonctionné. Mule Dataweave a converti le format suivant (AAAA-MM-DD'HHHH: MM: SS.SSSZ) à Java.Util.Calendar Object.

Test_date: "1/22/19 18:31 PM" Comme: localDateTime {format: "M / DD / YY H: mm A"} As: DateTime {format: "AAAA-MM-DD'HHH : mm: ss.sssz "})

Voici comment la charge utile recherche un message de transformation dans Dataweave (étape ci-dessus):

Test_date = Java.Util.GregorianCalendar [Time = ?, Isfieldsset = False, arreallfieldseSet = true, Lenient = vrai, zone = sun.util.calendar.zoneinfo [id = "gmt", décalée = 0, dstSavings = 0 , EmailAnlight = False, Transitions = 0, Lastrule = NULL], premierDayOfweek = 1, minimaldaysInfirstweek = 1, ERA = 1, année = 2019, mois = 0, week-end = 0, jour_of_month = 5, jour_of_month = 22, jour_of_year = 84, Jour_of_week = 2, jour_of_week_in_month = 4, am_pm = 1, heure = 4, hour_of_day = 18, minute = 31, second = 0, milliseconde = 0, DST_OFFSET = 0]

Sortie après UPSert dans Salesforce: 2019-01-22T18: 31: 00.000 + 0000


1 commentaires

Pouvez-vous m'aider à comprendre: comment le jeter à un localDateTime le rendrait Java.Util.calendar comme Salesforce s'attend à ce que Salesforce?