Enabling app users to add Google Calendar events from your app

image
With a few steps, you can create custom actions to add events to a Google Calendar:

Additional details are available here:

9 Likes

may you do an sample app?

Can you edit the same event and update the google calendar. By update i mean it would delte the old event and create a new one

Hi Dan - if you’d like your app to manage events on a Google Calendar you manage, you can connect that calendar as a data source - that will be the best way to add/edit/update any events from your app. The action above is designed more for giving end app users easy ways to add content to their own individual calendars.

1 Like

So the calendar is added as a static single event or it can be a subscription link where any calendar items are dynamic (can be modified by the app or deleted or new ones added)?

Google Calendars can be added as a data source connection, similar to a Google Sheet. Read/Write modifications can be made to events from the app or from the calendar - a few more details are available here https://help.appsheet.com/en/articles/962108-using-data-from-google-calendar

1 Like

But if your data is not in the google calendar. Meaning your data is separate, it cannot continiously sync to the google calendar, it can just transfer the information into the google calendar DATA one time?

Can you elaborate on your situation a little more? I’m entirely unclear on what you’re trying to do.

Sure. I will do my best. I have a table called Jobs. It is essentially and form where you input name, addresses, phone number, email, job notes, job date, lead or booked job. I have a google calendar in appsheet called Appsheet Test Calendar. If I enter the information in table Jobs… i need that information to flow to the Appsheet Test Calendar. This works. The issue is what happens when a client switches their move date OR updates job notes. I would make those changes in the table Jobs. How does that information update in the Appsheet Test Calendar automatically

1 Like

*a from

I would think you’d need to use actions to accomplish this.

How do you accomplish this?

After adding and connecting to Google calendar as data source, the app will generate table with several field, and I found “Creator”.

I assume this is to fix who “create” the calendar event. So I added “useremail()” as initial value of this field. Then i create new event from Appsheet app.
Then open up Google calendar on browser. New event is added indeed, but the owner (creator?) of the app is still app make (creator) email address instead of specified email value within appsheet.

It looks like the Appsheet is not passing the email address value of “creator” field on the table to Google calendar api when new “event” is generated on Appsheet, although I m not perfectly sure.

2 Likes

@tsuji_koichi yes you are right. When you add Google Calendar as a data source, the “Editable?” field in the [Creator] column is disabled. So I don’t think you can change the Creator.

Thats strange.
On my app, creator field is editable.

Yes you can enable it but I think it’s not possible to change the Creator.

I actually have sent query to support@appsheet.com and waiting for response.

Will share here what I will find.

1 Like

I hope that’s the case! You shouldn’t be apply to assign calendar events to arbitrary people. That’d be a security nightmare.

That said, I wonder if it’d work if the app accessed the calendar as the app user rather than the app creator?

We added google calendar which is shared among the named users, those who are actually users of the Appsheet app. In that case, their is no concern over the seurity stuffs, I would say.

Even there is a gap, i.e. the appsheet app users and those who are able to the google calendar, for instance, the user who does not have access right to calendar but can access to the app, they create ver calendar event. Then the appsheet capture the email address of this users and add the event to G calendar. Google calendar shows the email address of the event creator. But this event creator unable to access to google calendar. (unless he or she gains the access to it.)

I dont see any security concerns on this scenario, as far as app creator acknoelwdge the appsheet app user can creat new event to google cal beforehands he/she share the app to the users.

Or if we put the email address of the user who does not have acccess to google calendar, it will automatically gave full access to google calendar? In that sense, yes, it may cause security issue.

1 Like

I think this should 100% be the case for events created through AppSheet, or at least an option toggle. Just as it should read the email of the creator (assuming there is one) for anything added from a different source.

1 Like

@Aleksi

When we add google calendar to app as data source, then Appsheet generate the table with column like this.

The defaul name of this table is called “Primary”

Apart from that, Appsheet is surely using Google Calendar API for this integration. Then I visited the documents - https://developers.google.com/calendar/v3/reference/events

I assumed “Creator” is a filed representing who generate/own the calendar event, but we have another key value of “Organizer” in API - key value to pass, but this “organizer” fileds is not populated in “Primary” table. I simply added “virtual column” withe field name of “organizer” and passed randam email value to it to create event, but it did not change result at all.
I m wondering whatif happen if Appsheet dev team add this “organizer” field as a part of “Primary” table and we pass email value we want? It possibly change the story, i.e .we are able to change the name (ID/Email) of event organizer from Appsheet?

{
“kind”: “calendar#event”,
“etag”: etag,
“id”: string,
“status”: string,
“htmlLink”: string,
“created”: datetime,
“updated”: datetime,
“summary”: string,
“description”: string,
“location”: string,
“colorId”: string,
> “creator”: {
> “id”: string,
> “email”: string,
> “displayName”: string,
> “self”: boolean
> },
> “organizer”: {
> “id”: string,
> “email”: string,
> “displayName”: string,
> “self”: boolean
> },
“start”: {
“date”: date,
“dateTime”: datetime,
“timeZone”: string
},
“end”: {
“date”: date,
“dateTime”: datetime,
“timeZone”: string
},
“endTimeUnspecified”: boolean,
“recurrence”: [
string
],
“recurringEventId”: string,
“originalStartTime”: {
“date”: date,
“dateTime”: datetime,
“timeZone”: string
},
“transparency”: string,
“visibility”: string,
“iCalUID”: string,
“sequence”: integer,
“attendees”: [
{
“id”: string,
“email”: string,
“displayName”: string,
“organizer”: boolean,
“self”: boolean,
“resource”: boolean,
“optional”: boolean,
“responseStatus”: string,
“comment”: string,
“additionalGuests”: integer
}
],
“attendeesOmitted”: boolean,
“extendedProperties”: {
“private”: {
(key): string
},
“shared”: {
(key): string
}
},
“hangoutLink”: string,
“conferenceData”: {
“createRequest”: {
“requestId”: string,
“conferenceSolutionKey”: {
“type”: string
},
“status”: {
“statusCode”: string
}
},
“entryPoints”: [
{
“entryPointType”: string,
“uri”: string,
“label”: string,
“pin”: string,
“accessCode”: string,
“meetingCode”: string,
“passcode”: string,
“password”: string
}
],
“conferenceSolution”: {
“key”: {
“type”: string
},
“name”: string,
“iconUri”: string
},
“conferenceId”: string,
“signature”: string,
“notes”: string,
“gadget”: {
“type”: string,
“title”: string,
“link”: string,
“iconLink”: string,
“width”: integer,
“height”: integer,
“display”: string,
“preferences”: {
(key): string
}
},
“anyoneCanAddSelf”: boolean,
“guestsCanInviteOthers”: boolean,
“guestsCanModify”: boolean,
“guestsCanSeeOtherGuests”: boolean,
“privateCopy”: boolean,
“locked”: boolean,
“reminders”: {
“useDefault”: boolean,
“overrides”: [
{
“method”: string,
“minutes”: integer
}
]
},
“source”: {
“url”: string,
“title”: string
},
“attachments”: [
{
“fileUrl”: string,
“title”: string,
“mimeType”: string,
“iconLink”: string,
“fileId”: string
}
]
}

1 Like