2016-03-20 9 views
1

月曜日の午前9時に始まり午前11時に終了する定期イベントを作成するとします。このイベントは毎日3日間繰り返されます。 他のイベントは変えずに火曜日にイベントの開始時刻を変更するには(再発を使用してイベントを作成した後に)したいですが、どうすればいいですか?私は簡単に高度なカレンダーのAPIを使用して、このeventSeriesのための繰り返しルールを取得することができますイベントシリーズの特定のインスタンスを変更する方法

、それはこのルールはすべてのイベントを変更するために自由に変更することができます(と私はまた、更新することができ

RRULE:FREQ=DAILY;COUNT=3 

のようなものを返します。 patchを使用していますが、単一のイベントだけではありません API tryout私はこのイベントシリーズのすべてのインスタンスを取得しようとしましたが、実際にはすべての開始時刻と終了時刻を見ることができます(*下記参照)。 Google AppsスクリプトのカレンダーAPI

特定のインスタンスを変更する方法、つまり変更された値を書き戻す方法が見つかりませんでした。

私はこれをカレンダーのWeb UIで手動で行うことができるので、スクリプトを使用してこれを行うことができるはずですが、実際にはわかりません。

私はイベントのパラメータを取得するために使用するコードはかなり単純です:ここでは

... 
    for(var n = 1 ; n < data.length ; n++){ 
    if(data[n][9] == ''){continue}; 
    var advancedID = data[n][9].substring(0,data[n][9].indexOf('@')); 
    Logger.log(advancedID+'\n'); 
    ChangeEventRecurrence(calID,advancedID); 
    } 
} 

function ChangeEventRecurrence(calID,advancedID){ 
    var event = Calendar.Events.get(calID, advancedID); 
    Logger.log(event.recurrence+'\n'+JSON.stringify(event)); 
    // here I should be able to get all the instances of this eventSeries and change them if needed 
} 

は、私はAPIのトライアウトを使用して取得するインスタンスのキャプチャです:CalendarApp

enter image description here

+0

アプリスクリプトでカレンダーAPIを使用して、イベントシリーズを1つのイベントとして取得し、詳細を更新することができます。または、イベントの詳細を更新するパッチを使用してください。この[あなたの質問](http://stackoverflow.com/questions/30724417/change-exisiting-calendar-event-series-date)では、Calendar APIでEvents.getとEvents.updateを使用できることが示されます。カレンダーAPiを追加するにはリソース>アドバンスGoogleサービス> Googleカレンダーを有効にしてください –

+0

あなたのコメントをお寄せいただきありがとうございます、私が試みたものはすべて、単一の出来事ではなく、すべてのイベントを変更しています...私はイベント(RFC339日付文字列のコンパクトなフォームを含む特定のIDを持っているが、ここでは見てきましたが(https://code.google.com/p/google-apps-script-issues/issues/detail?id=5051)それを使ってイベントを得ることはできませんでした。どんな手掛かり ? –

答えて

0

、単一のイベントを探して結果をループする日付範囲を指定するだけで.setTime()

var cal = CalendarApp.getCalendarsByName('<YOUR_CAL>')[0]; 
var events = cal.getEvents(new Date("April 5, 2016 08:00:00 AM"), new Date("April 5, 2016 11:30:00 AM")); 
events.forEach(function(e) { 
    //var e = events[0]; 
    //if (e.getTitle() === 'Your Title') 
    e.setTime(new Date("April 5, 2016 11:00:00 AM"), new Date("April 5, 2016 01:00:00 PM")); 
}); 

あなたの「特定のインスタンス」が単一のイベントまたは火曜日のイベントだけを意味するのかどうか、またはこのケースに対してアドバンストカレンダーAPIを使用する理由があるかどうかはわかりません。

+0

あなたの答えをありがとうが、残念ながらこのソリューション(私はすでに試したことがありますが、私は言及すべきです)は再発を破っています。変更されたイベントはもうイベントシリーズの一部ではありません...副作用は、これらのイベント(場所、要約、または出席者)の詳細を変更する必要がある場合は、発生ごとに個別に行う必要があります(少なくとも1あなたは変更しました)イベント組織の担当者にとっては非常に不快です。 –

+0

これらの詳細は、すべてのイベントで変更する必要がありますか?私はあるイベントの時刻を変更し、 'cal.getEventSeriesById()。setDescription()'ですべての詳細を変更しました。私はイベントシリーズからの拘束力のない行動を見ませんでした。 –

+1

うわー、あなたは本当に正しいです...私は私が何かを逃したと思う...私には恥ずべき;-)あなたのための500のポイント!どうも –

関連する問題