0
votes

I have a script running in a Google Spreadsheet that successfully can create new events; including inviting people with a non-Google account.

Another script can update an existing event. It nicely can reschedule the event, change location, adds/removes attendees.

However, attendees not having a Google account, don't get a notification/update.

When I manually change an event in Google Calendar, I'm asked if I want to notify people. If I press OK, all attendees, are informed, including non-Google accounts.

How to trigger this by script?

The script below runs correctly.

 function sendInvite(calendarId, eventId, email) {
  var n = eventId.indexOf("@")
  var str = eventId.substring(0,n)
  var event = Calendar.Events.get(calendarId, str);
  if(event.attendees) {
    event.attendees.push({
      email: email
    });
  } else {
    event.attendees = new Array({email: email});
  }
  if(email[0].length > 0) {
    event = Calendar.Events.patch(event, calendarId, str, {
      sendNotifications: true
    });
  }
}
1

1 Answers

0
votes

Solved it. There were a number of mistakes:

  • email should have been an array
  • the .patch only works if all the mutations of the event are carried out with the api

This results in the following code (could be written nicer, but it works):

function updateEvent2() {



  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Meetings to be Planned')
  var data = sheet.getDataRange().getValues()


  var t1 = 3
  var t2 = 3
  var formules = []
  for (var i = 3; i<data.length;i++) {
    formules[i-3]=[]
    formules[i-3][0] = '=text(b'+(i+1)+'+c'+(i+1)+';"yyyy-mm-ddThh:mm:ss")'
    formules[i-3][1] = '=text(b'+(i+1)+'+d'+(i+1)+';"yyyy-mm-ddThh:mm:ss")'
    if(data[i][0] != '') {t2++}
    }
  sheet.getRange(4,5,formules.length,2).setFormulas(formules)
  SpreadsheetApp.flush()

  var data = sheet.getDataRange().getValues()

  var event = []
  var calendarId = CalendarApp.getDefaultCalendar().getId();
  for(var i = t1; i<t2;i++) {
var eventTitle = data[i][0]
var eventStart = data[i][4]
var eventEnd = data[i][5]
var eventLocation = data[i][6]
var eventDescription = data[i][7]
var eventGuests = data[i][8]
var eventId = data[i][9]
var toBeUpdated = data[i][10]
if (toBeUpdated == 'x') {
  event[i-t1] = []

  var n = eventId.indexOf("@")
  var str = eventId.substring(0,n)
  var updateEvent = Calendar.Events.get(calendarId, str);
  var updated = false
  if(updateEvent.summary!=eventTitle) {
    updateEvent.summary = eventTitle
    updated = true
  }
  if(updateEvent.location!=eventLocation) {
    updateEvent.location = eventLocation
    updated = true
  }
  if(updateEvent.description!=eventDescription) {
    updateEvent.description=eventDescription
    updated = true
  }
  if(updateEvent.start!=eventStart) {
    updateEvent.end.dateTime= eventEnd
    updateEvent.end.timeZone= 'Europe/Amsterdam'
    Logger.log(updateEvent.end)
    updated = true
  }
  if(updateEvent.end!=eventEnd) {
    updateEvent.start.dateTime=eventStart
    updateEvent.end.timeZone= 'Europe/Amsterdam'
    Logger.log(updateEvent.start)
    updated = true
  }
  var currentGuests = updateEvent.attendees
  for each (var guest in currentGuests) {
    if(eventGuests.indexOf(guest.getEmail())==-1) {
      updateEvent.attendees[0].
      updateEvent.removeGuest(guest.getEmail());
      updated = true
    }
  }
  eventGuests = eventGuests.replace(/ /g,'')
  var allGuest = eventGuests.split(',')
  if(updateEvent.attendees) {
    updateEvent.attendees.push({
      email: allGuest
    });
  } else {
    updateEvent.attendees = new Array({email: allGuestl});
  }

  if (updated) {
    updateEvent = Calendar.Events.patch(updateEvent, calendarId, str, {sendNotifications: 'true'});
    var date = new Date()
    event[i-t1][0] = date
    sheet.getRange(i+1,11).setValue(date)
  }
}

} }