In einem dokumentengebundenen Google Appscript in einer unserer Unternehmens-Tabellenkalkulationen habe ich ein Skript erstellt, mit dem Tabellenkalkulationszeilen in Google-Kalendertermine umgewandelt werden. Die Funktion funktioniert gut für mich, aber nicht für meinen Kollegen, obwohl wir beide die Berechtigung zum Bearbeiten des Kalenders und zum Ändern der Freigabeberechtigungen haben, und mein Kollege hat bewiesen, dass er Termine im Kalender von calendar.google.com erstellen kann.Google Apps Script erstellen Kalenderereignis aus Blatt verboten?
Er erhält die folgende Fehlermeldung, wenn er das Skript ausgeführt wird:
{"message":"Forbidden","name":"GoogleJsonResponseException","fileName":"SCHEDULER","lineNumber":204,"stack":"\tat SCHEDULER:204 (createAppointments)\n"}
Linie 204 entspricht dem Befehl:
Calendar.Events.insert(event, CAL, {sendNotifications: true, supportsAttachments:true});
Wenn er bearbeiten Rechte an der hat Kalender, warum ist das verboten? Gibt es ein Problem mit dem Google Kalender-Dienst in Google Apps Script? Außerdem habe ich die CAL-Variable in einen Kalender geändert, den ich persönlich erstellt und mit denselben Berechtigungen an ihn verteilt habe. Er kann diesen Kalender gut bearbeiten.
Hier ist die psuedocode für die Funktion
function createAppointments() {
var CAL = '[email protected].com';
for(/*each row in spreadsheet*/)
{
if(/*needs appointment*/)
{
var object = {/*...STUFF...*/};
var coworker = '[email protected]';
var timeArgs = {start: /*UTC Formatted time*/, end: /*UTC Formatted time*/}
if(/*All the data checks out*/{
var summary = 'Name of appointment'
var notes = 'Stuff to put in the body of the calendar appointment';
var location = '123 Happy Trail, Monterrey, TX 12345'
//BUILD GOOGLE CALENDAR OBJECT
var event = {
"summary": summary,
"description": notes,
"start": {
"dateTime": timeArgs.start,
"timeZone": TZ
},
"end": {
"dateTime": timeArgs.end,
"timeZone": TZ
},
"guestsCanInviteOthers": true,
"reminders": {
"useDefault": true
},
"location": location
//,"attendees": []
};
event.attendees = [{[email protected], displayName: 'coworker name'}];
//CREATE CALENDAR IN GOOGLE CALENDAR OF CONST CAL
Calendar.Events.insert(event, CAL, {sendNotifications: true, supportsAttachments:true});
} else{/*Tell user to fix data*/}
}
}
Vielen Dank!
-Update 2017.12.29:
Ich habe versucht, die App Anpassung nach Jason Allshorn and Crazy Ivan. Vielen Dank für Ihre Hilfe, soweit! Interessanterweise habe ich dieselbe Antwort sowohl mit dem Advanced Calendar Service als auch mit der CalendarApp erhalten.
Der Fehler ist, wie unten dargestellt:
<!DOCTYPE html><html><head><link rel="shortcut icon" href="//ssl.gstatic.com/docs/script/images/favicon.ico"><title>Error</title><style type="text/css">body {background-color: #fff; margin: 0; padding: 0;}.errorMessage {font-family: Arial,sans-serif; font-size: 12pt; font-weight: bold; line-height: 150%; padding-top: 25px;}</style></head><body style="margin:20px"><div><img alt="Google Apps Script" src="//ssl.gstatic.com/docs/script/images/logo.png"></div><div style="text-align:center;font-family:monospace;margin:50px auto 0;max-width:600px">Object does not allow properties to be added or changed.</div></body></html>
Oder danach durch einen HTML-Editor-Analyse:
Was bedeutet das auch? Ich habe den erweiterten Dienst aktiviert, und das Skript kann von jedem Benutzer ausgeführt werden. Irgendwelche Ideen?
Ich habe nach dem Testen bestätigt, dass der Fehler zurückkommt, nachdem versucht wurde, den Kalenderereignis-Befehl calendarApp/Advanced Calendar auszuführen.
Hier ist mein Code, den ich verursachte so weit kommen:
function convertURItoObject(url){
url = url.replace(/\+/g,' ')
url = decodeURIComponent(url)
var parts = url.split("&");
var paramsObj = {};
parts.forEach(function(item){
var keyAndValue = item.split("=");
paramsObj[keyAndValue[0]] = keyAndValue[1]
})
return paramsObj; // here's your object
}
function doPost(e) {
var data = e.postData.contents;
data = convertURItoObject(data);
var CAL = data.cal;
var event = JSON.parse(data.event);
var key = data.key;
var start = new Date(event.start.dateTime);
if(ACCEPTEDPROJECTS.indexOf(key) > -1)
{
try{
var calendar = CalendarApp.getCalendarById(CAL);
calendar.createEvent(event.summary, new Date(event.start.dateTime), new Date(event.end.dateTime), {description: event.description, location: event.location, guests: event.guests, sendInvites: true});}
/*try {Calendar.Events.insert(event, CAL, {sendNotifications: true, supportsAttachments:true});} Same error when I use this command*/
catch(fail){return ContentService.createTextOutput(JSON.stringify(fail));}
e.postData.result = 'pass';
return ContentService.createTextOutput(JSON.stringify(e));
}
else {
return ContentService.createTextOutput('Execution not authorized from this source. See CONFIG of target project for details.');
}
}