Erstellen von Outlook-Ereignissen in einem freigegebenen oder delegierten Kalender

In Outlook können Kunden einen Kalender mit anderen Benutzern teilen und sie Ereignisse in diesem Kalender anzeigen, erstellen oder ändern lassen. Kund*innen können auch eine Person beauftragen, die in ihrem Namen Besprechungsanforderungen erhält oder beantwortet oder Elemente im Kalender erstellt oder ändert.

Programmgesteuert unterstützt Microsoft Graph das Lesen oder Schreiben von Ereignissen in Kalendern, die von anderen Benutzern geteilt wurden, sowie das Lesen der freigegebenen Kalender und das Aktualisieren des Kalendernamens für Freigabeempfänger. Die Unterstützung gilt auch für Kalender, die delegiert wurden. Der restliche Artikel führt Sie durch das Erstellen eines Besprechungstermins in einem freigegebenen oder delegierten Kalender. Informationen zum Abrufen von Ereignissen finden Sie unter Abrufen von Outlook-Ereignissen in einem freigegebenen oder delegierten Kalender.

In der nachstehenden exemplarischen Vorgehensweise wird das Beispielszenario verwendet, in dem Alex seinen primären Kalender in Outlook an Adele delegiert und die Standardeinstellung für Outlook-Postfächer beibehalten hat, mit der Besprechungsanfragen und Antworten nur an Stellvertretungen weitergeleitet werden. (Diese Einstellung entspricht der delegateMeetingMessageDeliveryOptions-Eigenschaft der mailboxSettings von Alex, die als Standardwert sendToDelegateOnly festgelegt ist.)

In der exemplarischen Vorgehensweise werden einige nachfolgende Schritte beschrieben:

  1. Adele ruft den Kalender ab, den Alex an sie delegiert hat.
  2. Adele sendet im Auftrag von Alex eine Besprechungseinladung an Christie und Megan.
  3. Christie empfängt die Besprechungsanfrage und überprüft das zugehörige Ereignis in ihrer Calenda.
  4. Christie reagiert mit Vorbehalt auf die Einladung.
  5. Adele empfängt Christies Antwortnachricht.
  6. Alex überprüft die Antworten der Teilnehmer im Rahmen des Ereignisses.

Wenn Alex seinen Kalender mit Adele geteilt hätte, statt ihn an sie zu delegieren:

  • Als Adele angemeldet, kann eine App den Kalender abrufen, den Alex für Adele freigegeben hat.
  • Die App kann die Anfragen und Antworten in den Schritten 2 und 4 verwenden, um sie in der gleichen Weise auf den freigegebenen Kalender wie auf den delegierten Kalender anzuwenden.
  • In Schritt 5 kann die App sich als Alex anstelle von Adele anmelden, um die Antwortnachricht von Christie zu erhalten.

Schritt 1: Adele ruft den delegierten Kalender ab.

Melden Sie sich als Adele an. Rufen Sie die Kalender ab, auf die sie Zugriff hat, und identifizieren Sie den Kalender, den Alex an sie delegiert hat, um ihn im nächsten Schritt zum Erstellen eines Ereignisses in diesem Kalender zu verwenden.

Microsoft Graph-Berechtigungen

Verwenden Sie die am wenigsten privilegierte delegierte Berechtigung, Calendars.Read.Shared. Weitere Informationen finden Sie unter der Berechtigung Calendars.Read.Shared in der Berechtigungsreferenz.

GET https://graph.microsoft.com/v1.0/me/calendars

Beachten Sie, dass eine erfolgreiche Antwort den Antwortcode "HTTP 200" sowie eine Kopie des von Alex delegierten Kalenders in Adeles Postfach beinhaltet, der die folgenden Eigenschaften aufweist:

  • canShare ist falsch, da Adele nur eine Stellvertretung und nicht die Besitzerin des Kalenders ist.
  • canEdit ist wahr, da Adele als Stellvertretung Schreibzugriff auf die nicht privaten Ereignisse im delegierten Kalender besitzt.
  • owner ist Alex Wilber, was anzeigt, dass es sich um einen Kalender von Alex handelt.
