CalendarEventSeries,缺少setRecurrence()方法?
谷歌脚本文档状态CalendarEventSeries应该至少有两个方法setRecurrence()
。当我尝试使用它:CalendarEventSeries,缺少setRecurrence()方法?
setRecurrence(new Date(), CalendarApp.newRecurrence().addYearlyRule().interval(1));
我得到这个错误:
Cannot find method (class)setRecurrence(object,$Proxy754). (line 60, file "Sync").
的方法是在CalendarEventSeries
调用是肯定的。如何解决该错误?
您显示的示例适用于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)
}
}
}
}
而且我们有我的问题的解决方案。 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我不能给你任何点:(
PS。 Serge,你知道吗?我们怎样才能从CalendarEventSeries对象获取开始日期?我担心这是不可能的,所以我以一种不同的方式做了事情。但也许你知道一些没有记录的后门? :) – 2013-02-18 14:46:04
这似乎确实是不可能的,也许你可以发布有关该主题的新问题和/或针对[问题跟踪器]提出改进请求(http://code.google.com/p/google-如果没有有趣的答案出现的话,应用程序脚本问题/问题/列表)。 – 2013-02-18 17:24:43
这正是我在一个小时前做过的:)再次感谢您的帮助。 – 2013-02-18 18:03:19
感谢您的回应,我的情况涉及到“生日”datefield,我试图搬入日历。所以我说的是整天事件在过去的指定日期开始,没有任何结束日期,我使用CreateAllDayEventSeries()来创建它,它需要一个名称,开始日期和重新设置。 我想随后移动这个事件系列(意味着所有属于它)到另一天...没有任何指定的结束日期 它现在有意义吗? – 2013-02-17 22:23:52
感谢您的评论,我编辑了我的回应与一个新的例子对应于您的使用案例 – 2013-02-18 07:08:27
现在我很困惑。你的例子工作,然后我必须检查m中的错误y代码:| – 2013-02-18 13:59:56