Home > Blockchain >  How to insert Google Event with Extended Properties in GS?
How to insert Google Event with Extended Properties in GS?

Time:04-27

I want to add / insert new event with extened properties in Google Script = .gs file.

I found code example for Calendar API - Events insert - see below. But the code uses the JavaScript client library. I want the code to run from GS file. I tried to modify but it did not work.

When using the code I want to be able to specify any calendar. Not only "primary".

// Refer to the JavaScript quickstart on how to setup the environment:
// https://developers.google.com/calendar/quickstart/js
// Change the scope to 'https://www.googleapis.com/auth/calendar' and delete any
// stored credentials.

var event = {
  'summary': 'Google I/O 2015',
  'location': '800 Howard St., San Francisco, CA 94103',
  'description': 'A chance to hear more about Google\'s developer products.',
  'start': {
    'dateTime': '2015-05-28T09:00:00-07:00',
    'timeZone': 'America/Los_Angeles'
  },
  'end': {
    'dateTime': '2015-05-28T17:00:00-07:00',
    'timeZone': 'America/Los_Angeles'
  },
  'recurrence': [
    'RRULE:FREQ=DAILY;COUNT=2'
  ],
  'attendees': [
    {'email': '[email protected]'},
    {'email': '[email protected]'}
  ],
  'reminders': {
    'useDefault': false,
    'overrides': [
      {'method': 'email', 'minutes': 24 * 60},
      {'method': 'popup', 'minutes': 10}
    ]
  }
};

var request = gapi.client.calendar.events.insert({
  'calendarId': 'primary',
  'resource': event
});

request.execute(function(event) {
  appendPre('Event created: '   event.htmlLink);
});

Could someone please explain the difference between private and shared extended properties?

I am able to create new event using below code but looks like it will not store extended properties.

function getCalendar() {

  var calendarId = '[email protected]'
  var calendar = CalendarApp.getCalendarById(calendarId)
  Logger.log('The calendar is named "%s".', calendar.getName());
 
var eventOption = {

  location: 'The Moon',
  description: 'link na akci je https://us02web.zoom.us/j/83314336043',

  extendedProperties: { // Extended properties of the event.
    private: { // Properties that are private to the copy of the event that appears on this calendar.
      creator: "Radek", // The name of the private property and the corresponding value.
    },
  }
}

var event = calendar.createEvent('test event from the script',
  new Date(),
  new Date(),
  eventOption
 );

  var eventId = event.getId().replace(/@.*/,'') // // Remove @google.com from eventId
Logger.log('Event ID: '   eventId)

calendarId = 'primary'


var eventSaved = Calendar.Events.get(encodeURIComponent(calendarId), eventId)

var testEx = event.extendedProperties


var test = event.extendedProperties.private["creator"];


}

CodePudding user response:

Answer for question 1:

Could someone please explain the difference between private and shared extended properties?

The official document says as follows.

  • extendedProperties.private: Properties that are private to the copy of the event that appears on this calendar.
  • extendedProperties.shared: Properties that are shared between copies of the event on other attendees' calendars.

For example, when a new event is created with the values of extendedProperties.private and extendedProperties.shared by including the attendees, you can see both values. But, the attendees can see only the value of extendedProperties.shared.

Is this explanation useful?

Answer for question 2:

I want to add / insert new event with extened properties in Google Script = .gs file.

When I saw the official document of the method of createEvent(title, startTime, endTime, options), it seems that options has no property of extendedProperties. Ref I thought that this is the reason for your issue. If you want to create a new event including the values of extendedProperties.private and extendedProperties.shared, how about using Calendar API of Advanced Google services?

The sample script is as follows.

const calendarId = "###"; // Please set your calendar ID.

// Create a new event including extendedProperties.
const params = {
  start: { dateTime: "2022-04-27T00:00:00Z" },
  end: { dateTime: "2022-04-27T01:00:00Z" },
  extendedProperties: {
    private: { key1: "value1" },
    shared: { key2: "value2" }
  },
  summary: "sample",
  attendees: [{ email: "###" }] // Please set the email of attendee, if you want to include.
};
const res1 = Calendar.Events.insert(params, calendarId);

// Check the value of extendedProperties
const res2 = Calendar.Events.get(calendarId, res1.id);
console.log(res2.extendedProperties)
  • When this script is run by the owner of the calendar, you can see both values of extendedProperties.private and extendedProperties.shared.
  • When you get this event by the attendee, you can see only the value of extendedProperties.shared.

References:

CodePudding user response:

Could someone please explain the difference between private and shared extended properties? Based on documentation, shared extended properties are visible and editable by attendees while private set on one attendee's local "copy" of the event.

To add extended properties to events with Apps Script, you can do it with the advanced Calendar service. For this, you need to add the “Google Calendar API” service in your Apps Script project, on the left side of the screen, click on the “ ” next to “Services”, search for “Google Calendar API”, click on it and click “Add”.

After completing the steps mentioned above, you can test this script I created as an example.

function createEvent() {
  var calendarId = '[email protected]' //you can specify the calendar with the calendar id
  var start = new Date();
  var end = new Date();
  var event = {
    "location": "The Moon",
    "description": "link na akci je https://us02web.zoom.us/j/83314336043",
    "start": {
      "dateTime": start.toISOString(),
    },
    "end": {
      "dateTime": end.toISOString()
    },
    "extendedProperties": {
      "private": {
        "creator": "Radek"
      }
    }
  };

  event = Calendar.Events.insert(event, calendarId);
  Logger.log('Event ID: '   event.id);
}
  • Related