HTTP/1.1 200 OK
Content-type: application/json

{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users('d3b9214b-dd8b-441d-b7dc-c446c9fa0e69')/calendars",
    "value": [
        {
            "id": "AQMkADGkAAAJMjAAAAA==",
            "name": "Calendar",
            "color": "auto",
            "changeKey": "NDznl+Uh50WkanaCOKHkaQAAAAACXQ==",
            "canShare": true,
            "canViewPrivateItems": true,
            "canEdit": true,
            "owner": {
                "name": "Adele Vance",
                "address": "AdeleV@contoso.com"
            }
        },
        {
            "id": "AAMkADRpAABf0JlzAAA=",
            "name": "Alex Wilber",
            "color": "auto",
            "changeKey": "NDznl+Uh50WkanaCOKHkaQAAX8m4eQ==",
            "canShare": false,
            "canViewPrivateItems": false,
            "canEdit": true,
            "owner": {
                "name": "Alex Wilber",
                "address": "AlexW@contoso.com"
            }
        }
    ]
}

Hinweis

Wenn Sie sich als Adele anmelden, können Sie alternativ den delegierten Kalender direkt von Alex' Postfach erhalten, indem Sie Alex' Identität und die calendar Abkürzung angeben, wie in GET https://graph.microsoft.com/v1.0/users/AlexW@contoso.com/calendar. Die ID des zurückgegebenen Kalenders entspricht nur Alex' Postfach.

Schritt 2: Adele erstellt und sendet eine Einladung im Auftrag von Alex

Verwenden Sie, als Adele angemeldet, die Kalender-ID aus Schritt 1, um ein Ereignis im delegierten Kalender zu erstellen und es in Alex Auftrag an Christie und Megan zu senden.

Microsoft Graph-Berechtigungen

Verwenden Sie die am wenigsten privilegierte delegierte Berechtigung, Calendars.ReadWrite.Shared. Weitere Informationen finden Sie unter Calendars.ReadWrite.Shared-Berechtigung in der Berechtigungsreferenz.

POST https://graph.microsoft.com/v1.0/me/calendars/AAMkADRpAABf0JlzAAA=/events

Prefer: outlook.timezone="Pacific Standard Time"
Content-type: application/json

{
  "subject": "Christmas dinner",
  "body": {
    "contentType": "HTML",
    "content": "Happy holidays!"
  },
  "start": {
      "dateTime": "2019-12-25T18:00:00",
      "timeZone": "Pacific Standard Time"
  },
  "end": {
      "dateTime": "2019-12-25T22:00:00",
      "timeZone": "Pacific Standard Time"
  },
  "location":{
      "displayName":"Alex' home"
  },
  "attendees": [
    {
      "emailAddress": {
        "address":"meganb@contoso.com",
        "name": "Megan Bowen"
      },
      "type": "required"
    },
    {
      "emailAddress": {
        "address":"ChristieC@contoso.com",
        "name": "Christie Cline"
      },
      "type": "required"
    }
  ]
}
Snippet not available

In der SDK-Dokumentation finden Sie ausführliche Informationen zum Hinzufügen des SDK zu Ihrem Projekt und zum Erstellen einer authProvider -Instanz.

Beachten Sie, dass eine erfolgreiche Antwort den Antwortcode HTTP 200 und die folgenden Eigenschaften von eventMessage beinhaltet:

  • meetingMessageType gibt an, dass diese Nachricht meetingRequest ist.
  • sender ist Adele.
  • from ist Alex.
  • toRecipients enthält Megan und Christie.

Fügen Sie folgende event-Eigenschaften hinzu:

  • Die attendees beinhalten Alex, Megan und Christie.
  • organizer ist Alex.

Die Identität von Adele taucht nur in der sender-Eigenschaft der eventMessage auf, nicht im zugeordneten event.

