首页 > 解决方案 > 我如何让 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();
}

标签: google-apps-script

解决方案


实际上,我们在发布后不久就想通了,我无法回过头来。原来 .getId 的 ID 是 iCalUID,而 .getEventById() 采用 iCalID。不同之处在于 UID 在 ID 末尾附加了“@google.com”。在“@”处拆分,get 事件完美运行。

getId 命令以无用的形式返回正确的数据,需要对其进行编辑才能用于其预期目的,这是一个愚蠢的怪癖。


推荐阅读