0

以下のコードを貼り付けました。コードの意図を説明すると、会議室をブロックして使用予約できないようにすることです。これは、ブロック アウトされ、1 週間前に予約する必要がある小さな「ハドル ルーム」です。

とにかく、ここに私が以下のコードで遭遇している問題があります。1月1日からコードを実行すると、コードが実行され、3月の途中でイベントの作成が停止します。これが月の初めに正確に発生した場合、その時点から簡単に開始できるため、問題にはなりません。もう一度、または月のスペルが間違っていると仮定します。しかし、それは3月18日まで予約を作成します. また、これを再起動して、4 月の初めからブロックされた予約を作成するように設定したところ、12 月 8 日になりました。

私の最初の推測では、31 日を含まない月を処理するようにコードを再フォーマットする必要があると思いますが、存在しない日は単にエラーをスローし、欠落が続くと想定し、短い月である 2 月を通過しました。 .

考えただけでも、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));
    }
   }
// }
}
4

1 に答える 1

0

エラー メッセージについては言及されていませんが、実行時間が長すぎるためにスクリプトが強制終了されたことを報告する通知メールを受け取っていると思います。ループ内でイベントを作成すると、多くの処理時間がかかる場合があります。

別のアプローチを提案します。部屋を予約するために毎日のイベントを作成する代わりに、将来の数日から始まる終日の定期的なイベントを作成してみませんか。その後、毎日、この予約を (時間指定トリガー関数によって) 更新して、1 日後に開始するように繰り返しルールを修正できます。

/**
 * 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
}
于 2013-11-21T18:11:54.763 に答える