HTTP/1.1 200 OK
Content-type: application/json

{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users('662b947c-d9a1-4064-926c-eba1316d4462')/messages(microsoft.graph.eventMessage/event())/$entity",
    "@odata.type": "#microsoft.graph.eventMessage",
    "@odata.etag": "W/\"CwAAABYAAADK82uJYVo4RrFV3ADVj3fyAABZ378h\"",
    "id": "AAMkADADVj3fyAABZ5hYdAAA=",
    "createdDateTime": "2019-12-21T04:59:03Z",
    "lastModifiedDateTime": "2019-12-21T04:59:04Z",
    "changeKey": "CwAAABYAAADK82uJYVo4RrFV3ADVj3fyAABZ378h",
    "categories": [],
    "receivedDateTime": "2019-12-21T04:59:03Z",
    "sentDateTime": "2019-12-21T04:59:01Z",
    "hasAttachments": false,
    "internetMessageId": "<DM6PR17MB3593711A1C0A098167F5A977A12C0@DM6PR17MB3593.namprd17.prod.outlook.com>",
    "subject": "Christmas dinner",
    "bodyPreview": "Happy holidays!",
    "importance": "normal",
    "parentFolderId": "AQMkADIAAAIBDAAAAA==",
    "conversationId": "AAQkADNqQlzYAM8jQM=",
    "conversationIndex": "AdW3u1xx5S7TYrbluE2pCXNgAzyNAw==",
    "isDeliveryReceiptRequested": null,
    "isReadReceiptRequested": false,
    "isRead": true,
    "isDraft": false,
    "webLink": "https://outlook.office365.com/owa/?ItemID=AAMkADADVj3fyAABZ5hYdAAA%3D&exvsurl=1&viewmodel=ReadMessageItem",
    "inferenceClassification": "focused",
    "meetingMessageType": "meetingRequest",
    "body": {
        "contentType": "html",
        "content": "<html>\r\n<head>\r\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\r\n<meta content=\"text/html; charset=us-ascii\">\r\n</head>\r\n<body>\r\nHappy holidays!\r\n</body>\r\n</html>\r\n"
    },
    "sender": {
        "emailAddress": {
            "name": "Adele Vance",
            "address": "AdeleV@contoso.com"
        }
    },
    "from": {
        "emailAddress": {
            "name": "Alex Wilber",
            "address": "AlexW@contoso.com"
        }
    },
    "toRecipients": [
        {
            "emailAddress": {
                "name": "Megan Bowen",
                "address": "MeganB@contoso.com"
            }
        },
        {
            "emailAddress": {
                "name": "Christie Cline",
                "address": "ChristieC@contoso.com"
            }
        }
    ],
    "ccRecipients": [],
    "bccRecipients": [],
    "replyTo": [],
    "flag": {
        "flagStatus": "notFlagged"
    },
    "event": {
        "@odata.etag": "W/\"yvNriWFaOEaxVdwA1Y938gAAX+T7Jg==\"",
        "id": "AAMkADADVj3fyAABZ5ieyAAA=",
        "createdDateTime": "2019-12-21T04:59:03.4336242Z",
        "lastModifiedDateTime": "2019-12-27T01:38:32.3766961Z",
        "changeKey": "yvNriWFaOEaxVdwA1Y938gAAX+T7Jg==",
        "categories": [],
        "originalStartTimeZone": "Pacific Standard Time",
        "originalEndTimeZone": "Pacific Standard Time",
        "iCalUId": "040000008200FEFE0BA532444B5FD89BDE22BA103",
        "reminderMinutesBeforeStart": 15,
        "isReminderOn": true,
        "hasAttachments": false,
        "subject": "Christmas dinner",
        "bodyPreview": "Happy holidays!",
        "importance": "normal",
        "sensitivity": "normal",
        "isAllDay": false,
        "isCancelled": false,
        "isOrganizer": false,
        "responseRequested": true,
        "seriesMasterId": null,
        "showAs": "tentative",
        "type": "singleInstance",
        "webLink": "https://outlook.office365.com/owa/?itemid=AAMkADADVj3fyAABZ5ieyAAA%3D&exvsurl=1&path=/calendar/item",
        "onlineMeetingUrl": null,
        "recurrence": null,
        "responseStatus": {
            "response": "none",
            "time": "2019-12-21T05:16:48.8931825Z"
        },
        "body": {
            "contentType": "html",
            "content": "<html>\r\n<head>\r\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\r\n<meta content=\"text/html; charset=us-ascii\">\r\n</head>\r\n<body>\r\nHappy holidays!\r\n</body>\r\n</html>\r\n"
        },
        "start": {
            "dateTime": "2019-12-26T02:00:00.0000000",
            "timeZone": "UTC"
        },
        "end": {
            "dateTime": "2019-12-26T06:00:00.0000000",
            "timeZone": "UTC"
        },
        "location": {
            "displayName": "Alex' home",
            "locationType": "default",
            "uniqueId": "Alex' home",
            "uniqueIdType": "private"
        },
        "locations": [
            {
                "displayName": "Alex' home",
                "locationType": "default",
                "uniqueId": "1396aaf3-e344-4567-a4e3-797557ec24c8",
                "uniqueIdType": "locationStore"
            }
        ],
        "attendees": [
            {
                "type": "required",
                "status": {
                    "response": "none",
                    "time": "0001-01-01T00:00:00Z"
                },
                "emailAddress": {
                    "name": "Alex Wilber",
                    "address": "AlexW@contoso.com"
                }
            },
            {
                "type": "required",
                "status": {
                    "response": "none",
                    "time": "0001-01-01T00:00:00Z"
                },
                "emailAddress": {
                    "name": "Megan Bowen",
                    "address": "MeganB@contoso.com"
                }
            },
            {
                "type": "required",
                "status": {
                    "response": "none",
                    "time": "0001-01-01T00:00:00Z"
                },
                "emailAddress": {
                    "name": "Christie Cline",
                    "address": "ChristieC@contoso.com"
                }
            }
        ],
        "organizer": {
            "emailAddress": {
                "name": "Alex Wilber",
                "address": "AlexW@contoso.com"
            }
        }
    }
}

