2

Google スクリプトのドキュメントには、CalendarEventSeries には少なくとも2 つのメソッドが必要であると記載されていますsetRecurrence()。私がそれを使おうとしているとき:

setRecurrence(new Date(), CalendarApp.newRecurrence().addYearlyRule().interval(1));

次のエラーが表示されます。

メソッド (クラス)setRecurrence(object,$Proxy754) が見つかりません。(60行目、ファイル「同期」)。

CalendarEventSeriesメソッドは確実に呼び出されます。そのエラーを解決するにはどうすればよいですか?

4

2 に答える 2

1

あなたが示す例は、終日のイベントに適用されます(最初の発生に対して 1 つの日付のみを指定します)。そのようなイベントまたは「通常の」イベントに適用しますか?

この最後のケースでは、最初のオカレンスに対して 2 つの日付 (開始日と終了日) を指定する必要があります。

上記のリンクは、それについてかなり明確なドキュメントを示しています...

これがどのように機能するかを示す「エンドツーエンド」の例です。最初の関数は、今日から始まる毎年の繰り返しでイベントを作成し、2 番目の関数は、この繰り返しを今日から始まる毎日に変更します...

デフォルトのカレンダーを使用します

function createTestSerie(){
  var cal = CalendarApp.getDefaultCalendar()
  if (cal) {
  var title = 'Test Event';
  var desc = 'Created using Google Apps Script';
  var loc = 'Here, there and everywhere...';
  var recur = CalendarApp.newRecurrence().addYearlyRule().interval(1)
  var start = new Date();
  var end = new Date(start.valueOf()+3600*1000);

  var event = cal.createEventSeries(title, start, end,recur,{description:desc,location:loc});// event will be every year and last 1 hour
  }   
}

function modifyRecurrence(){
  var cal = CalendarApp.getDefaultCalendar()
  if (cal) {
  var start = new Date();
  var end = new Date(start.getTime()+3600*1000*2);
  var events = cal.getEvents(new Date("February 16, 2013 08:00:00 PDT"), new Date("February 19, 2013 08:00:00 PDT"))
    for(i in events){
     if(events[i].getTitle()=='Test Event'){
       var recur = CalendarApp.newRecurrence().addDailyRule().interval(1)
       var eventId = events[i].getId()
       cal.getEventSeriesById(eventId).setRecurrence(recur, start, end);// now events will be lasting 2 hours evey day starting today
       }
   }
   }
}

あなたのコメントに従って編集してください: allDayEventsでもまったく同じように機能します。変更されたサンプルコードは次のとおりです。

function createAllDaySerie(){
  var cal = CalendarApp.getDefaultCalendar()
  if (cal) {
  var title = 'All Day Test Event';
  var start = new Date();
  var desc = 'Created using Google Apps Script';
  var loc = 'home';
  var recur = CalendarApp.newRecurrence().addYearlyRule().interval(4)
  var start = new Date();
  var event = cal.createAllDayEventSeries(title, start,recur,{description:desc,location:loc});// event will be every 4 years starting today
  }   
}

function modifyAllDayRecurrence(){
  var cal = CalendarApp.getDefaultCalendar()
  if (cal) {
  var start = new Date("February 19, 2010 08:00:00 PDT");// here you can choose any date you like that will be the new start date.
  var events = cal.getEvents(new Date("February 16, 2013 08:00:00 PDT"), new Date("February 22, 2013 08:00:00 PDT"))
    for(i in events){
     if(events[i].getTitle()=='All Day Test Event'){
       var recur = CalendarApp.newRecurrence().addYearlyRule().interval(1)
       var eventId = events[i].getId()
       cal.getEventSeriesById(eventId).setRecurrence(recur, start);// now events will occur once a year starting on february 19, 2010 (see screen capture below)
       }
   }
   }
}

ここに画像の説明を入力

于 2013-02-17T14:01:45.087 に答える
1

そして、私たちには私の問題の解決策があります。API ドキュメントにバグがあります。そこには次のように書かれています。

method setRecurrence(startDate, recurrence)
Changes the recurrence rules of this series to a new rule, and to an all day event.

しかし実際には、メソッド setRecurrence() はこれらの引数を上下逆に受け取ります。

method setRecurrence(recurrence, startDate)

助けてくれたセルジュに感謝します。それは非常に重要でした! 残念ながら、評判がなければ 15 ポイントを与えることはできません :(

于 2013-02-18T14:31:59.220 に答える