2015-04-12 2 views
0

Попытка создать AllDayEvent с помощью getCalendarById без успеха. Текущий скрипт, который у меня есть, будет запускаться с использованием getDefaultCalendar, но как только я попытаюсь заменить getCalendarById, я получаю сообщение об ошибке «Действие не разрешено».Создайте AllDayEvent, используя getCalendarById в скриптах Google

Code.gs:

//Numeric IDs for Column values 

//Column containing PBG code 
var titleId = 3 
//Column containing delivery period 
    var titleId2 = 5 
//Column containing delivery notes 
    var descId = 8 
//Column containing TimeStamp 
    var formTimeStampId = 1 
//Column containing Regional Coordinator 
    var regionalcoordinatorId = 2 
//Column containing certification status 
    var certId = 6 
//Column containing delivery date 
    var delivdateId = 4 
//Column containing Delivery Coordinator 
    var deliverycoordinatorId = 9 
//Column containing dozens 
    var dozensId = 7 

//Calendar Id 
    var calendarId = "CALENDAR_ID_GOES_HERE" 


function sendFormToCalendar() { 
//Allow access to spreadsheet 
    var sheet = SpreadsheetApp.getActiveSheet(); 
    var rows = sheet.getDataRange(); 
    var numRows = rows.getNumRows(); 
    var values = rows.getValues(); 
    var lr = rows.getLastRow(); 
    var dataRange = sheet.getRange(lr,1,1); 
    var data = dataRange.getValues(); 
    var title = sheet.getRange(lr,titleId,1,1).getValue()+" :: "+sheet.getRange(lr,dozensId,1,1).getValue()+" :: "+sheet.getRange(lr,titleId2,1,1).getValue(); 

//Increasing content for Description 
    var subOn = "Posted:"+sheet.getRange(lr,formTimeStampId,1,1).getValue()+"\n"+"Posted By: "+sheet.getRange(lr,deliverycoordinatorId,1,1).getValue(); 
    var desc = "Certification:"+sheet.getRange(lr, certId, 1, 1).getValue()+"\n"+sheet.getRange(lr,descId,1,1).getValue()+"\n"+subOn; 
    var loc = 'Perry Import-Export SA'; 

//Create an all-day event and log the ID 
    var date = sheet.getRange(lr,delivdateId,1,1).getValue(); 
    var event = CalendarApp.getDefaultCalendar().createAllDayEvent(title, new Date(date), 
                   {location: loc, description: desc}); 
Logger.log('Event ID: ' + event.getId()); 
    } 

ответ

0

Ниже будет правильный синтаксис. Если календарь не существует или у вас нет доступа, getCalendarById() возвращает null. Я предполагаю, что ошибка вызывается из createAllDayEvent(). Если вы разобьете свой звонок, как показано ниже, вы сможете лучше определить, откуда исходит ошибка.

var cal = CalendarApp.getCalendarById(calendarId); 
var event = cal.createAllDayEvent(title, new Date(date),{location: loc, description: desc}); 

EDIT: В ответ на комментарий ниже:

Простой способ доступа настройки записи, чтобы перейти к настройкам календаря -> Закладки Настройки календаря. Если у вашей учетной записи есть доступ «владелец» («Сделать изменения и управлять совместным использованием» в настройках календаря), вы также можете сделать это в коде с расширенным сервисом календаря.

var scope = Calendar.newAclRuleScope(); 
scope.type = "user"; 
scope.value ="[email protected]"; 

var aclRule = Calendar.newAclRule(); 
aclRule.scope = scope 
aclRule.role = "writer"; 

// This is shorthand for all of the above 
// {"scope":{"value":"[email protected]", "type":"user"}, "role":"writer"} 

Calendar.Acl.insert(aclRule, "myCalendarId") 
+0

спасибо за синтаксис. Я запускал скрипт без каких-либо проблем, но когда я действительно пытался завершить процесс, используя форму Google, он не отправил в указанный календарь. Это может привести к двум причинам: (1): имя домена, предшествующее идентификатору календаря; и/или 2) мои общие привилегии не включают редактирование и т. д. Любые мысли? –

+0

Вы должны использовать весь календарь, как он отображается в настройках календаря. Если вы авторизуете скрипт под своей учетной записью, вам потребуется доступ на запись к календарю. –

+0

Я считаю, что проблема с записью является проблемой. Есть ли синтаксис для этого? –

Смежные вопросы