Sync Events between Google Calendar and ServiceNow step by step
gs.log("**** Scritp to Add Update google calendar event with service now ****");
gs.log("Parsing Google Calendar Events");
var arr = []; // table to save all events IDs
InsertUpdate();
function InsertUpdate() {
try {
var r = new sn_ws.RESTMessageV2('Google Calander Rest', 'Get Events from Google Calendar');
r.setStringParameterNoEscape('calendarId', 'Put your email @ here');
var response = r.execute();
var responseBody = response.getBody();
var httpStatus = response.getStatusCode();
// parse the response data
var parser = new JSONParser();
var parsedData = parser.parse(responseBody);
for(var i=69;i<parsedData.items.length;i++)
{
// declare variable to be used
// summary is the event Name in Snow
var summary = parsedData.items[i].summary;
var organizer = parsedData.items[i].organizer.displayName;
var email = parsedData.items[i].organizer.email;
var description = parsedData.items[i].description;
var start = parsedData.items[i].start.dateTime;
var end = parsedData.items[i].end.dateTime ;
// this variable : googleid will be used as a unique id for inserting updating or deleting events
var googleid = parsedData.items[i].id ;
arr.push(googleid.toString());
// use gs.log to track the script activities
gs.log("summary :["+i+"]"+summary);
gs.log("organizer :["+i+"]"+organizer);
gs.log("description :["+i+"]"+description);
gs.log("start :["+i+"]"+start);
gs.log("end :["+i+"]"+end);
var sec=Date.parse(start);
// convert google date time to servicenow format
var dateStr = start.substring(0,start.indexOf('+'));
var dateEnd = end.substring(0,end.indexOf('+'));
var dateStr1=dateStr.toString().concat("","Z");dateStr1=dateStr1.replace(/-/g,"");dateStr1=dateStr1.replace(/:/g,"");
var dateEnd1=dateEnd.toString().concat("","Z");dateEnd1=dateEnd1.replace(/-/g,"");dateEnd1=dateEnd1.replace(/:/g,"");
// convert timedate format to GlideDateTime
var calendar_start=new GlideDateTime();
calendar_start.setValue(dateStr2);
var calendar_end=new GlideDateTime();
calendar_end.setValue(dateEnd2);
// convert timedate format to GlideScheduleDateTime
var calendar_Schedule_start= new GlideScheduleDateTime(calendar_start.getDisplayValue());
var calendar_Schedule_end= new GlideScheduleDateTime(calendar_end.getDisplayValue());
gs.log("calendar_Schedule_start :"+calendar_Schedule_start.getDisplayValue());
gs.log("calendar_Schedule_end :"+calendar_Schedule_end);
gs.log("Parsing list of attendees from Google Calendar for each event");
if (parsedData.items[i].attendees.length>0)
{
for(var j=0;j<parsedData.items[i].attendees.length;j++)
{
var attendee = parsedData.items[i].attendees[j].email;
gs.log("attendees :["+j+"]"+attendee);
}
}
// insert into service now Data base
// before inserting we should verify if the record already exist in the servicenow
// database
var calendarbase = new GlideRecord('user_calendar_event');
calendarbase.addQuery('u_number',googleid);
calendarbase.query();
var count = calendarbase.getRowCount();
if (count > 0)
{
gs.log("Uppdating an existing Event fron Google Calendar");
gs.log("Uppdating Event Name: "+summary+"Google event ID : "+calendarbase.u_number);
gs.log("Uppdating Event Name: "+summary);
gs.log("Uppdating start Date: "+calendar_Schedule_start);
gs.log("Uppdating End Date : "+calendar_Schedule_end);
while (calendarbase.next())
{
calendarbase.name=summary;
calendarbase.start_date_time=calendar_Schedule_start;
calendarbase.end_date_time=calendar_Schedule_end;
calendarbase.update();
}
}
else
{
gs.log("Creating a New Event fron Google Calendar");
calendarbase.initialize();
calendarbase.name=summary;
// get the user name based on the user email from the google calendar event
var target = new GlideRecord('sys_user');
target.addQuery('email',email);
target.query(); // Issue the query to the database to get relevant records
while (target.next())
{
// add code here to process the incident record
gs.log("target.name"+target.name);
calendarbase.setDisplayValue('user',target.name);
//gs.log("Hello Word"+target.getValue('name'));
}
//calendarbase.sys_created_by=organizer;
//calendarbase.user='Dadi Haithem';//organizer;
//calendarbase.setValue('start_date_time',+calendar_Schedule_start.getValue());
calendarbase.start_date_time=calendar_Schedule_start;
calendarbase.end_date_time=calendar_Schedule_end;
calendarbase.type='Meeting';
calendarbase.u_number=googleid;
calendarbase.insert();
//gs.log(calendarbase.getValue('end_date_time'));gs.log(calendarbase.getValue('user'));
}
//********
/*calendarbase.addQuery('u_number','!=',googleid);
calendarbase.query();
while(calendarbase.next())
{
gs.log("number"+calendarbase.u_number);
if (calendarbase.u_number!==googleid)
{
gs.log("exist not delet");
}
else
{
gs.log("not exist Delet");
calendarbase.deleteRecord();
}
}*/
}
}
catch(ex) {
var message = ex.message;
}
gs.log("End of Function Update");
} // end Function
//Delete Event
//calendarbase.addQuery('u_number',googleid);
//calendarbase.query();
gs.log("arr.length"+arr.length);
//for(k=0;k<arr.length;k++)
//{
var calendarbase1 = new GlideRecord('user_calendar_event');
//gs.log("arr :["+k+"]"+arr[k]);
//calendarbase1.addQuery('u_number','!=',arr[k]);
calendarbase1.query();
//var count1 = calendarbase1.getRowCount();
//gs.log("count :["+k+"]"+count1);
while(calendarbase1.next())
{
gs.log("u_number I :"+calendarbase1.u_number);//gs.log("arr :"+arr[0]);gs.log("arr :"+arr[1]);
var noo =arr.indexOf(calendarbase1.getValue('u_number'));
gs.log("noo I :"+noo);
if (noo!=-1)
{
gs.log("Not Deleting Record .... "+calendarbase1.getValue('u_number'));
}
else
{
gs.log("Deleting Record .... "+calendarbase1.getValue('u_number'));
calendarbase1.deleteRecord();
}
}
//}
https://www.servicenow.com/community/itsm-articles/sync-events-between-google-calendar-and-servicenow-step-by-step/ta-p/2299992