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 normalen (einzelnen) Termins, bei dem das Feld recurrence
der Ressource event
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
Instanzen aufrufen
Um alle Instanzen einer bestimmten wiederkehrender Termin können Sie die Anfrage events.instances() verwenden.
Standardmäßig die events.list()
-Anfrage
gibt nur einzelne Termine, wiederkehrende Termine und
Ausnahmen:
Instanzen, die keine Ausnahmen sind, werden nicht zurückgegeben.
Wenn der Parameter singleEvents
true
festgelegt ist, werden alle einzelnen Instanzen im Ergebnis angezeigt, zugrunde liegende wiederkehrende 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 wäre singleEvent
true
. Weitere Informationen zu Zugriffssteuerungslisten-Regeln finden Sie unter Acl.
Einzelne Instanzen ähneln einzelnen Ereignissen. Im Gegensatz zu den wiederkehrenden
übergeordneten Terminen der Eltern
Für Instanzen ist das Feld recurrence
nicht festgelegt.
Die folgenden Ereignisfelder sind instanzspezifisch:
recurringEventId
– die ID des übergeordneten wiederkehrenden Ereignisses, zu dem diese Instanz gehörtoriginalStartTime
– Der Zeitpunkt, zu dem diese Instanz startet, entsprechend den Wiederholungsdaten im übergeordneten wiederkehrenden Ereignis. Dieser Wert kann sich von der tatsächlichenstart
-Zeit unterscheiden, wenn die Instanz neu geplant wurde. Sie identifiziert die Instanz innerhalb der Serie mit wiederkehrenden Terminen eindeutig, selbst 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 aktualisieren, indem sie eine autorisierte PUT-Anfrage mit aktualisierten Daten im Text an die Bearbeitungs-URL der Instanz senden. 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 antwortet der Server mit dem Statuscode HTTP 200 OK mit der aktualisierten Instanz. Das folgende Beispiel zeigt, wie Sie einen wiederkehrenden Termin absagen.
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
Um alle Einträge eines wiederkehrenden Termins an oder nach einer bestimmten (Ziel-)Instanz zu ändern, müssen Sie zwei separate API-Anfragen stellen. Durch diese Anfragen wird der ursprüngliche wiederkehrende Termin in zwei Teile aufgeteilt: der ursprüngliche Termin, bei dem die Instanzen ohne die Änderung beibehalten werden und der neue wiederkehrende Termin Instanzen, in denen die Änderung angewendet wird: <ph type="x-smartling-placeholder">- </ph>
events.update()
anrufen für den ursprünglichen wiederkehrenden Termin der zu aktualisierenden Instanzen zuschneiden. Legen Sie dazu die EinstellungUNTIL
-Komponente vonRRULE
, um auf die Startzeit des Ereignisses zu verweisen für die erste Zielinstanz. Alternativ können Sie die KomponenteCOUNT
UNTIL
.events.insert()
anrufen für einen neuen wiederkehrenden Termin mit den gleichen Daten wie der ursprüngliche Termin erstellen, außer dem die Sie vornehmen möchten. Der neue wiederkehrende Termin muss folgende Startzeit haben: die Zielinstanz.
In diesem Beispiel wird gezeigt, wie Sie ab 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... }, # ... ], }