Schritt 4: Christie reagiert auf die Besprechungsanfrage

Antworten Sie, angemeldet als Christie, auf das Ereignis mit Vorbehalt, und schließen Sie eine Antwortnachricht in die Antwort ein:

Microsoft Graph-Berechtigungen

Verwenden Sie die am wenigsten privilegierte delegierte Berechtigung, Calendars.ReadWrite.Shared. Weitere Informationen finden Sie unter Calendars.ReadWrite.Shared-Berechtigung in der Berechtigungsreferenz.

POST https://graph.microsoft.com/v1.0/me/events/AAMkADADVj3fyAABZ5ieyAAA=/tentativelyAccept
Content-type: application/json

{
  "comment": "I will probably be able to make it.",
  "sendResponse": true
}

Eine erfolgreiche Antwort gibt "HTTP 202 Accepted" zurück.

HTTP/1.1 202 Accepted

Schritt 5: Adele empfängt die Antwortnachricht.

Da Adele eine Stellvertretung des primären Kalenders von Alex ist, empfängt Adele alle Besprechungsantworten für diesen Kalender im Auftrag von Alex.

Rufen Sie, angemeldet als Adele, die eventMessage ab, die die Antwort von Christie aus Schritt 4 darstellt.

Microsoft Graph-Berechtigungen

Verwenden Sie die am wenigsten privilegierte delegierte Berechtigung, Mail.Read.Shared. Weitere Informationen finden Sie unter Mail.Read.Shared-Berechtigung in der Berechtigungsreferenz.

GET https://graph.microsoft.com/v1.0/me/messages/AAMkADI4oeRpAABf0HJUAAA=

