We've updated the ServiceNow Community Code of Conduct, adding guidelines around AI usage, professionalism, and content violations. Read more

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

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