我在日历上有几百个事件,都是由Apps脚本创建的。我将他们的ID存储在ScriptDB中,并有一个UI来管理它们。
当我从我的日历中删除 手动 (通过Google日历界面)的事件时,它们会消失,或者我想。事实证明,当我加载管理它们的UI时,我会尝试通过以下方式检索事件:
calendar.getEventSeriesById(eventID)
,
我可以正常访问活动,就像活动仍然在日历上一样。我 老实说这对我没有任何意义,但我会给出两分钱,看看你们是否可以想出为什么会发生这种情况的原因。这是我的用例的破坏:
null
。一段时间之后......加载用户界面... woah ,获取已删除事件的事件代码仍然有效吗? 什么的?
[13-12-18 16:48:17:941 EST] This is an event that was manually deleted: CalendarEventSeries
[13-12-18 16:48:17:943 EST] This is the location of the manually-deleted event: C/A
现在我们可以访问该事件,我们可以进行任何更改吗? 剧透:答案是' 是':
我在Logger中收到以下信息(一些重要信息):
[13-12-18 19:34:12:208 EST] EVENT DATE/TIME CHANGED?: true
[13-12-18 19:34:12:534 EST] Manual change was made to the calendar event. Getting event by ID now...
[13-12-18 19:34:12:980 EST] Event to update (by ID): CalendarEventSeries
所以我试图捕捉日历事件被删除的情况,但是因为在按ID(或该时间间隔)获取之后,实际上返回为CalendarEventSeries
, 预期结果 为null
或0
或其他 falsey-value 。
因为我知道我' m 删除了该活动的人,我想哦,我只是在我的用户界面中将其标记为删除!猜猜:失败:
- 我尝试拨打calEvent.deleteEventSeries();
,但收到了以下错误:
所以:我唯一的选择是用calEvent.deleteEventSeries();
块围绕try-catch-finally
,我认为这是一个很好的解决方案。但是,我想知道为什么手动删除日历仍然允许我们通过GAS访问?反之亦然:如果我通过GAS删除事件,确实实际上会从日历中删除它。但是,手动从日历中删除并不会删除Apps脚本对事件的访问权限。
最后问题:这个真的是CalendarApp
和Apps脚本的预期行为吗?或者这是意外或未定义的行为?除了deleteEventSeries()
区块中的try-catch
之外,还有其他解决方法吗?
编辑:根据original issue on the issue tracker,即使您通过Apps脚本删除了该事件,然后尝试使用相同的iCalId
访问该事件,它仍会返回该事件。所以我想它不仅仅是手动删除,而是一般性的删除。我没有注意到这一点,因为当我删除事件时,我会删除ScriptDb中的ID。需要注意的事情!
答案 0 :(得分:1)
坏消息,克里斯。这已成为众所周知的问题很长一段时间。 9个月前,GAS团队在一份内部错误报告中对Issue 2480进行了分类和复制。
您的问题中有更多详细信息,问题中出现的内容 - 您应该在此处指出问题添加注释!