Как получить event.getEventById ('id') или event.getEventSeriesById ('id'), чтобы вернуть что-либо, кроме null - PullRequest
0 голосов
/ 04 апреля 2020

Есть ли способ заставить .getEventById или .getEventSereiesById возвращать что-либо кроме нуля? Я получаю действительный идентификатор для первоначального создания события и могу превратить его в полнофункциональный URL, но не могу использовать его в своей собственной среде для своих собственных целей.

Я пытаюсь создать основную c систему расписаний листов Google, которая может ссылаться на приглашение календаря, чтобы проверить изменения и обновить лист, или наоборот, в зависимости от того, какая из сторон вышла вовремя. Система будет использоваться в среде, в которой в расписании участвуют несколько пользователей, и собрания можно много перемещать, как правило, вовремя. Все работает, пока я не попытаюсь получить информацию из календаря, даже .getStartTime (), потому что вызовы .getEvent возвращают ноль. не уверен, как исправить то, что говорят другие источники, это нефункциональная команда, которая все еще «функционирует как задумано».

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();
}

Ответы [ 2 ]

0 голосов
/ 05 апреля 2020

Мы действительно поняли это вскоре после публикации, и я не мог вернуться к этому. Оказывается, идентификатор из .getId - это iCalUID, а .getEventById () принимает iCalID. Разница в том, что к концу идентификатора UID добавлен '@ google.com'. Разделите на '@', и событие get работает отлично.

Это глупая странность, что команда getId возвращает нужные данные в бесполезной форме, которая требует редактирования для использования по назначению.

0 голосов
/ 04 апреля 2020

Для меня не возвращены значения NULL с этим сценарием:

function getEvents() {
  const cal=CalendarApp.getDefaultCalendar();
  const dt=new Date();
  const start=new Date(dt.getFullYear(),dt.getMonth()-1,dt.getDate());
  const end=new Date(dt.getFullYear(),dt.getMonth(),dt.getDate());
  var events=cal.getEvents(start, end);
  let eObj={idA:[],tA:[]}
  events.forEach(function(ev,i){
    eObj.idA.push(ev.getId());
    eObj.tA.push(cal.getEventById(ev.getId()).getTitle());
  });
  Logger.log(JSON.stringify(eObj));
  return eObj;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...