2013-10-10 59 views
0

我粘贴了下面的代码。为了解释代码打算做的是阻止一个会议室,使其不能被预留使用,它是一个小的“杂乱的房间”,将被封锁,只能提前一周预订。Google Apps脚本 - 日历预定 - 无法创建事件

无论如何,这是我遇到的问题,下面的代码。如果我从1月1日开始运行代码。代码将运行,然后在3月中途停止创建事件,如果这发生在一个月初,这不会是一个问题,因为我可以从该点轻松启动再次,或者假设这个月拼写错误。但它会在18日行军时产生保留意见。另外,当我重新启动并将其设置为从4月初开始创建受阻保留时,它将在12月8日结束。

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

想想也许有人对Google脚本有更多的经验可能有一个想法或看到我正在做的事情的缺陷。感谢您的帮助

function blockReservations(){ 
    var roomcalendar = CalendarApp.getCalendarById('[email protected]m'); 
    //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)); 
    } 
    } 
// } 
} 

回答

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 
} 
相关问题