Beachten Sie, dass eine erfolgreiche Antwort den Antwortcode HTTP 200 und die folgenden Eigenschaften von eventMessage beinhaltet:

  • Der meetingMessageType ist meetingTenativelyAccepted.
  • from lautet Christie.
  • toRecipients enthält nur Adele, nicht aber den Kalenderbesitzer Alex. Dies hat den Grund, dass Alex die Standardeinstellung übernommen hat, in der alle Besprechungsantworten nur an Stellvertretungen gesendet werden.
HTTP/1.1 200 OK
Content-type: application/json

{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users('d3b9214b-dd8b-441d-b7dc-c446c9fa0e69')/messages/$entity",
    "@odata.type": "#microsoft.graph.eventMessage",
    "@odata.etag": "W/\"DAAAABYAAAA0POeX5SHnRaRqdoI4oeRpAABfybkT\"",
    "id": "AAMkADI4oeRpAABf0HJUAAA=",
    "createdDateTime": "2019-12-21T05:16:55Z",
    "lastModifiedDateTime": "2019-12-21T05:16:57Z",
    "changeKey": "DAAAABYAAAA0POeX5SHnRaRqdoI4oeRpAABfybkT",
    "categories": [],
    "receivedDateTime": "2019-12-21T05:16:56Z",
    "sentDateTime": "2019-12-21T05:16:49Z",
    "hasAttachments": false,
    "internetMessageId": "<86880ccb8ec64184996e46eaddaed279@DM6PR17MB3593.namprd17.prod.outlook.com>",
    "subject": "Tentative: Christmas dinner",
    "bodyPreview": "I will probably be able to make it.",
    "importance": "normal",
    "parentFolderId": "AQMkAD5GkAAAIBDAAAAA==",
    "conversationId": "AAQkADK25bhNqQlzYAM8jQM=",
    "conversationIndex": "AdW3u1xx5S7TYrbluE2pCXNgAzyNAwAAoBoZ",
    "isDeliveryReceiptRequested": null,
    "isReadReceiptRequested": false,
    "isRead": false,
    "isDraft": false,
    "webLink": "https://outlook.office365.com/owa/?ItemID=AAMkADI4oeRpAABf0HJUAAA%3D&exvsurl=1&viewmodel=ReadMessageItem",
    "inferenceClassification": "focused",
    "meetingMessageType": "meetingTenativelyAccepted",
    "body": {
        "contentType": "html",
        "content": "<html>\r\n<head>\r\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\r\n<meta content=\"text/html; charset=us-ascii\">\r\n</head>\r\n<body>\r\nI will probably be able to make it.\r\n</body>\r\n</html>\r\n"
    },
    "sender": {
        "emailAddress": {
            "name": "Christie Cline",
            "address": "ChristieC@contoso.com"
        }
    },
    "from": {
        "emailAddress": {
            "name": "Christie Cline",
            "address": "ChristieC@contoso.com"
        }
    },
    "toRecipients": [
        {
            "emailAddress": {
                "name": "Adele Vance",
                "address": "AdeleV@contoso.com"
            }
        }
    ],
    "ccRecipients": [],
    "bccRecipients": [],
    "replyTo": [],
    "flag": {
        "flagStatus": "notFlagged"
    }
}

Schritt 6: Alex greift im Rahmen des Ereignisses auf Antworten zu

Da Alex die Standardeinstellung beibehalten hat, Outlook alle Besprechungsanfragen und -antworten nur an Stellvertretungen zu senden, empfängt Alex Christies Antwort aus Schritt 4 nicht. Jedoch kann er die Antwort mithilfe des Ereignisses in seinem primären Kalender abrufen.

Rufen Sie, als Alex angemeldet, das Ereignis, das Adele in Schritt 2 erstellt hat, und die Antworten aus der attendees-Eigenschaft ab.

Microsoft Graph-Berechtigungen

Verwenden Sie die am wenigsten privilegierte delegierte Berechtigung, Calendars.Read. Weitere Informationen finden Sie unter Calendars.Read-Berechtigung in der Berechtigungsreferenz.

