In diesem Dokument wird beschrieben, wie Sie mit wiederkehrenden Ereignissen und den zugehörigen Instanzen arbeiten.
Wiederkehrende Termine erstellen
Das Erstellen wiederkehrender Termine ähnelt dem Erstellen eines regulären (einzelnen) Termins, bei dem das Feld recurrence
der event
-Ressource festgelegt ist.
Protokoll
POST /calendar/v3/calendars/primary/events ... { "summary": "Appointment", "location": "Somewhere", "start": { "dateTime": "2011-06-03T10:00:00.000-07:00", "timeZone": "America/Los_Angeles" }, "end": { "dateTime": "2011-06-03T10:25:00.000-07:00", "timeZone": "America/Los_Angeles" }, "recurrence": [ "RRULE:FREQ=WEEKLY;UNTIL=20110701T170000Z", ], "attendees": [ { "email": "attendeeEmail", # Other attendee's data... }, # ... ], }
Java
Event event = new Event(); event.setSummary("Appointment"); event.setLocation("Somewhere"); ArrayList<EventAttendee> attendees = new ArrayList<EventAttendee>(); attendees.add(new EventAttendee().setEmail("attendeeEmail")); // ... event.setAttendees(attendees); DateTime start = DateTime.parseRfc3339("2011-06-03T10:00:00.000-07:00"); DateTime end = DateTime.parseRfc3339("2011-06-03T10:25:00.000-07:00"); event.setStart(new EventDateTime().setDateTime(start).setTimeZone("America/Los_Angeles")); event.setEnd(new EventDateTime().setDateTime(end).setTimeZone("America/Los_Angeles")); event.setRecurrence(Arrays.asList("RRULE:FREQ=WEEKLY;UNTIL=20110701T170000Z")); Event recurringEvent = service.events().insert("primary", event).execute(); System.out.println(createdEvent.getId());
.NET
Event event = new Event() { Summary = "Appointment", Location = "Somewhere", Start = new EventDateTime() { DateTime = new DateTime("2011-06-03T10:00:00.000:-07:00") TimeZone = "America/Los_Angeles" }, End = new EventDateTime() { DateTime = new DateTime("2011-06-03T10:25:00.000:-07:00") TimeZone = "America/Los_Angeles" }, Recurrence = new String[] { "RRULE:FREQ=WEEKLY;UNTIL=20110701T170000Z" }, Attendees = new List<EventAttendee>() { new EventAttendee() { Email: "attendeeEmail" }, // ... } }; Event recurringEvent = service.Events.Insert(event, "primary").Fetch(); Console.WriteLine(recurringEvent.Id);
Python
event = { 'summary': 'Appointment', 'location': 'Somewhere', 'start': { 'dateTime': '2011-06-03T10:00:00.000-07:00', 'timeZone': 'America/Los_Angeles' }, 'end': { 'dateTime': '2011-06-03T10:25:00.000-07:00', 'timeZone': 'America/Los_Angeles' }, 'recurrence': [ 'RRULE:FREQ=WEEKLY;UNTIL=20110701T170000Z', ], 'attendees': [ { 'email': 'attendeeEmail', # Other attendee's data... }, # ... ], } recurring_event = service.events().insert(calendarId='primary', body=event).execute() print recurring_event['id']
PHP
$event = new Google_Service_Calendar_Event(); $event->setSummary('Appointment'); $event->setLocation('Somewhere'); $start = new Google_Service_Calendar_EventDateTime(); $start->setDateTime('2011-06-03T10:00:00.000-07:00'); $start->setTimeZone('America/Los_Angeles'); $event->setStart($start); $end = new Google_Service_Calendar_EventDateTime(); $end->setDateTime('2011-06-03T10:25:00.000-07:00'); $end->setTimeZone('America/Los_Angeles'); $event->setEnd($end); $event->setRecurrence(array('RRULE:FREQ=WEEKLY;UNTIL=20110701T170000Z')); $attendee1 = new Google_Service_Calendar_EventAttendee(); $attendee1->setEmail('attendeeEmail'); // ... $attendees = array($attendee1, // ... ); $event->attendees = $attendees; $recurringEvent = $service->events->insert('primary', $event); echo $recurringEvent->getId();
Ruby
event = Google::Apis::CalendarV3::Event.new( summary: 'Appointment', location: 'Somewhere', start: { date_time: '2011-06-03T10:00:00.000-07:00', time_zone: 'America/Los_Angeles' }, end: { date_time: '2011-06-03T10:25:00.000-07:00', time_zone: 'America/Los_Angeles' }, recurrence: ['RRULE:FREQ=WEEKLY;UNTIL=20110701T170000Z'] attendees: [ { email: 'attendeeEmail' }, #... ] ) response = client.insert_event('primary', event) print response.id
Zugriffsinstanzen
Mit der Anfrage events.instances() können Sie alle Instanzen eines bestimmten wiederkehrenden Ereignisses anzeigen lassen.
Die events.list()
-Anfrage gibt standardmäßig nur einzelne Ereignisse, wiederkehrende Ereignisse und Ausnahmen zurück. Instanzen, die keine Ausnahmen sind, werden nicht zurückgegeben.
Wenn der Parameter singleEvents
auf true
gesetzt ist, werden alle einzelnen Instanzen im Ergebnis angezeigt, die zugrunde liegenden wiederkehrenden Ereignisse jedoch nicht. Wenn ein Nutzer mit Berechtigungen für den Verfügbar/Beschäftigt-Status events.list()
abfragt, verhält es sich so, als ob singleEvent
den Wert true
hat. Weitere Informationen zu Regeln für Access Control Lists finden Sie unter Acl.
Einzelne Instanzen ähneln einzelnen Ereignissen. Im Gegensatz zu ihren übergeordneten wiederkehrenden Terminen ist bei Instanzen das Feld recurrence
nicht festgelegt.
Die folgenden Ereignisfelder sind instanzspezifisch:
recurringEventId
– ID des übergeordneten wiederkehrenden Ereignisses, zu dem diese Instanz gehörtoriginalStartTime
: Die Zeit, zu der diese Instanz startet, gemäß den Wiederholungsdaten im übergeordneten wiederkehrenden Termin. Dies kann von der tatsächlichenstart
-Zeit abweichen, wenn die Instanz neu geplant wurde. Sie identifiziert die Instanz innerhalb der wiederkehrenden Terminserie eindeutig, auch wenn die Instanz verschoben wurde.
Instanzen ändern oder löschen
Zum Ändern einer einzelnen Instanz (Erstellen einer Ausnahme) müssen Clientanwendungen zuerst die Instanz abrufen und dann durch Senden einer autorisierten PUT-Anfrage an die Instanzbearbeitungs-URL mit aktualisierten Daten im Text aktualisieren. Die URL hat das folgende Format:
https://www.googleapis.com/calendar/v3/calendars/calendarId/events/instanceId
Verwenden Sie geeignete Werte anstelle von calendarId und instanceId.
Bei Erfolg gibt der Server mit der aktualisierten Instanz den Statuscode „HTTP 200 OK“ zurück. Das folgende Beispiel zeigt, wie Sie einen wiederkehrenden Termin absagen können.
Protokoll
PUT /calendar/v3/calendars/primary/events/instanceId ... { "kind": "calendar#event", "id": "instanceId", "etag": "instanceEtag", "status": "cancelled", "htmlLink": "https://www.google.com/calendar/event?eid=instanceEid", "created": "2011-05-23T22:27:01.000Z", "updated": "2011-05-23T22:27:01.000Z", "summary": "Recurring event", "location": "Somewhere", "creator": { "email": "userEmail" }, "recurringEventId": "recurringEventId", "originalStartTime": "2011-06-03T10:00:00.000-07:00", "organizer": { "email": "userEmail", "displayName": "userDisplayName" }, "start": { "dateTime": "2011-06-03T10:00:00.000-07:00", "timeZone": "America/Los_Angeles" }, "end": { "dateTime": "2011-06-03T10:25:00.000-07:00", "timeZone": "America/Los_Angeles" }, "iCalUID": "eventUID", "sequence": 0, "attendees": [ { "email": "attendeeEmail", "displayName": "attendeeDisplayName", "responseStatus": "needsAction" }, # ... { "email": "userEmail", "displayName": "userDisplayName", "responseStatus": "accepted", "organizer": true, "self": true } ], "guestsCanInviteOthers": false, "guestsCanSeeOtherGuests": false, "reminders": { "useDefault": true } }
Java
// First retrieve the instances from the API. Events instances = service.events().instances("primary", "recurringEventId").execute(); // Select the instance to cancel. Event instance = instances.getItems().get(0); instance.setStatus("cancelled"); Event updatedInstance = service.events().update("primary", instance.getId(), instance).execute(); // Print the updated date. System.out.println(updatedInstance.getUpdated());
.NET
// First retrieve the instances from the API. Events instances = service.Events.Instances("primary", "recurringEventId").Fetch(); // Select the instance to cancel. Event instance = instances.Items[0]; instance.Status = "cancelled"; Event updatedInstance = service.Events.Update(instance, "primary", instance.Id).Fetch(); // Print the updated date. Console.WriteLine(updatedInstance.Updated);
Python
# First retrieve the instances from the API. instances = service.events().instances(calendarId='primary', eventId='recurringEventId').execute() # Select the instance to cancel. instance = instances['items'][0] instance['status'] = 'cancelled' updated_instance = service.events().update(calendarId='primary', eventId=instance['id'], body=instance).execute() # Print the updated date. print updated_instance['updated']
PHP
$events = $service->events->instances("primary", "eventId"); // Select the instance to cancel. $instance = $events->getItems()[0]; $instance->setStatus('cancelled'); $updatedInstance = $service->events->update('primary', $instance->getId(), $instance); // Print the updated date. echo $updatedInstance->getUpdated();
Ruby
# First retrieve the instances from the API. instances = client.list_event_instances('primary', 'recurringEventId') # Select the instance to cancel. instance = instances.items[0] instance.status = 'cancelled' response = client.update_event('primary', instance.id, instance) print response.updated
Alle folgenden Instanzen ändern
Wenn Sie alle Instanzen eines wiederkehrenden Ereignisses auf oder nach einer bestimmten (Ziel-)Instanz ändern möchten, müssen Sie zwei separate API-Anfragen senden. Durch diese Anfragen wird das ursprüngliche wiederkehrende Ereignis in zwei Ereignisse aufgeteilt: das ursprüngliche, bei dem die Instanzen ohne die Änderung beibehalten werden, und das neue wiederkehrende Ereignis hat Instanzen, auf die die Änderung angewendet wird:- Rufen Sie
events.update()
auf, um das ursprüngliche wiederkehrende Ereignis der zu aktualisierenden Instanzen zu kürzen. Dazu setzen Sie die KomponenteUNTIL
derRRULE
so, dass sie vor der Startzeit der ersten Zielinstanz verweist. Alternativ können Sie die KomponenteCOUNT
anstelle vonUNTIL
festlegen. - Rufen Sie
events.insert()
auf, um einen neuen wiederkehrenden Termin mit denselben Daten wie das Original zu erstellen – mit Ausnahme der Änderung, die Sie vornehmen möchten. Der neue wiederkehrende Termin muss die Startzeit der Zielinstanz haben.
In diesem Beispiel wird gezeigt, wie Sie den Ort in „Ein anderer Ort“ ändern, beginnend mit der dritten Instanz des wiederkehrenden Termins aus den vorherigen Beispielen.
Protokoll
# Updating the original recurring event to trim the instance list: PUT /calendar/v3/calendars/primary/events/recurringEventId ... { "summary": "Appointment", "location": "Somewhere", "start": { "dateTime": "2011-06-03T10:00:00.000-07:00", "timeZone": "America/Los_Angeles" }, "end": { "dateTime": "2011-06-03T10:25:00.000-07:00", "timeZone": "America/Los_Angeles" }, "recurrence": [ "RRULE:FREQ=WEEKLY;UNTIL=20110617T065959Z", ], "attendees": [ { "email": "attendeeEmail", # Other attendee's data... }, # ... ], } # Creating a new recurring event with the change applied: POST /calendar/v3/calendars/primary/events ... { "summary": "Appointment", "location": "Somewhere else", "start": { "dateTime": "2011-06-17T10:00:00.000-07:00", "timeZone": "America/Los_Angeles" }, "end": { "dateTime": "2011-06-17T10:25:00.000-07:00", "timeZone": "America/Los_Angeles" }, "recurrence": [ "RRULE:FREQ=WEEKLY;UNTIL=20110617T065959Z", ], "attendees": [ { "email": "attendeeEmail", # Other attendee's data... }, # ... ], }