Zugriff auf Kontakte als Delegat mithilfe der EWS in Exchange
Erfahren Sie, wie Sie mithilfe der verwalteten EWS-API oder ewS in Exchange als Stellvertretung auf Kontakte zugreifen.
Sie können die verwaltete EWS-API oder EWS verwenden, um einem Benutzer Zugriff auf den Ordner Kontakte eines Postfachbesitzers zu gewähren. Die Stellvertretung kann dann Kontakte im Namen des Postfachbesitzers erstellen und je nach Ihren Berechtigungen Kontakte aus dem Ordner Kontakte des Postfachbesitzers abrufen, aktualisieren und löschen.
Als Stellvertretung verwenden Sie die gleichen Methoden und Vorgänge, um auf den Ordner Kontakte eines Postfachbesitzers zuzugreifen, den Sie für den Zugriff auf Ihren eigenen Kontaktordner verwenden. Der Hauptunterschied besteht darin, dass Sie expliziten Zugriff verwenden müssen, um ein Kontaktelement zu suchen oder zu erstellen. Nachdem Sie die Element-ID identifiziert haben, können Sie den 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 Kontakt als Stellvertretung
Aktion | Verwenden Sie diese verwaltete EWS-API-Methode... | Zu verwendende EWS-Operation... |
---|---|---|
Erstellen eines Kontakts als Stellvertretung |
Item.Save , wobei der FolderId-Parameterexpliziten Zugriff auf den Ordner "Kontakte" des Postfachbesitzers bietet |
CreateItem, wobei das Mailbox-Element die EmailAddress des Postfachbesitzers festlegt |
Erstellen mehrerer Kontakte als Delegat |
ExchangeService.CreateItems , bei dem der FolderId-Parameterexpliziten Zugriff auf den Ordner "Kontakte" des Postfachbesitzers bietet |
CreateItem, wobei das Mailbox-Element die EmailAddress des Postfachbesitzers festlegt |
Auflösen eines Kontakts als Stellvertretung |
ExchangeService.ResolveName , bei dem der FolderId-Parameterexpliziten Zugriff auf den Kontaktordner des Postfachbesitzers bietet |
ResolveNames , bei dem das Mailbox-Element die EmailAddress des Postfachbesitzers angibt |
Suchen oder Suchen eines Kontakts als Stellvertretung |
ExchangeService.FindItems , bei dem der FolderId-Parameterexpliziten Zugriff auf den Kontaktordner des Postfachbesitzers bietet |
FindItem, wobei das Mailbox-Element die EmailAddress des Postfachbesitzers festlegt |
Abrufen eines Kontakts als Stellvertretung |
Contact.Bind |
GetItem |
Aktualisieren eines Kontakts als Stellvertretung |
Contact.Bind gefolgt von Contact.Update |
GetItem gefolgt von UpdateItem |
Löschen eines Kontakts als Stellvertretung |
Contact.Bind gefolgt von Contact.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 Ordner Kontakte des Postfachbesitzers zugreifen kann, muss der Benutzer als Stellvertretung mit Berechtigungen für den Ordner Kontakte des Postfachbesitzers hinzugefügt werden.
Erstellen eines Kontakts als Stellvertretung mithilfe der verwalteten EWS-API
Mit der verwalteten EWS-API können Sie das Dienstobjekt für den Stellvertretungsbenutzer verwenden, um Kontakte 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 service ein gültiges ExchangeService-Objekt für den Delegaten ist und dem Delegaten die entsprechenden Berechtigungen für den Ordner Kontakte des Postfachbesitzers erteilt wurden.
public static void DelegateAccessCreateContact(ExchangeService service)
{
// Create the contact.
Contact contact = new Contact(service);
// Specify the name and how the contact should be filed.
contact.GivenName = "Brian";
contact.MiddleName = "David";
contact.Surname = "Johnson";
contact.FileAsMapping = FileAsMapping.SurnameCommaGivenName;
// Specify the company name.
contact.CompanyName = "Contoso";
// Specify the business, home, and car phone numbers.
contact.PhoneNumbers[PhoneNumberKey.BusinessPhone] = "425-555-0110";
contact.PhoneNumbers[PhoneNumberKey.HomePhone] = "425-555-0120";
contact.PhoneNumbers[PhoneNumberKey.CarPhone] = "425-555-0130";
// Specify two email addresses.
contact.EmailAddresses[EmailAddressKey.EmailAddress1] =
new EmailAddress("brian_1@contoso.com");
contact.EmailAddresses[EmailAddressKey.EmailAddress2] =
new EmailAddress("brian_2@contoso.com");
// Save the contact in the mailbox owner's Contacts folder.
// This method call results in a CreateItem call to EWS.
// The contact identifier contains the context for the mailbox owner's
// Contact folder. Any additional actions take on this contact will
// be performed in the mailbox owner's mailbox.
contact.Save(new FolderId(WellKnownFolderName.Contacts,
"primary@contoso.com"));
// Verify that the contact was created.
// This method call results in a GetItem call to EWS
// to load the display name property on the contact.
contact.Load(new PropertySet (ContactSchema.DisplayName));
Console.WriteLine("\nContact created: " + contact.DisplayName + "\n");
}
Beachten Sie, dass beim Speichern des Elements der Aufruf der Save-Methode den Ordner Kontakte des Postfachbesitzers identifizieren muss. Wenn der Ordner Kontakte des Postfachbesitzers nicht angegeben ist, wird die Besprechungsanfrage im Ordner Kontakte des Delegaten und nicht im Ordner Kontakte des Postfachbesitzers gespeichert. Sie können den Ordner Kontakte des Postfachbesitzers auf zwei Arten in den Aufruf der Save-Methode einschließen. Es wird empfohlen, eine neue Instanz des FolderId-Objekts mithilfe von WellKnownFolderName und der SMTP-Adresse des Postfachbesitzers zu instanziieren.
contact.Save(new FolderId(WellKnownFolderName.Contacts, "primary@contoso.com"));
Sie können jedoch auch zuerst an den Ordner Kontakte binden 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 Contacts folder.
Mailbox primary = new Mailbox("primary@contoso.com");
Folder primaryContacts = Folder.Bind(service, new FolderId(WellKnownFolderName.Contacts, primary));
…
// Save the contact to the mailbox owner's Contacts folder.
meeting.Save(primaryContacts.Id);
Erstellen eines Kontakts als Delegaten mithilfe von EWS
EWS ermöglicht es Ihnen, das Dienstobjekt für den Stellvertretungsbenutzer zu verwenden, um Kontaktelemente für den Postfachbesitzer zu erstellen. In diesem Beispiel wird gezeigt, wie Sie den CreateItem-Vorgang verwenden, um einen Kontakt zu erstellen.
Dies ist auch die XML-Anforderung, die die verwaltete EWS-API sendet, wenn Sie die Save-Methode zum Erstellen eines Kontakts verwenden.
<?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:CreateItem MessageDisposition="SaveOnly">
<m:SavedItemFolderId>
<t:DistinguishedFolderId Id="contacts">
<t:Mailbox>
<t:EmailAddress>primary@contoso.com</t:EmailAddress>
</t:Mailbox>
</t:DistinguishedFolderId>
</m:SavedItemFolderId>
<m:Items>
<t:Contact>
<t:FileAsMapping>LastCommaFirst</t:FileAsMapping>
<t:GivenName>Brian</t:GivenName>
<t:MiddleName>David</t:MiddleName>
<t:CompanyName>Contoso</t:CompanyName>
<t:EmailAddresses>
<t:Entry Key="EmailAddress1">brian_1@contoso.com</t:Entry>
<t:Entry Key="EmailAddress2">brian_2@contoso.com</t:Entry>
</t:EmailAddresses>
<t:PhoneNumbers>
<t:Entry Key="BusinessPhone">425-555-0110</t:Entry>
<t:Entry Key="HomePhone">425-555-0120</t:Entry>
<t:Entry Key="CarPhone">425-555-0130</t:Entry>
</t:PhoneNumbers>
<t:Surname>Johnson</t:Surname>
</t:Contact>
</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 der Kontakt erfolgreich erstellt wurde. Die Antwort enthält auch die Element-ID des neu erstellten Kontakts.
Auflösen eines Kontakts als Delegaten mithilfe der verwalteten EWS-API
Um einen Kontakt basierend auf einem möglicherweise mehrdeutigen Namen oder Begriff zu finden, müssen Sie eine der ExchangeService.ResolveName-Methoden verwenden, die einen FolderId-Parameter enthält, damit Sie den Ordner Kontakte des Postfachbesitzers angeben können.
private static void DelegateAccessResolveContacts(ExchangeService service)
{
// Create a list to store folders to search.
List<FolderId> folders = new List<FolderId>();
// Add the mailbox owner's folder to the list.
folders.Add(new FolderId(WellKnownFolderName.Contacts,
"primary@contoso.com"));
// Resolve the ambiguous name "Johnson".
// This method call results in a ResolveNames call to EWS.
NameResolutionCollection resolvedNames = service.ResolveName(
"johnson", folders, ResolveNameSearchLocation.ContactsOnly, true);
// Output the list of candidate email addresses and contact names.
foreach (NameResolution nameRes in resolvedNames)
{
Console.WriteLine("Contact e-mail address: " + nameRes.Mailbox.Address);
Console.WriteLine("Contact ID: " + nameRes.Mailbox.Id);
}
}
Nachdem der ResolveNames-Methodenaufruf eine Antwort mit einer ID zurückgibt, können Sie den Kontakt mithilfe der ID und des impliziten Zugriffsabrufen, aktualisieren oder löschen, und Sie müssen die SMTP-Adresse des Postfachbesitzers nicht angeben.
Auflösen eines Kontakts als Stellvertretung mithilfe von EWS
EWS ermöglicht es Ihnen, das Dienstobjekt für den Delegatbenutzer zu verwenden, um Teilnamen im Ordner Kontakte des Postfachbesitzers aufzulösen. In diesem Beispiel wird gezeigt, wie sie den ResolveNames-Vorgang verwenden, um Besprechungen im Ordner Kontakte des Postfachbesitzers zu finden, die das Wort "johnson" enthalten.
Dies ist auch die XML-Anforderung, die die verwaltete EWS-API sendet, wenn Sie die ResolveName-Methode verwenden, um einen Kontakt aufzulösen.
<?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:ResolveNames ReturnFullContactData="true"
SearchScope="Contacts">
<m:ParentFolderIds>
<t:DistinguishedFolderId Id="contacts">
<t:Mailbox>
<t:EmailAddress>primary@contoso.com</t:EmailAddress>
</t:Mailbox>
</t:DistinguishedFolderId>
</m:ParentFolderIds>
<m:UnresolvedEntry>johnson</m:UnresolvedEntry>
</m:ResolveNames>
</soap:Body>
</soap:Envelope>
Der Server antwortet auf die ResolveNames-Anforderung mit einer ResolveNamesResponse-Nachricht , die den ResponseCode-ElementwertNoError enthält, der angibt, dass der Vorgang erfolgreich abgeschlossen wurde und nur ein Ergebnis gefunden hat, oder ErrorNameResolutionMultipleResults , wenn mehrere Ergebnisse gefunden wurden. Dies ist das, was im dritten Codebeispiel basierend auf dem Kontakt Erstellen eines Kontakts als Stellvertretung mithilfe der verwalteten EWS-API gezeigt wird. Die Antwort enthält auch die ItemId jedes Ergebnisses.
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="17"
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:ResolveNamesResponse xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages"
xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
<m:ResponseMessages>
<m:ResolveNamesResponseMessage ResponseClass="Warning">
<m:MessageText>Multiple results were found.</m:MessageText>
<m:ResponseCode>ErrorNameResolutionMultipleResults</m:ResponseCode>
<m:DescriptiveLinkKey>0</m:DescriptiveLinkKey>
<m:ResolutionSet TotalItemsInView="2"
IncludesLastItemInRange="true">
<t:Resolution>
<t:Mailbox>
<t:Name>brian_1@contoso.com</t:Name>
<t:EmailAddress>brian_1@contoso.com</t:EmailAddress>
<t:RoutingType>SMTP</t:RoutingType>
<t:MailboxType>Contact</t:MailboxType>
<t:ItemId Id="iMihAAA="
ChangeKey="EQAAABYAAADOilbYa8KaT7ZgMoTz2P+hAAABiPQo" />
</t:Mailbox>
</t:Resolution>
<t:Resolution>
<t:Mailbox>
<t:Name>brian_2@contoso.com</t:Name>
<t:EmailAddress>brian_2@contoso.com</t:EmailAddress>
<t:RoutingType>SMTP</t:RoutingType>
<t:MailboxType>Contact</t:MailboxType>
<t:ItemId Id="iMihAAA="
ChangeKey="EQAAABYAAADOilbYa8KaT7ZgMoTz2P+hAAABiPQo" />
</t:Mailbox>
</t:Resolution>
</m:ResolutionSet>
</m:ResolveNamesResponseMessage>
</m:ResponseMessages>
</m:ResolveNamesResponse>
</s:Body>
</s:Envelope>
Nachdem Sie nun über die ItemId für die Kontakte verfügen, die mit dem mehrdeutigen Namen übereinstimmen, können Sie Kontaktelemente mithilfe von EWS mithilfe der ItemId und des impliziten Zugriffsals Stellvertretung abrufen, aktualisieren oder löschen, und Sie müssen die SMTP-Adresse des Postfachbesitzers nicht angeben.
Abrufen, Aktualisieren oder Löschen von Kontaktelementen als Stellvertretung mithilfe der verwalteten EWS-API
Sie können die verwaltete EWS-API verwenden, um einen Kontakt 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 element-ID, die im Bind-Methodenaufruf enthalten ist, identifiziert das Element eindeutig im Postfachspeicher im Ordner Kontakte des Postfachbesitzers.
Tabelle 2. Verwaltete EWS-API-Methoden, die mit einem Kontakt als Delegaten arbeiten
Aufgabe | EWS Managed API-Methode | Codebeispiel |
---|---|---|
Abrufen eines Kontakts |
Bind |
Abrufen eines Elements mithilfe der verwalteten EWS-API |
Einen Kontakt aktualisieren |
Bind gefolgt von Update |
Aktualisieren eines Elements mithilfe der verwalteten EWS-API |
Löschen eines Kontakts |
Bind gefolgt von Löschen |
Löschen eines Elements mithilfe der verwalteten EWS-API |
Abrufen, Aktualisieren oder Löschen von Kontaktelementen als Stellvertretung mithilfe von EWS
Sie können EWS verwenden, um einen Besprechungs- oder Terminkontakt 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 element-ID, die in der GetItem-Anforderung enthalten ist, identifiziert das Element eindeutig im Postfachspeicher im Ordner Kontakte des Postfachbesitzers.
Tabelle 3. EWS-Vorgänge zum Arbeiten mit einem Kontakt als Stellvertretung
Aufgabe | EWS-Vorgang | Beispiel |
---|---|---|
Abrufen eines Kontakts |
GetItem |
Abrufen eines Elements mithilfe von EWS |
Einen Kontakt aktualisieren |
GetItem gefolgt von UpdateItem |
Aktualisieren eines Elements mithilfe von EWS |
Löschen eines Kontakts |
GetItem gefolgt von DeleteItem |
Löschen eines Elements mithilfe von EWS |
Siehe auch
- Stellvertretungszugriff und EWS in Exchange
- Hinzufügen und Entfernen von Delegaten mithilfe der EWS in Exchange
- Festlegen von Ordnerberechtigungen für einen anderen Benutzer mithilfe der EWS in Exchange
- Personen und Kontakte in EWS in Exchange
- Auflösen von mehrdeutigen Namen mithilfe der EWS Exchange 2013