google-apps-script - 我如何让 event.getEventById('id') 或 event.getEventSeriesById('id') 返回 null 以外的任何内容
问题描述
有没有办法让 .getEventById 或 .getEventSereiesById 返回 null 以外的任何内容?我获得了用于初始事件创建的有效 ID,并且可以将其变成功能齐全的 URL,但不能在其本机环境中将其用于本机目的。
我正在尝试制作一个基本的谷歌表格计划系统,该系统可以参考日历邀请以检查更改并更新表格,反之亦然,具体取决于哪一方更及时。该系统将用于日程安排有多个用户并且会议可以在很多地方移动的环境中,通常在时间上更远。一切正常,直到我尝试从日历中获取信息,甚至是 .getStartTime(),因为 .getEvent 调用返回 null。不知道如何修复其他消息来源告诉我的是一个非功能性命令,但仍然“按预期运行”。
function IEPscheduler() {
var spreadsheet = SpreadsheetApp.getActiveSheet(); // call sheet
//var calendarID = spreadsheet.getRange("H1").getValue();
var eventCal = CalendarApp.getCalendarById("mascharterschool.com_0edapns33khde9ig0di31i2mvc@group.calendar.google.com");
var signups = spreadsheet.getRange("A2:C2").getValues();
var lr = spreadsheet.getLastRow();
var lc = spreadsheet.getLastColumn(); //
var count = spreadsheet.getRange(2,1,lr-1,lc-1).getValues();// get meeting data
for (x=0; x<count.length; x++){
var shift = count[x]; // pull row from meeting data
var Start = shift[0];
var End = shift[1];
var Student = shift[2];
var guests = shift[3];
var description = shift[4];
var location = shift[5];
var run=shift[6]; // run following based on status column
// new meeting is scheduled
if(run == null || run == ''){
var event = {
'location': location,
'description':description ,
'guests':guests +',',
'sendInvites': 'True',
}
var invite = eventCal.createEvent(Student, Start, End, event);
invite.setGuestsCanInviteOthers(true); // allow guests to invite others
var eventId = invite.getId();
var date = invite.getDateCreated();
spreadsheet.getRange(x+2,7).setValue('Invite created'); // set status in sheet
spreadsheet.getRange(x+2,8).setValue(date); // inital date for created meeting invite
spreadsheet.getRange(x+2,9).setValue(eventId);
}
// check existing meetings for updates
else {
var id = shift[9];
var invite = eventCal.getEventSeriesById('id');
// if the time or location has changed update calander
if(invite.getStartTime() !== Start || invite.getEndTime() !== End || invite.getLocation() !== location){
// if sheet override flagged
if(shift[lc-1] !== null || Shift[lc-1] !== ''){
invite.setTime(Start,End); // update start/end time
invite.setLocation(location); // update location
}
// if canalder invite is further out than spreadsheet --> update spreadsheet
if(invite.getStartTime() >> Start){
spreadsheet.getRange(x+2,1).setValue();
spreadsheet.getRange(x+2,2).setValue();
}
// if spread sheet time is later than invite --> updater invite
else{
invite.setTime(Start,End); // update start/end time
invite.setLocation(location); // update location
}
var date = invite.getLastUpdate();
spreadsheet.getRange(x+2,7).setValue('Updated'); // set new status in sheet
spreadsheet.getRange(x+2,8).setValue(date); // set date meeting was updated
}
// if guest list has changed ???
if
}
}
}
// set script to be runnable from sheet tool bar
function onOpen() {
var ui = SpreadsheetApp.getUi();
ui.createMenu('Sync to Calendar') // tool bar banner
.addItem('Create Events Now', 'IEPscheduler') // sub catageory (title, function to run)
.addToUi();
}
解决方案
实际上,我们在发布后不久就想通了,我无法回过头来。原来 .getId 的 ID 是 iCalUID,而 .getEventById() 采用 iCalID。不同之处在于 UID 在 ID 末尾附加了“@google.com”。在“@”处拆分,get 事件完美运行。
getId 命令以无用的形式返回正确的数据,需要对其进行编辑才能用于其预期目的,这是一个愚蠢的怪癖。
推荐阅读
- arrays - 为什么 "a=( * )" 为 '*' 中的每个文件名而不是每个单词分配一个包含一个元素的数组?
- angularjs - 如何在基于组件的 AngularJS 应用程序中将 $filter 服务注入自定义指令
- python - 为什么在 TensorFlow 实现中使用 `tensorflow.python.ops.x` 而不是 `tf.x`
- autodesk-forge - 将具有不同单位的模型加载到 Forge 查看器中
- excel - 将日期分配给变量时出现类型不匹配错误
- objective-c - 如何在 iOS 中启用智能反转?(Objective C 和 cydia 越狱应用)
- c# - 如何制作一个行为类似于组合框但具有可编辑文本框的用户控件
- c# - 75以下和50以下整数的正则表达式
- c - 为什么 fwrite 为某些双精度写 9 个字节?
- airflow - 我可以在任务级别设置重试延迟吗?