2013-02-17 106 views
2

谷歌脚本文档状态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 
     } 
    } 
    } 
} 

编辑您的评论如下:它的工作原理完全SAM E对于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

感谢您的回应,我的情况涉及到“生日”datefield,我试图搬入日历。所以我说的是整天事件在过去的指定日期开始,没有任何结束日期,我使用CreateAllDayEventSeries()来创建它,它需要一个名称,开始日期和重新设置。 我想随后移动这个事件系列(意味着所有属于它)到另一天...没有任何指定的结束日期 它现在有意义吗? – 2013-02-17 22:23:52

+0

感谢您的评论,我编辑了我的回应与一个新的例子对应于您的使用案例 – 2013-02-18 07:08:27

+0

现在我很困惑。你的例子工作,然后我必须检查m中的错误y代码:| – 2013-02-18 13:59:56

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。 Serge,你知道吗?我们怎样才能从CalendarEventSeries对象获取开始日期?我担心这是不可能的,所以我以一种不同的方式做了事情。但也许你知道一些没有记录的后门? :) – 2013-02-18 14:46:04

+0

这似乎确实是不可能的,也许你可以发布有关该主题的新问题和/或针对[问题跟踪器]提出改进请求(http://code.google.com/p/google-如果没有有趣的答案出现的话,应用程序脚本问题/问题/列表)。 – 2013-02-18 17:24:43

+0

这正是我在一个小时前做过的:)再次感谢您的帮助。 – 2013-02-18 18:03:19