Преобразование в формат даты и времени SalesForce в Mule-3.8.4 с использованием DataWeave 1.0 - PullRequest
0 голосов
/ 23 марта 2019

Я пытаюсь преобразовать столбец datetime в CSV в формат datetime Salesforce, чтобы выполнить upsert. Я пробовал выражение, как показано ниже в mule-3.8.4 dataweave1.0, но я получаю сообщение об ошибке.

Я попробовал следующее:

Первая попытка

Test_Date: "1/14/19 6:31 PM" as :localdatetime { format: "M/dd/yy h:mm a" } as :localdatetime { format: "YYYY-MM-DD'T'hh:mm:ssZ" })

Ожидаемый результат : 2019-01-14T06: 31: 00Z

Фактический результат : пн. 14 января 18:31:00 EST 2019

После Upsert в Salesforce это выглядит так: 2019-01-14T00:00:00.000+0000. Это не экономит время.


Вторая попытка

Test_Date: "1/14/19 6:31 PM" as :localdatetime { format: "M/dd/yy h:mm a" } as :localdatetime { format: "YYYY-MM-DD'T'hh:mm:ss" })

Ожидаемый результат : 2019-01-14T06: 31: 00

Фактический результат : пн. 14 января 18:31:00 EST 2019

После Upsert в Salesforce это выглядит так: 2019-01-14T00:00:00.000+0000. Это все еще не экономит время.

В чем проблема?

Ответы [ 3 ]

0 голосов
/ 25 марта 2019

Вы пытались отправить его в Salesforce как String? Если что-то имеет тип LocalDateTime, дальнейшее его форматирование не требуется. Форматирование предназначено исключительно для анализа String в LocalDateTime или форматирования вывода LocalDateTime в String. Например:

"1/14/19 6:31 PM" 
  as :localdatetime { format: "M/dd/yy h:mm a" }         // This parses the string as LocalDateTime
  as :localdatetime { format: "YYYY-MM-DD'T'hh:mm:ssZ" } // This doesn't do anything, it's already LocalDateTime

Если вы хотите взять один String, представляющий дату и время, и отформатировать его в другое String, представляющее то же время, вы можете сделать это:

...
%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

Выход этого последнего скрипта должен быть "2019-01-14T18:31:00"

0 голосов
/ 25 марта 2019

Наконец-то приведенный ниже код сработал. Mule Dataweave преобразовал следующий формат (гггг-ММ-дд'Т'ЧЧ: мм: ss.SSSZ) в объект java.util.Calendar.

Test_Date: "22.01.19 18:31" as: localdatetime {format: "M / dd / yy h: mm a"} as: datetime {format: "yyyy-MM-dd'T'HH : mm: ss.SSSZ "})

Вот как выглядит полезная нагрузка после сообщения преобразования в DataWeave (шаг выше):

Test_Date = java.util.GregorianCalendar [время = ?, areFieldsSet = ложь, areAllFieldsSet = верно, мягок = верно, зона = sun.util.calendar.ZoneInfo [ID = "GMT", смещение = 0, dstSavings = 0 , useDaylight = ложь, переходы = 0, lastRule = NULL], firstDayOfWeek = 1, minimalDaysInFirstWeek = 1, ЭРА = 1, ГОД = 2019, МЕСЯЦ = 0, WEEK_OF_YEAR = 13, WEEK_OF_MONTH = 5, DAY_OF_MONTH = 22, day_of_year = 84, DAY_OF_WEEK = 2, DAY_OF_WEEK_IN_MONTH = 4, AM_PM = 1, HOUR = 4, HOUR_OF_DAY = 18, MINUTE = 31, ВТОРОЙ = 0, MILLISECOND = 0, ZONE_OFFSET = 0, DST_OFFSET = 0] * 100 *

Вывод после Upsert в SalesForce: 2019-01-22T18: 31: 00.000 + 0000

0 голосов
/ 23 марта 2019

Чтобы отформатировать дату, формат шаблона, читаемый слева направо, должен соответствовать ожидаемому результату. Итак, для вашего примера:

2019-01-14T06: 31: 00Z

YYYY-MM-dd'T'HH: мм: сульфасалазин

у на год М - Месяц (строчные М - минута

d для дня

H для часа в формате 24 часа. (В нижнем регистре будет 12 формат)

S для миллисекунд

А Z - часовой пояс При необходимости вы можете настроить другие параметры для часового пояса и миллисекунд.

Вот информация о формате даты продаж:

https://developer.salesforce.com/docs/atlas.en-us.api_asynch.meta/api_asynch/datafiles_date_format.htm

Дополнительная информация о формате даты:

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

...