Google Apps脚本 - 日历预订 - 无法创建活动

时间:2013-10-10 16:05:11

标签: google-apps-script google-calendar-api

我已粘贴以下代码。要解释代码的目的是阻止一个会议室,以便它不能保留使用,它是一个小的“会议室”,将被阻止,只能提前一周预订。

无论如何,这是我遇到下面的代码的问题。如果我从1月1日开始运行代码。代码将运行,然后部分通过March停止创建事件,如果这恰好发生在一个月初它不会是一个问题,因为我可以从这一点轻松开始再次,或假设月份拼写错误。但它在7月18日创造了保留。此外,当我重新启动它并将其设置为从4月初开始创建阻止预订时,它将在12月8日之前完成。

我的第一个猜测是我需要处理重新格式化代码以处理没有31天的月份,但我认为那些没有存在的日子只会抛出一个错误并且lop会继续,并且它确实通过了二月,这是短短一个月。

想想也许有更多使用Google Scripting经验的人可能会有想法或看到我正在做的事情的缺陷。谢谢你的帮助

function blockReservations(){
  var roomcalendar = CalendarApp.getCalendarById('company.com_12458546525839392d898932@resource.calendar.google.com');
  //for(var z=2014;z<=2020;z++){
  //var year = z;  
  var year = '2014';  //This Line May be used in place of the above for loop to specify a specific year
  for(var x=4;x<=12;x++)
  {
    if(x==1) var month = 'January';
    else if(x==2) var month = 'February';
    else if(x==3) var month = 'March';
    else if(x==4) var month = 'April';
    else if(x==5) var month = 'May';
    else if(x==6) var month = 'June';
    else if(x==7) var month = 'July';
    else if(x==8) var month = 'August';
    else if(x==9) var month = 'September';
    else if(x==10) var month = 'October';
    else if(x==11) var month = 'November';
    else if(x==12) var month = 'December';
    else month = 'null';
    //var month = 'July';  //This Line May be used in place of the above for loop to specify a specific year

    for(var y=1;y<=31;y++)
    {
      var date = y;
      var startDateString = month + ' ' + date + ', ' + year +' 00:00:00';
      var endDateString = month + ' ' + date + ', ' + year +' 24:00:00';
      var event = roomcalendar.createEvent('Time Blocked', new Date(startDateString), new Date(endDateString));
    }
   }
// }
}

1 个答案:

答案 0 :(得分:0)

您没有提及任何错误消息,但我希望您收到一封通知电子邮件,报告该脚本因运行时间过长而被终止。在循环中创建事件可能需要大量的处理时间。

我提出了一种不同的方法。为什么不创建一个重复的全天活动,而不是创建每日活动以保留房间,而不是在未来的几天内开始。然后每天,可以更新此预留(通过定时触发功能),以便将重复规则修改为在一天后开始。

/**
 * Create or update a block reservation for a conference room,
 * starting 'blockFrom' days from today.
 */
function updateBlockReservation() {
  // Get Calendar
  var calName = 'Huddle Room';
  var cal = CalendarApp.getCalendarsByName(calName)[0];

  var title = 'Reserved';  // Reserved events will have this title
  var blockFrom = 7;       // Days from now until room is blocked
  var today = new Date();  // Today's date, ...
  today.setHours(0,0,0,0); // at midnight.
  var startDate            // Daily block reservation starts here
        = new Date(today.getTime() + (blockFrom * 24 * 60 * 60 * 1000));
  var endTime = new Date(startDate.getTime() + (24 * 60 * 60 * 1000) - 1);
  var recurrence = CalendarApp.newRecurrence().addDailyRule();

  // Look for existing block reservation
  var series = cal.getEvents(startDate, endTime, {search:title});

  if (series.length == 0) {
    // No block reservation found - create one.
    var reserved = cal.createAllDayEventSeries(title, startDate, recurrence);
  }
  else {
    // Block reservation exists - update the recurrence to start later.
    reserved = series[0].getEventSeries();
    reserved.setRecurrence(recurrence, startDate);
  }

  debugger;  // Pause if running in debugger
}