How to get variables from a record producer to send an automated email

Jeffrey Siegel
Mega Sage

I am very new to the Service Now administration.

im trying to send an email to one of my vendors when certain values are selected on my record producer form.

then i want to take other values from my record producer and send it in a formatted email to the vendor.  without them getting all the information.  i would say 90% of my variables in my record producer go into the description field in the resulting ticket, but the vendor I have doesn't need all of that, which is what is making this endeavor harder for me.  

is anyone able to help me get started on how to do this,  ive seen a few questions like this on the forums, but they are way ahead of where i am at.  I pick up on these things quickly, so any guidance getting started would be highly appreciated. 

 

1 ACCEPTED SOLUTION

Jeffrey Siegel
Mega Sage

I was able to get this to work with help from this post: https://community.servicenow.com/community?id=community_question&sys_id=fcff3be9db66fbc02be0a851ca961904

Sample of the code that worked for me:

 

In Record Producer:

var EmailData = {"Date" : DateField, "Position" : PositionInfoField, "ReportedBy" : ReportedByField, "Description" : DescriptionField, "Subj1" : Subject1Field, "Subj2" : Subject2Field};

var parser = new JSON();
var notificationContent = parser.encode(EmailData);

gs.log('JSON object:' + notificationContent);
gs.eventQueue('EmailEvent',current , notificationContent , '');

in Email Script:

(function runMailScript(/* GlideRecord */ current, /* TemplatePrinter */ template,
          /* Optional EmailOutbound */ email, /* Optional GlideRecord */ email_action,
          /* Optional GlideRecord */ event) {

          // Add your code here

var jsonObject=event.parm1;
	
	// Parsing JSON object:
	
	var obj = JSON.parse(jsonObject);
	
	
	template.print(obj.Date+"<br>");
	template.print(obj.Position+"<br>");
	template.print(obj.ReportedBy+"<br>");
	template.print(obj.Description+"<br>");

	// Set Subject in resulting email
	email.subject =obj.Subj1+" - "+ obj.Subj2;
	

})(current, template, email, email_action, event);

View solution in original post

25 REPLIES 25

so i guess the event isnt triggering, which is why im not seeing anything in the email logs, would that be safe to assume?

i found the error on why it wasnt sending an email the syntax was wrong:

 

gs.eventQueue('VendorEmail',current,notificationContent, '');  would be the right syntax. 

 

https://community.servicenow.com/community?id=community_question&sys_id=7a57a892db823700d6a102d5ca9619ee

 

now i have to see why the JSON isnt parsing right.

AnirudhKumar
Mega Sage
Mega Sage

You can aggregate all the data required into a JSON variable and send that as a parameter in your eventQueue function.

For example:

var data1 = producer.fieldName1;
var data2 = producer.fieldName2;

var notificationContent = {};
notificationContent.detail1 = data1;
notificationContent.detail2 = data2;

gs.eventQueue(current, 'yourEventName' , notificationContent , '');

 

Make sure to create the event in your Event Registry table.

ok i setup the JSON variable and the event Registry,  how do i get that to fire the email?

find_real_file.png

 

Set Send When as Event is Fired, and you will get the Event Name field at the bottom.

Select your event name here.

 

In the Who will receive section, set the Send to Event Creator as true and add your recipients.

(You get Send to event Creator only if you are in Advanced View)