2013-02-17 7 views
2

Сценарии состояний Google. Календарные соглашения. CalendarEventSeries должен иметь не менее два методаsetRecurrence(). Когда я пытаюсь использовать:CalendarEventSeries, отсутствует setRecurrence() метод?

setRecurrence(new Date(), CalendarApp.newRecurrence().addYearlyRule().interval(1)); 

Я получаю эту ошибку:

Cannot find method (class)setRecurrence(object,$Proxy754). (line 60, file "Sync").

Метод вызывается на CalendarEventSeries точно. Как решить эту ошибку?

ответ

1

Пример, который вы показываете, относится к all day Events (указывая только одну дату для первого случая), применяете ли вы к такому событию или к «нормальному» событию?

В этом последнем случае вы должны указать 2 даты (начало и конец) для первого появления.

Ссылка выше показывает документацию, довольно ясно, об этом ...

Вот пример «впритык», который показывает, как она работает, первая функция создает событие с ежегодной повторяемости начиная с сегодняшнего дня, второй изменяет это повторение будет ежедневно, начиная с сегодняшнего дня ...

Он использует свой календарь по умолчанию

function createTestSerie(){ 
    var cal = CalendarApp.getDefaultCalendar() 
    if (cal) { 
    var title = 'Test Event'; 
    var desc = 'Created using Google Apps Script'; 
    var loc = 'Here, there and everywhere...'; 
    var recur = CalendarApp.newRecurrence().addYearlyRule().interval(1) 
    var start = new Date(); 
    var end = new Date(start.valueOf()+3600*1000); 

    var event = cal.createEventSeries(title, start, end,recur,{description:desc,location:loc});// event will be every year and last 1 hour 
    } 
} 

function modifyRecurrence(){ 
    var cal = CalendarApp.getDefaultCalendar() 
    if (cal) { 
    var start = new Date(); 
    var end = new Date(start.getTime()+3600*1000*2); 
    var events = cal.getEvents(new Date("February 16, 2013 08:00:00 PDT"), new Date("February 19, 2013 08:00:00 PDT")) 
    for(i in events){ 
    if(events[i].getTitle()=='Test Event'){ 
     var recur = CalendarApp.newRecurrence().addDailyRule().interval(1) 
     var eventId = events[i].getId() 
     cal.getEventSeriesById(eventId).setRecurrence(recur, start, end);// now events will be lasting 2 hours evey day starting today 
     } 
    } 
    } 
} 

EDIT следующий ваш комментарий: это работает точно Сэму е для allDayEvents, здесь модифицированный пример кода:

function createAllDaySerie(){ 
    var cal = CalendarApp.getDefaultCalendar() 
    if (cal) { 
    var title = 'All Day Test Event'; 
    var start = new Date(); 
    var desc = 'Created using Google Apps Script'; 
    var loc = 'home'; 
    var recur = CalendarApp.newRecurrence().addYearlyRule().interval(4) 
    var start = new Date(); 
    var event = cal.createAllDayEventSeries(title, start,recur,{description:desc,location:loc});// event will be every 4 years starting today 
    } 
} 

function modifyAllDayRecurrence(){ 
    var cal = CalendarApp.getDefaultCalendar() 
    if (cal) { 
    var start = new Date("February 19, 2010 08:00:00 PDT");// here you can choose any date you like that will be the new start date. 
    var events = cal.getEvents(new Date("February 16, 2013 08:00:00 PDT"), new Date("February 22, 2013 08:00:00 PDT")) 
    for(i in events){ 
    if(events[i].getTitle()=='All Day Test Event'){ 
     var recur = CalendarApp.newRecurrence().addYearlyRule().interval(1) 
     var eventId = events[i].getId() 
     cal.getEventSeriesById(eventId).setRecurrence(recur, start);// now events will occur once a year starting on february 19, 2010 (see screen capture below) 
     } 
    } 
    } 
} 

enter image description here

+0

Спасибо за ответ, мое дело связано с датой даты рождения, которую я пытался переместить в календарь. Поэтому я говорю о allday событие, начинающееся в указанный день в прошлом без какой-либо даты окончания. Я создаю его с помощью CreateAllDayEventSeries(), который принимает имя, дату начала и повторение. Я бы хотел просто переместить эту серию событий (что означает ВСЕ события, принадлежащие это) в другой день ... без какой-либо указанной даты окончания. Это имеет смысл сейчас? –

+0

Спасибо за ваш комментарий, я отредактировал свой ответ с новым примером, который соответствует вашему используемому случаю –

+0

И теперь я смущен. Ваш пример работал. Затем я должен проверить, что не так в m y code: | –

1

И у нас есть решение моей проблемы. В документации API есть ошибка. Там написано:

method setRecurrence(startDate, recurrence) 
Changes the recurrence rules of this series to a new rule, and to an all day event. 

Но на самом деле метод setRecurrence() принимает эти аргументы в перевернутом вниз порядке:

method setRecurrence(recurrence, startDate) 

Огромное спасибо Сергею за помощь, это было crutial! К сожалению без репутации 15 Я не могу дать вам никаких замечаний :(

+0

PS. Серж, знаете ли вы, может быть, как мы можем получить дату начала с объекта CalendarEventSeries? Я боюсь, что это невозможно, поэтому я сделал что-то по-другому. Но, может быть, вы знаете некоторые не задокументированные задние двери? :) –

+0

кажется, что это невозможно, возможно, вы могли бы опубликовать новый вопрос по этому вопросу и/или поднять запрос на улучшение в [вопросительном трекере] (http://code.google.com/p/google- apps-script-issues/issues/list), если нет интересного ответа. –

+0

Это именно то, что я сделал час назад :) Спасибо за вашу помощь еще раз. –

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