GET https://graph.microsoft.com/v1.0/me/calendar/events/AAMkADJXJGu0AABf02qwAAA=

Beachten Sie, dass eine erfolgreiche Antwort den Antwortcode HTTP 200 und die folgenden Eigenschaften von event beinhaltet:

  • isOrganizer ist wahr.
  • Die attendees beinhalten nur Megan und Christie.
  • Die status-Eigenschaft jeder Instanz von attendee weist auf eine eventuelle Antwort vom Teilnehmer hin:
    • Megans Antwort ist none.
    • Christies Antwort ist tentativelyAccepted.
  • organizer ist Alex.
  • Keine Eigenschaft im zurückgegebenen Ereignis gibt die Stellvertretung Adele an.
HTTP/1.1 200 OK
Content-type: application/json

{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users('64339082-ed84-4b0b-b4ab-004ae54f3747')/calendars('AQMkADAw7QAAAJfygAAAA%3D%3D')/events/$entity",
    "@odata.etag": "W/\"NEXywgsVrkeNsFsyVyRrtAAAX8xuhA==\"",
    "id": "AAMkADJXJGu0AABf02qwAAA=",
    "createdDateTime": "2019-12-21T04:59:01.4435895Z",
    "lastModifiedDateTime": "2019-12-21T05:16:54.689345Z",
    "changeKey": "NEXywgsVrkeNsFsyVyRrtAAAX8xuhA==",
    "categories": [],
    "originalStartTimeZone": "Pacific Standard Time",
    "originalEndTimeZone": "Pacific Standard Time",
    "iCalUId": "040000008200FEFE0BA532444B5FD89BDE22BA103",
    "reminderMinutesBeforeStart": 15,
    "isReminderOn": true,
    "hasAttachments": false,
    "subject": "Christmas dinner",
    "bodyPreview": "Happy holidays!",
    "importance": "normal",
    "sensitivity": "normal",
    "isAllDay": false,
    "isCancelled": false,
    "isOrganizer": true,
    "responseRequested": true,
    "seriesMasterId": null,
    "showAs": "busy",
    "type": "singleInstance",
    "webLink": "https://outlook.office365.com/owa/?itemid=AAMkADJXJGu0AABf02qwAAA%3D&exvsurl=1&path=/calendar/item",
    "onlineMeetingUrl": null,
    "recurrence": null,
    "responseStatus": {
        "response": "organizer",
        "time": "0001-01-01T00:00:00Z"
    },
    "body": {
        "contentType": "html",
        "content": "<html>\r\n<head>\r\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\r\n<meta content=\"text/html; charset=us-ascii\">\r\n</head>\r\n<body>\r\nHappy holidays!\r\n</body>\r\n</html>\r\n"
    },
    "start": {
        "dateTime": "2019-12-26T02:00:00.0000000",
        "timeZone": "UTC"
    },
    "end": {
        "dateTime": "2019-12-26T06:00:00.0000000",
        "timeZone": "UTC"
    },
    "location": {
        "displayName": "Alex' home",
        "locationType": "default",
        "uniqueId": "Alex' home",
        "uniqueIdType": "private"
    },
    "locations": [
        {
            "displayName": "Alex' home",
            "locationType": "default",
            "uniqueId": "Alex' home",
            "uniqueIdType": "private"
        }
    ],
    "attendees": [
        {
            "type": "required",
            "status": {
                "response": "none",
                "time": "0001-01-01T00:00:00Z"
            },
            "emailAddress": {
                "name": "Megan Bowen",
                "address": "MeganB@contoso.com"
            }
        },
        {
            "type": "required",
            "status": {
                "response": "tentativelyAccepted",
                "time": "2019-12-21T05:16:48.8931825Z"
            },
            "emailAddress": {
                "name": "Christie Cline",
                "address": "ChristieC@contoso.com"
            }
        }
    ],
    "organizer": {
        "emailAddress": {
            "name": "Alex Wilber",
            "address": "AlexW@contoso.com"
        }
    }
}