2013-10-10 4 views
0

Я вставил код ниже. Чтобы объяснить, что должен делать код, нужно блокировать конференц-зал, чтобы он не мог быть зарезервирован для использования, это небольшая «комната для путаницы», которая будет заблокирована и доступна только для резервирования за неделю вперед.Сценарий Google Apps - резервирование календаря - не удалось создать событие

В любом случае, вот проблема, с которой я сталкиваюсь с кодом ниже. Если я запустил код, начиная с 1 января. Код будет запущен, а затем частично через март перестанет создавать события, если это произойдет ровно в начале месяца, это не будет проблемой, поскольку я мог бы легко начать с этой точки снова, или предположить, что месяц указан неправильно. Но он создает оговорки, хотя 18 марта. Также, когда я перезапустил это и установил его для создания заблокированных оговорок, начиная с начала апреля, он получил 8 декабря.

Мое первое предположение заключается в том, что мне нужно иметь дело с переформатированием кода для обработки месяцев без 31 дня, но я предположил, что те, кто не существует, просто выбросят ошибку, и лоп продолжит, и он прошел через февраль, это короткий месяц.

Просто подумайте, может быть, у кого-то, у кого больше опыта работы с Google Scripting, может возникнуть идея или увидеть недостаток в чем-то, что я делаю. Спасибо за любую помощь

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 
} 
Смежные вопросы