In diesem Dokument wird beschrieben, wie Sie mit wiederkehrenden Terminen und ihren Instanzen arbeiten.
Wiederkehrende Termine erstellen
Das Erstellen wiederkehrender Termine ähnelt dem Erstellen
eines regulären (einmaligen) Termins, wobei 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
Auf Instanzen zugreifen
Verwenden Sie die events.instances
Methode, um alle Instanzen
eines bestimmten wiederkehrenden Termins aufzurufen.
Standardmäßig gibt die events.list
Methode einzelne Termine, wiederkehrende Termine und
Ausnahmen zurück.
Instanzen, die keine Ausnahmen sind, werden nicht zurückgegeben.
Wenn der singleEvents
Parameter auf true gesetzt ist, werden alle einzelnen Instanzen im Ergebnis angezeigt,
die zugrunde liegenden wiederkehrenden Termine jedoch nicht. Wenn ein Nutzer mit Berechtigungen für „Verfügbarkeit anzeigen“ events.list abfragt, verhält sich die Methode so, als wäre singleEvents auf true gesetzt. Weitere Informationen zu Regeln für Zugriffssteuerungslisten finden Sie unter ACL.
Einzelne Instanzen ähneln einzelnen Terminen. Im Gegensatz zu ihren übergeordneten wiederkehrenden Terminen,
ist für Instanzen das recurrence Feld nicht festgelegt.
Die folgenden Ereignisfelder sind spezifisch für Instanzen:
recurringEventId– die ID des übergeordneten wiederkehrenden Termins, zu dem diese Instanz gehörtoriginalStartTime– die Startzeit dieser Instanz gemäß den Wiederholungsdaten im übergeordneten wiederkehrenden Termin. Diese kann von der tatsächlichenstartZeit abweichen, wenn die Instanz verschoben wurde. Sie identifiziert die Instanz eindeutig innerhalb der wiederkehrenden Terminserie, auch wenn die Instanz verschoben wurde.
Instanzen ändern oder löschen
Wenn Sie eine einzelne Instanz ändern (eine Ausnahme erstellen) möchten, müssen Clientanwendungen zuerst die Instanz abrufen und sie dann aktualisieren, indem sie eine autorisierte PUT-Anfrage mit den aktualisierten Daten im Textkörper an die URL zur Bearbeitung der Instanz senden. Die URL hat folgendes Format:
https://www.googleapis.com/calendar/v3/calendars/calendarId/events/instanceId
Verwenden Sie anstelle von calendarId und instanceId die entsprechenden Werte.
Bei Erfolg antwortet der Server mit dem HTTP-Statuscode 200 OK und der aktualisierten Instanz. Im folgenden Beispiel wird gezeigt, wie Sie eine Instanz eines wiederkehrenden Termins stornieren.
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 nachfolgenden Instanzen ändern
Wenn Sie alle Instanzen eines wiederkehrenden Termins ab einer bestimmten (Ziel-)Instanz ändern möchten, stellen Sie zwei separate API-Anfragen. Durch diese Anfragen wird der ursprüngliche wiederkehrende Termin in zwei Termine aufgeteilt: den ursprünglichen Termin, bei dem die Instanzen ohne die Änderung beibehalten werden, und den neuen wiederkehrenden Termin mit Instanzen, auf die die Änderung angewendet wird:
- Rufen Sie
events.updateauf, um die Instanzen, die aktualisiert werden sollen, aus dem ursprünglichen wiederkehrenden Termin zu entfernen. Setzen Sie dazu die KomponenteUNTILderRRULEso, dass sie vor der Startzeit der ersten Zielinstanz liegt. Alternativ können Sie anstelle vonUNTILdie KomponenteCOUNTfestlegen. - Rufen Sie
events.insertauf, um einen neuen wiederkehrenden Termin mit denselben Daten wie der ursprüngliche Termin zu erstellen, mit Ausnahme der Änderung, die Sie vornehmen. Der neue wiederkehrende Termin muss die Startzeit der Zielinstanz haben.
In diesem Beispiel wird gezeigt, wie Sie den Ort ab der dritten Instanz des wiederkehrenden Termins aus den vorherigen Beispielen in „Anderswo“ ändern.
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", ], "attendees": [ { "email": "attendeeEmail", # Other attendee's data... }, # ... ], }