Zugriff auf einen Kalender als Delegat mithilfe der EWS in Exchange
Erfahren Sie, wie Sie mithilfe der verwalteten EWS-API oder EWS in Exchange auf einen Kalender als Stellvertretung zugreifen.
Sie können die verwaltete EWS-API oder EWS verwenden, um einem Benutzerdelegat Zugriff auf den Kalenderordner eines Postfachbesitzers zu gewähren. Die Stellvertretung kann dann Besprechungsanfragen im Namen des Postfachbesitzers erstellen, Termine erstellen, auf Besprechungsanfragen antworten und, je nach seinen Berechtigungen, Besprechungen aus dem Kalenderordner des Postfachbesitzers abrufen, aktualisieren und löschen.
Als Stellvertretung verwenden Sie die gleichen Methoden und Vorgänge, um auf den Kalenderordner eines Postfachbesitzers zuzugreifen, den Sie für den Zugriff auf Ihren eigenen Kalenderordner verwenden. Der Hauptunterschied besteht darin, dass Sie expliziten Zugriff verwenden müssen, um ein Kalenderelement oder einen Kalenderunterordner zu suchen oder zu erstellen. Nachdem Sie die Element-ID oder Ordner-ID identifiziert haben, können Sie impliziten Zugriff verwenden, um das Element abzurufen, zu aktualisieren oder zu löschen.
Tabelle 1. Verwaltete EWS-API-Methoden und EWS-Vorgänge für den Zugriff auf einen Kalender als Delegaten
Aktion | Verwenden Sie diese verwaltete EWS-API-Methode... | Zu verwendende EWS-Operation... |
---|---|---|
Erstellen einer Besprechung oder eines Termins als Stellvertretung |
Appointment.Save, wobei der Parameter FolderIdexpliziten Zugriff auf den Kalenderordner des Postfachbesitzers bietet |
CreateItem, wobei das Mailbox-Element die EmailAddress des Postfachbesitzers festlegt |
Erstellen mehrerer Besprechungen oder Termine als Stellvertretung |
ExchangeService.CreateItems, wobei der Parameter FolderIdexpliziten Zugriff auf den Kalenderordner des Postfachbesitzers bietet |
CreateItem, wobei das Mailbox-Element die EmailAddress des Postfachbesitzers festlegt |
Suchen nach oder Suchen eines Termins oder einer Besprechung als Stellvertretung |
ExchangeService.FindItems, wobei der Parameter FolderIdexpliziten Zugriff auf den Kalenderordner des Postfachbesitzers bietet |
FindItem, wobei das Mailbox-Element die EmailAddress des Postfachbesitzers festlegt |
Abrufen eines Termins oder einer Besprechung als Stellvertretung |
Appointment.Bind |
GetItem |
Aktualisieren eines Termins oder einer Besprechung als Stellvertretung |
Appointment.Bind gefolgt von Appointment.Update |
GetItem gefolgt von UpdateItem |
Löschen eines Termins oder einer Besprechung als Stellvertretung |
Appointment.Bind gefolgt von Appointment.Delete |
GetItem gefolgt von DeleteItem |
Hinweis
In den Codebeispielen in diesem Artikel primary@contoso.com ist der Postfachbesitzer.
Erforderliche Tasks
Bevor ein Benutzer als Stellvertretung auf den Kalenderordner eines Postfachbesitzers zugreifen kann, muss der Benutzer für den Kalenderordner des Postfachbesitzers als Stellvertretung mit Berechtigungen hinzugefügt werden.
Eine Stellvertretung muss über ein Postfach verfügen, das in deren Konto eingebunden ist, um den Kalender eines Postfachbesitzers zu aktualisieren.
Wenn ein Stellvertreter nur mit Besprechungsanfragen und -antworten arbeiten muss, können Sie die Stellvertretung dem Kalenderordner hinzufügen und den standardmäßigen Enumerationswert der verwalteten EWS-API MeetingRequestsDeliveryScope.DelegatesAndSendInformationToMe oder den EWS-Elementwert DeliverMeetingRequests von DelegatesAndSendInformationToMe verwenden, um die Anforderungen an die Stellvertretung und Informationsnachrichten an den Postfachbesitzer zu senden. Der Stellvertretung muss dann kein Zugriff auf den Posteingangsordner des Postfachbesitzers gewährt werden.
Erstellen einer Besprechung oder eines Termins als Stellvertretung mithilfe der verwalteten EWS-API
Mit der verwalteten EWS-API können Sie das Dienstobjekt für den Stellvertretungsbenutzer verwenden, um Kalenderelemente für den Postfachbesitzer zu erstellen. In diesem Beispiel wird gezeigt, wie Sie die Save-Methode verwenden, um eine Besprechung zu erstellen und Besprechungsanfragen an die Teilnehmer zu senden.
In diesem Beispiel wird davon ausgegangen, dass der Dienst ein gültiges ExchangeService-Objekt für die Stellvertretung ist und der Stellvertretung die entsprechenden Berechtigungen für den Kalenderordner des Postfachbesitzers erteilt wurden.
private static void DelegateAccessCreateMeeting(ExchangeService service)
{
Appointment meeting = new Appointment(service);
// Set the properties on the meeting object to create the meeting.
meeting.Subject = "Team building exercise";
meeting.Body = "Let's learn to really work as a team and then have lunch!";
meeting.Start = DateTime.Now.AddDays(2);
meeting.End = meeting.Start.AddHours(4);
meeting.Location = "Conference Room 12";
meeting.RequiredAttendees.Add("sadie@contoso.com");
meeting.ReminderMinutesBeforeStart = 60;
// Save the meeting to the Calendar folder for
// the mailbox owner and send the meeting request.
// This method call results in a CreateItem call to EWS.
meeting.Save(new FolderId(WellKnownFolderName.Calendar,
"primary@contoso.com"),
SendInvitationsMode.SendToAllAndSaveCopy);
// Verify that the meeting was created.
Item item = Item.Bind(service, meeting.Id, new PropertySet(ItemSchema.Subject));
Console.WriteLine("\nMeeting created: " + item.Subject + "\n");
}
Beachten Sie, dass beim Speichern des Elements der Kalenderordner des Postfachbesitzers durch den Aufruf der Save-Methode identifiziert werden muss. Wenn der Kalenderordner des Postfachbesitzers nicht angegeben ist, wird die Besprechungsanfrage im Kalender der Stellvertretung und nicht im Kalenderordner des Postfachbesitzers gespeichert. Sie können den Kalenderordner des Postfachbesitzers auf zwei Arten in den Save-Methodenaufruf einschließen. Es wird empfohlen, eine neue Instanz des FolderId-Objekts mithilfe von WellKnownFolderName und der SMTP-Adresse des Postfachbesitzers zu instanziieren.
meeting.Save(new FolderId(WellKnownFolderName.Calendar,
"primary@contoso.com"), SendInvitationsMode.SendToAllAndSaveCopy);
Sie können jedoch zuerst eine Bindung mit der Methode Bind an den Kalenderordner einrichten und dann die ID des Ordners im Aufruf der Save-Methode verwenden. Beachten Sie jedoch, dass dadurch ein zusätzlicher EWS-Aufruf erstellt wird.
// Identify the mailbox owner's SMTP address
// and bind to their Calendar folder.
Mailbox primary = new Mailbox("primary@contoso.com");
Folder primaryCalendar = Folder.Bind(service,
new FolderId(WellKnownFolderName.Calendar, primary));
…
// Save the meeting to the Calendar folder for the mailbox owner and send the meeting request.
meeting.Save(primaryCalendar.Id,
SendInvitationsMode.SendToAllAndSaveCopy);
Erstellen einer Besprechung oder eines Termins als Stellvertretung mithilfe von EWS
Mit EWS können Sie das Dienstobjekt für den Stellvertretungsbenutzer verwenden, um Kalenderelemente für den Postfachbesitzer zu erstellen. In diesem Beispiel wird gezeigt, wie Sie die CreateItem-Operation verwenden, um eine Besprechung zu erstellen und Besprechungsanfragen an die Teilnehmer zu senden.
Dies ist auch die XML-Anforderung, die die verwaltete EWS-API sendet, wenn Sie die Save-Methode verwenden, um eine Besprechung oder einen Termin als Stellvertretung zu erstellen.
Der SOAP-Header wurde aus Platzgründen aus dem folgenden Beispiel entfernt.
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages"
xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types"
xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/">
…
<soap:Body>
<m:CreateItem SendMeetingInvitations="SendToAllAndSaveCopy">
<m:SavedItemFolderId>
<t:DistinguishedFolderId Id="calendar">
<t:Mailbox>
<t:EmailAddress>primary@contoso.com</t:EmailAddress>
</t:Mailbox>
</t:DistinguishedFolderId>
</m:SavedItemFolderId>
<m:Items>
<t:CalendarItem>
<t:Subject>Team building exercise</t:Subject>
<t:Body BodyType="HTML">Let's learn to really work as a
team and then have lunch!</t:Body>
<t:ReminderMinutesBeforeStart>60</t:ReminderMinutesBeforeStart>
<t:Start>2014-03-09T23:26:33.756-05:00</t:Start>
<t:End>2014-03-10T03:26:33.756-05:00</t:End>
<t:Location>Conference Room 12</t:Location>
<t:RequiredAttendees>
<t:Attendee>
<t:Mailbox>
<t:EmailAddress>sadie@contoso.com</t:EmailAddress>
</t:Mailbox>
</t:Attendee>
</t:RequiredAttendees>
</t:CalendarItem>
</m:Items>
</m:CreateItem>
</soap:Body>
</soap:Envelope>
Der Server antwortet auf die CreateItem-Anforderung mit einer CreateItemResponse-Nachricht , die den ResponseCode-ElementwertNoError enthält, der angibt, dass die Besprechung erfolgreich erstellt wurde. Die Antwort enthält auch die Element-ID der neu erstellten Besprechung.
Suchen nach einer Besprechung oder einem Termin als Stellvertretung mithilfe der verwalteten EWS-API
Um nach einer Besprechung zu suchen, müssen Sie eine der ExchangeService.FindItems-Methoden verwenden, die einen FolderId-Parameter enthalten, damit Sie den Kalenderordner des Postfachbesitzers angeben können.
static void DelegateAccessSearchWithFilter
(ExchangeService service, SearchFilter filter)
{
// Limit the result set to 10 items.
ItemView view = new ItemView(10);
view.PropertySet = new PropertySet(ItemSchema.Subject,
ItemSchema.DateTimeReceived,
EmailMessageSchema.IsRead);
// Item searches do not support deep traversal.
view.Traversal = ItemTraversal.Shallow;
// Define the sort order.
view.OrderBy.Add(ItemSchema.DateTimeReceived, SortDirection.Descending);
try
{
// Call FindItems to find matching calendar items.
// The FindItems parameters must denote the mailbox owner,
// mailbox, and Calendar folder.
// This method call results in a FindItem call to EWS.
FindItemsResults<Item> results = service.FindItems(
new FolderId(WellKnownFolderName.Calendar,
"primary@contoso.com"),
filter,
view);
foreach (Item item in results.Items)
{
Console.WriteLine("Subject: {0}", item.Subject);
Console.WriteLine("Id: {0}", item.Id.ToString());
}
}
catch (Exception ex)
{
Console.WriteLine("Exception while
enumerating results: {0}", ex.Message);
}
}
Nachdem der FindItems-Aufruf eine Antwort mit einer ID zurückgegeben hat, können Sie diese Besprechung mithilfe der ID und impliziten Zugriff abrufen, aktualisieren oder löschen, und Sie müssen nicht die SMTP-Adresse des Postfachbesitzers angeben.
Suchen nach einer Besprechung oder einem Termin als Stellvertretung mithilfe von EWS
Mit EWS können Sie das Dienstobjekt für den Stellvertretungsbenutzer verwenden, um nach Terminen und Besprechungen zu suchen, die eine Reihe von Suchkriterien erfüllen. In diesem Beispiel wird gezeigt, wie sie die FindItem-Operation verwenden, um Besprechungen im Kalenderordner des Postfachbesitzers zu suchen, die das Wort „building“ im Betreff enthalten.
Dies ist auch die XML-Anforderung, die die verwaltete EWS-API sendet, wenn Sie die FindItem-Methode verwenden, um nach einer Besprechung oder einem Termin als Stellvertretung zu suchen.
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages"
xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types"
xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
<t:RequestServerVersion Version="Exchange2007_SP1" />
</soap:Header>
<soap:Body>
<m:FindItem Traversal="Shallow">
<m:ItemShape>
<t:BaseShape>IdOnly</t:BaseShape>
<t:AdditionalProperties>
<t:FieldURI FieldURI="item:Subject" />
<t:FieldURI FieldURI="item:DateTimeReceived" />
<t:FieldURI FieldURI="message:IsRead" />
</t:AdditionalProperties>
</m:ItemShape>
<m:IndexedPageItemView MaxEntriesReturned="10"
Offset="0"
BasePoint="Beginning" />
<m:Restriction>
<t:Contains ContainmentMode="Substring"
ContainmentComparison="IgnoreCase">
<t:FieldURI FieldURI="item:Subject" />
<t:Constant Value="building" />
</t:Contains>
</m:Restriction>
<m:SortOrder>
<t:FieldOrder Order="Descending">
<t:FieldURI FieldURI="item:DateTimeReceived" />
</t:FieldOrder>
</m:SortOrder>
<m:ParentFolderIds>
<t:DistinguishedFolderId Id="calendar">
<t:Mailbox>
<t:EmailAddress>primary@contoso.com</t:EmailAddress>
</t:Mailbox>
</t:DistinguishedFolderId>
</m:ParentFolderIds>
</m:FindItem>
</soap:Body>
</soap:Envelope>
Der Server antwortet auf die FindItem-Anforderung mit einer FindItemResponse-Nachricht, die das ResponseCode-Element mit dem Wert NoError enthält, der angibt, dass die Suche erfolgreich abgeschlossen wurde. Die Antwort enthält ein CalendarItem für alle Termine oder Besprechungen, die die Suchkriterien erfüllt haben. In diesem Fall wird nur eine Besprechung gefunden.
Der Wert des ItemId -Elements wurde zur besseren Lesbarkeit gekürzt.
<?xml version="1.0" encoding="utf-8"?>
<s:Envelope xmlns:s="https://schemas.xmlsoap.org/soap/envelope/">
<s:Header>
<h:ServerVersionInfo MajorVersion="15"
MinorVersion="0"
MajorBuildNumber="893"
MinorBuildNumber="10"
Version="V2_10"
xmlns:h="http://schemas.microsoft.com/exchange/services/2006/types"
xmlns="http://schemas.microsoft.com/exchange/services/2006/types"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" />
</s:Header>
<s:Body>
<m:FindItemResponse xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages"
xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
<m:ResponseMessages>
<m:FindItemResponseMessage ResponseClass="Success">
<m:ResponseCode>NoError</m:ResponseCode>
<m:RootFolder IndexedPagingOffset="1"
TotalItemsInView="1"
IncludesLastItemInRange="true">
<t:Items>
<t:CalendarItem>
<t:ItemId Id="IJpUAAA="
ChangeKey="DwAAABYAAADOilbYa8KaT7ZgMoTz2P+hAAAAIKhS" />
<t:Subject>Team building exercise</t:Subject>
<t:DateTimeReceived>2014-03-04T21:27:22Z</t:DateTimeReceived>
</t:CalendarItem>
</t:Items>
</m:RootFolder>
</m:FindItemResponseMessage>
</m:ResponseMessages>
</m:FindItemResponse>
</s:Body>
</s:Envelope>
Nachdem Sie nun über die Element-ID ItemId für die Besprechung verfügen, die Ihre Kriterien erfüllt, können Sie diese Besprechung mithilfe der ItemId und dem impliziten Zugriff abrufen, aktualisieren oder löschen – und Sie müssen nicht die SMTP-Adresse des Postfachbesitzers angeben.
Abrufen, Aktualisieren oder Löschen von Kalenderelementen als Stellvertretung mithilfe der verwalteten EWS-API
Sie können die verwaltete EWS-API verwenden, um eine Besprechung oder einen Termin auf die gleiche Weise abzurufen, zu aktualisieren oder zu löschen, wie Sie diese Aktionen ausführen, wenn Sie keinen Stellvertretungszugriff verwenden. Der einzige Unterschied besteht darin, dass das Dienstobjekt für den Stellvertretungsbenutzer gilt. Die im Bind-Methodenaufruf enthaltene Element-ID identifiziert eindeutig das Element im Postfachspeicher im Kalenderordner des Postfachbesitzers.
Tabelle 2. Verwaltete EWS-API-Methoden zum Arbeiten mit Terminen und Besprechungen als Stellvertretung
Aufgabe | EWS Managed API-Methode | Codebeispiel |
---|---|---|
Abrufen eines Termins oder einer Besprechung |
Bind |
Abrufen eines Elements mithilfe der verwalteten EWS-API |
Aktualisieren eines Termins oder einer Besprechung |
Bind gefolgt von Update |
Aktualisieren einer Besprechung mithilfe der verwalteten EWS-API |
Löschen eines Termins oder einer Besprechung |
Bind gefolgt von Löschen |
Löschen einer Besprechung mithilfe der EWS Managed API |
Abrufen, Aktualisieren oder Löschen von Kalenderelementen als Stellvertretung mithilfe von EWS
Sie können EWS verwenden, um eine Besprechung oder einen Termin auf die gleiche Weise abzurufen, zu aktualisieren oder zu löschen, wie Sie diese Aktionen ausführen, wenn Sie keinen Stellvertretungszugriff verwenden. Der einzige Unterschied besteht darin, dass das Dienstobjekt für den Stellvertretungsbenutzer gilt. Die im GetItem-Methodenaufruf enthaltene Element-ID identifiziert eindeutig das Element im Postfachspeicher im Kalenderordner des Postfachbesitzers.
Tabelle 3. EWS-Vorgänge zum Arbeiten mit Terminen und Besprechungen als Stellvertretung
Aufgabe | EWS-Vorgang | Codebeispiel |
---|---|---|
Abrufen eines Termins oder einer Besprechung |
GetItem |
Abrufen eines Elements mithilfe von EWS |
Aktualisieren eines Termins oder einer Besprechung |
GetItem gefolgt von UpdateItem |
Aktualisieren einer Besprechung mithilfe von EWS |
Löschen eines Termins oder einer Besprechung |
GetItem gefolgt von DeleteItem |
Löschen einer Besprechung mithilfe von EWS |