How to translate the date (parsed from the email body) into acceptable format

AysenurU
Tera Contributor

Hello Community

 

I am trying to create an automated standard change record using inbound email content via Flow Designer. 

 

1- I set my trigger as Inbound email and also set the relevant conditions.

2- For the action part, I selected Create Record (Create Change Request Record)

3- I filled in the fields (type, category, description, assignment group, close notes etc.)

 

Even though filling out those fields was pretty straight forward, I have an issue with "actual start date " field. I wanted to take it from email, not to pick a date using the calendar icon. Therefore I created a custom action in flow designer and called it "Parse Date from email". I will also share the script which seems to be working fine. 

 

(function execute(inputs, outputs) {
const emailContent = inputs.emailBody;
const dateRegex = /Started at (.* UTC)/;
const dateMatch = emailContent.match(dateRegex);

if (dateMatch && dateMatch[1]) {
  const actualStartDate = dateMatch[1];
  outputs.actual_start_date = actualStartDate;

} else {
  throw new Error("Actual Start Date not found in email content.");
}
})(inputs, outputs);
 
However, my problem is the date format. In the email, the date format is like "Started at Thu, 02 Nov 2023 08:26:53 UTC". When I look at the actual start date format in change record, it is like this 17-05-2021 15:25:27.  Therefore, this field cannot be populated in the change record that is to be created automatically.
 
How should I fix this? 🙄
 
TIA😇
2 ACCEPTED SOLUTIONS

AnveshKumar M
Tera Sage
Tera Sage

Hi @AysenurU 

 

You can convert this to GlideDateTime object, try the following script in your script step. Also change the output variable type to Date/Time (both script step and action outputs).

 

 

 

(function execute(inputs, outputs) {
const emailContent = inputs.emailBody;
const dateRegex = /Started at (.* UTC)/;
const dateMatch = emailContent.match(dateRegex);

if (dateMatch && dateMatch[1]) {
  const actualStartDate = dateMatch[1];
  var simpleDateFormat = 'E, dd MMM yyyy HH:mm:ss z';
  var gdt = new GlideDateTime();
  gdt.setDisplayValue(actualStartDate,simpleDateFormat);
  
  outputs.actual_start_date = gdt;

} else {
  throw new Error("Actual Start Date not found in email content.");
}
})(inputs, outputs);

 

 

  

AnveshKumarM_0-1699362426852.png

 

 

Please mark my answer helpful and accept as solution if it helped 👍✔️

Thanks,
Anvesh

View solution in original post

@AysenurU Sure, create another output variable at script step and outputs as planned_end_date of Date/Time type and try the below code in same action, 

 

(function execute(inputs, outputs) {
const emailContent = inputs.emailBody;
const dateRegex = /Started at (.* UTC)/;
const dateMatch = emailContent.match(dateRegex);

if (dateMatch && dateMatch[1]) {
  const actualStartDate = dateMatch[1];
  var simpleDateFormat = 'E, dd MMM yyyy HH:mm:ss z';
  var startGdt = new GlideDateTime();
  startGdt.setDisplayValue(actualStartDate,simpleDateFormat);

  var endGdt = new GlideDateTime();
  endGdt.setDisplayValue(actualStartDate,simpleDateFormat);
  endGdt.addDaysUTC(3);
  
  outputs.actual_start_date = startGdt;
  outputs.planned_end_date = endGdt;

} else {
  throw new Error("Actual Start Date not found in email content.");
}
})(inputs, outputs);

 

AnveshKumarM_0-1699409786977.png

Please mark my answer helpful and accept as solution if it helped 👍✔️

Thanks,
Anvesh

View solution in original post

12 REPLIES 12

@AysenurU I'm glad that it helped you 👍

Thanks,
Anvesh

Hello @AnveshKumar M 

 

Can I ask you one last question? I also need to create one more field called Planned End Date. Here I will need to parse the date from the same email, but it is not direct. It should be like this: 

Planned End Date = Start Date + 3 Days

 

I created this script for it but it fails. I would appreciate if you lend me a help hand again. 

 

(function execute(inputs, outputs) {
const emailContent = inputs.emailBody;
const dateRegex = /Started at (.* UTC)/;
const dateMatch = emailContent.match(dateRegex);

if (dateMatch && dateMatch[1]) {
  const plannedEndDate = dateMatch[1];
  var simpleDateFormat = 'E, dd MMM yyyy HH:mm:ss z';
  var gdt = new GlideDateTime();
  gdt.setDisplayValue(plannedEndDate,simpleDateFormat);
 
  outputs.planned_end_date = gdt;
 
    var gdtplannedEndDate = new GlideDateTime();
    gdtplannedEndDate.setDisplayValue(gdtactualStartDate);
    gdtplannedEndDate.addDays(3);

    outputs.planned_end_date = gdtplannedEndDate;

} else {
  throw new Error("Planned End Date not found in email content.");
}
})(inputs, outputs);

 

@AysenurU Sure, create another output variable at script step and outputs as planned_end_date of Date/Time type and try the below code in same action, 

 

(function execute(inputs, outputs) {
const emailContent = inputs.emailBody;
const dateRegex = /Started at (.* UTC)/;
const dateMatch = emailContent.match(dateRegex);

if (dateMatch && dateMatch[1]) {
  const actualStartDate = dateMatch[1];
  var simpleDateFormat = 'E, dd MMM yyyy HH:mm:ss z';
  var startGdt = new GlideDateTime();
  startGdt.setDisplayValue(actualStartDate,simpleDateFormat);

  var endGdt = new GlideDateTime();
  endGdt.setDisplayValue(actualStartDate,simpleDateFormat);
  endGdt.addDaysUTC(3);
  
  outputs.actual_start_date = startGdt;
  outputs.planned_end_date = endGdt;

} else {
  throw new Error("Actual Start Date not found in email content.");
}
})(inputs, outputs);

 

AnveshKumarM_0-1699409786977.png

Please mark my answer helpful and accept as solution if it helped 👍✔️

Thanks,
Anvesh

Hello @AnveshKumar M 😇

 

Thank you very much again. Your solution worked extremely well. 🙏🙏

@AysenurU 👍

Thanks,
Anvesh