日历事件缺少方法?

问题描述 投票:0回答:1

我正在尝试编写一个脚本来操作日历数据。我似乎正在检索事件,但对象没有实现预期的方法。

这是我的 MVE:

const response = Calendar.Events.list(myCalendar, 
   {   timeMin: (new Date()).toISOString(),
       timeMax: (new Date(new Date().getTime() + (24 * 60 * 60 * 1000))).toISOString(),
       showDeleted: false,
       singleEvents: true,
       maxResults: 100,
       orderBy: 'startTime',
       timeZone: 'UTC' }
);
for (event of response.items) {
    Logger.log(event);
    Logger.log(event.summary + " / " + event.getTag("PRInv");
}

我希望 Calendar.Events.list.items 是一个事件对象的数组。虽然第一个 Logger.log 转储看起来可能是事件对象的内容:

{
htmlLink=https://www.google.com/calendar/event?eid=NjR...ldmEuY29t&ctz=UTC, 
description=hello world, 
[email protected], 
summary=Colin - test calendar entry, 
kind=calendar#event, 
updated=2024-04-18T21:08:13.098Z, 
end={dateTime=2024-04-19T21:00:00Z, timeZone=America/Los_Angeles}, 
reminders={useDefault=true}, 
id=fgfkgfgkfjgkdjgjd, 
etag="3426948986196000", 
sequence=0.0, 
eventType=default, 
status=confirmed, 
start={timeZone=America/Los_Angeles, dateTime=2024-04-19T20:00:00Z}, 
organizer={self=true, [email protected]}, 
created=2024-04-18T21:08:13.000Z, 
creator={[email protected], self=true}
}

但是下一行失败了

event.getTag is not a function

使用

Calendar.getEventById(event.id).getTag("PRInv");

我得到

Calendar.getEventById is not a function
,尽管文档(再次)说它是一个函数。

我在这里缺少什么?

google-apps-script google-calendar-api
1个回答
0
投票

修改要点:

  • 我从你的展示脚本中猜测,你可能会认为日历API(Calendar)和日历服务(CalendarApp)是相同的。不幸的是,这些是不同的。

  • 如果您想通过Calendar API使用日历服务(CalendarApp)的

    getTag("PRInv")
    ,则需要搜索
    extendedProperties
    的属性。如果修改
    Logger.log(event.summary + " / " + event.getTag("PRInv");
    ,则变为如下。

    Logger.log(event.summary + " / " + event.extendedProperties.shared["PRInv"]);
    
  • 顺便说一句,

    Calendar.getEventById(event.id).getTag("PRInv");
    不能使用。在这种情况下,需要如下所示。

    CalendarApp.getCalendarById(myCalendar).getEventById(event.iCalUID).getTag("PRInv")
    

当这些要点反映在你的放映脚本中时,就会变成如下所示。

修改后的脚本:

const response = Calendar.Events.list(myCalendar,
  {
    timeMin: (new Date()).toISOString(),
    timeMax: (new Date(new Date().getTime() + (24 * 60 * 60 * 1000))).toISOString(),
    showDeleted: false,
    singleEvents: true,
    maxResults: 100,
    orderBy: 'startTime',
    timeZone: 'UTC'
  }
);
for (event of response.items) {
  Logger.log(event);
  Logger.log(event.summary + " / " + event.extendedProperties.shared["PRInv"]); // and, Logger.log(event.summary + " / " + event.getExtendedProperties().getShared()["PRInv2"]);
}
  • 通过此修改,您可以从事件对象中看到
    PRInv
    的值。

参考资料:

© www.soinside.com 2019 - 2024. All rights reserved.