Accéder à un calendrier en tant que délégué en utilisant EWS dans Exchange

Découvrez comment accéder à un calendrier en tant que délégué en utilisant l’API gérée EWS ou EWS dans Exchange.

Vous pouvez utiliser l’API gérée EWS ou EWS pour accorder à un utilisateur un accès délégué au dossier Calendrier d’un propriétaire de boîte aux lettres. Le délégué peut ensuite créer des demandes de réunion au nom du propriétaire de la boîte aux lettres, créer des rendez-vous, répondre aux demandes de réunion et récupérer, mettre à jour et supprimer des réunions à partir du dossier Calendrier du propriétaire de la boîte aux lettres, en fonction de ses autorisations.

En tant que délégué, vous utilisez les mêmes méthodes et opérations pour accéder au dossier Calendrier d’un propriétaire de boîte aux lettres que celles que vous utilisez pour accéder à votre propre dossier Calendrier. La principale différence est que vous devez utiliser un accès explicite pour rechercher ou créer un élément de calendrier ou un sous-dossier de calendrier, puis après avoir identifié l’ID d’élément ou l’ID de dossier, vous pouvez utiliser l’accès implicite pour obtenir, mettre à jour ou supprimer l’élément.

Tableau 1. Méthodes d’API managée EWS et opérations EWS pour accéder à un calendrier en tant que délégué

Si vous voulez... Utilisez cette méthode d’API gérée EWS... Utilisez cette opération EWS...
Créer une réunion ou un rendez-vous en tant que délégué
Appointment.Save où le paramètre FolderId fournit un accès explicite au dossier Calendrier du propriétaire de la boîte aux lettres
CreateItem où l’élément Boîte aux lettres spécifie l’Adresse de courrier du propriétaire de la boîte aux lettres
Créer plusieurs réunions ou rendez-vous en tant que délégué
ExchangeService.CreateItems où le paramètre FolderId fournit un accès explicite au dossier Calendrier du propriétaire de la boîte aux lettres
CreateItem où l’élément Boîte aux lettres spécifie l’Adresse de courrier du propriétaire de la boîte aux lettres
Rechercher un rendez-vous ou une réunion en tant que délégué
ExchangeService.FindItems où le paramètre FolderId fournit un accès explicite au dossier Calendrier du propriétaire de la boîte aux lettres
FindItem où l’élément Boîte aux lettres spécifie la propriété Adresse de courrier du propriétaire de la boîte aux lettres
Obtenir un rendez-vous ou une réunion en tant que délégué
Appointment.Bind
GetItem
Mettre à jour un rendez-vous ou une réunion en tant que délégué
Appointment.Bind suivi de Appointment.Update
GetItem suivi de UpdateItem
Supprimer un rendez-vous ou une réunion en tant que délégué
Appointment.Bind suivi de Appointment.Delete
GetItem suivi de DeleteItem

Remarque

Dans les exemples de code de cet article, primary@contoso.com est le propriétaire de la boîte aux lettres.

Tâches préalables

Pour qu’un utilisateur ait accès, en tant que délégué, au dossier Calendrier d’un propriétaire de boîte aux lettres, il doit être ajouté comme délégué avec des autorisations au dossier Calendrier du propriétaire de la boîte aux lettres.

Un délégué doit avoir une boîte aux lettres associée à son compte pour mettre à jour le calendrier d’un propriétaire de boîte aux lettres.

Si un délégué doit utiliser uniquement les demandes de réunion et les réponses, vous pouvez ajouter le délégué au dossier Calendrier et utiliser la valeur d’énumération par défaut de l’API gérée EWS MeetingRequestsDeliveryScope.DelegatesAndSendInformationToMe EWS ou la valeur d’élément EWS DeliverMeetingRequests de DelegatesAndSendInformationToMe pour envoyer des demandes au délégué et des messages d’information au propriétaire de la boîte aux lettres. Le délégué n’a alors pas besoin d’accéder au dossier Boîte de réception du propriétaire de la boîte aux lettres.

Créer une réunion ou un rendez-vous en tant que délégué à l’aide de l’API gérée EWS

L’API gérée EWS vous permet d’utiliser l’objet du service pour l’utilisateur délégué afin de créer des éléments de calendrier pour le propriétaire de la boîte aux lettres. Cet exemple montre comment utiliser la méthode Enregistrer pour créer une réunion et envoyer des demandes de réunion aux participants.

Cet exemple suppose que service est un objet ExchangeService valide pour le délégué et que le délégué a reçu les autorisations appropriées pour le dossier Calendrier du propriétaire de la boîte aux lettres.

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");
}

Notez que lorsque vous enregistrez l’élément, l’appel de la méthode Enregistrer doit identifier le dossier Calendrier du propriétaire de la boîte aux lettres. Si le dossier Calendrier du propriétaire de la boîte aux lettres n’est pas spécifié, la demande de réunion est enregistrée dans le calendrier du délégué et non dans le dossier Calendrier du propriétaire de la boîte aux lettres. Vous pouvez inclure de deux façons le dossier Calendrier du propriétaire de la boîte aux lettres dans l’appel de la méthode Enregistrer. Nous vous recommandons d’instancier une nouvelle instance de l’objet FolderId à l’aide de WellKnownFolderName et de l’adresse SMTP du propriétaire de la boîte aux lettres.

meeting.Save(new FolderId(WellKnownFolderName.Calendar,
    "primary@contoso.com"), SendInvitationsMode.SendToAllAndSaveCopy);

Toutefois, vous pouvez également Lier d’abord le dossier Calendrier, puis utiliser l’ID du dossier dans l’appel de la méthode Enregistrer. Notez toutefois que cela crée un appel EWS supplémentaire.

    // 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);

Créer une réunion ou un rendez-vous en tant que délégué en utilisant EWS

EWS vous permet d’utiliser l’objet du service pour l’utilisateur délégué afin de créer des éléments de calendrier pour le propriétaire de la boîte aux lettres. Cet exemple montre comment utiliser l’opération CreateItem pour créer une réunion et envoyer des demandes de réunion aux participants.

Il s’agit également de la demande XML que l’API gérée EWS envoie lorsque vous utilisez la méthode Enregistrer pour créer une réunion ou un rendez-vous en tant que délégué.

L’en-tête SOAP a été supprimé de l’exemple suivant pour plus de simplicité.

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xmlns:m="https://schemas.microsoft.com/exchange/services/2006/messages" 
         xmlns:t="https://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>

Le serveur répond à la requête CreateItem avec un message CreateItemResponse qui inclut une valeur d’élément ResponseCodeNoError, ce qui indique que la réunion a été créée avec succès. La réponse contient également l’ID d’élément de la réunion nouvellement créée.

Rechercher une réunion ou un rendez-vous en tant que délégué en utilisant l’API gérée EWS

Pour rechercher une réunion, vous devez utiliser l’une des méthodes ExchangeService.FindItems qui inclut un paramètre FolderId afin de pouvoir spécifier le dossier Calendrier du propriétaire de la boîte aux lettres.

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);
    }
}

Une fois que l’appel FindItems renvoie une réponse avec un ID, vous pouvez obtenir, mettre à jour ou supprimer cette réunion à l’aide de l’ID et de l’accès implicite, et vous n’avez pas besoin de spécifier l’adresse SMTP du propriétaire de la boîte aux lettres.

Rechercher une réunion ou un rendez-vous en tant que délégué en utilisant EWS

EWS vous permet d’utiliser l’objet du service pour que l’utilisateur délégué recherche des rendez-vous et des réunions qui répondent à un ensemble de critères de recherche. Cet exemple montre comment utiliser l’opération FindItem pour trouver des réunions dans le dossier Calendrier du propriétaire de la boîte aux lettres qui contiennent le mot « bâtiment » dans l’objet.

Il s’agit également de la demande XML que l’API gérée EWS envoie lorsque vous utilisez la méthode FindItem pour rechercher une réunion ou un rendez-vous en tant que délégué.

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xmlns:m="https://schemas.microsoft.com/exchange/services/2006/messages"
               xmlns:t="https://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>

Le serveur répond à la demande FindItem par un message FindItemResponse qui inclut la valeur d’élément ResponseCode de NoError, ce qui indique que le dossier a été correctement supprimé. La réponse contient un CalendarItem pour les rendez-vous ou réunions qui répondent aux critères de recherche. Dans ce cas, une seule réunion est trouvée.

La valeur de l’élément ItemId a été abrégée pour des raisons de lisibilité.

<?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="https://schemas.microsoft.com/exchange/services/2006/types"
                         xmlns="https://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="https://schemas.microsoft.com/exchange/services/2006/messages"
                        xmlns:t="https://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>

Maintenant que vous avez l’ItemId de la réunion qui répond à vos critères, vous pouvez obtenir, mettre à jour ou supprimer cette réunion à l’aide de l’élément ItemId et de l’accès implicite. Vous n’avez pas besoin de spécifier l’adresse SMTP du propriétaire de la boîte aux lettres.

Obtenir, mettre à jour ou supprimer des éléments de calendrier en tant que délégué en utilisant l’API gérée EWS

Vous pouvez utiliser l’API gérée EWS pour obtenir, mettre à jour ou supprimer une réunion ou un rendez-vous de la même manière que lorsque vous n’utilisez pas l’accès délégué. La seule différence est que l’objet du service est pour l’utilisateur délégué. L’ID d’élément inclus dans l’appel de la méthode Lier identifie, de manière unique, l’élément dans la boîte aux lettres dans le dossier Calendrier du propriétaire de la boîte aux lettres.

Tableau 2. Méthodes d’API managée EWS pour l’utilisation des rendez-vous et des réunions en tant que délégué

Tâche Méthode d'API managée EWS Exemple de code
Obtenir un rendez-vous ou une réunion
Lier
Obtention d’un élément à l’aide de l’API managée EWS
Mettre à jour un rendez-vous ou une réunion
Lier suivi de Mettre à jour
Mettre à jour un dossier à l’aide de l’API gérée par EWS
Supprimer un rendez-vous ou une réunion
Lier suivi de Supprimer
Supprimer un dossier à l’aide de l’API gérée par EWS

Obtenir, mettre à jour ou supprimer des éléments de calendrier en tant que délégué en utilisant EWS

Vous pouvez utiliser EWS pour obtenir, mettre à jour ou supprimer une réunion ou un rendez-vous de la même façon que lorsque vous n’utilisez pas l’accès délégué pour effectuer ces actions. La seule différence est que l’objet du service est pour l’utilisateur délégué. L’ID d’élément inclus dans l’appel de méthode GetItem identifie, de manière unique, l’élément dans la boîte aux lettres dans le dossier Calendrier du propriétaire de la boîte aux lettres.

Tableau 3. Opérations EWS pour l’utilisation de rendez-vous et de réunions en tant que délégué

Tâche Opération EWS Exemple de code
Obtenir un rendez-vous ou une réunion
GetItem
Obtention d’un élément à l’aide d’EWS
Mettre à jour un rendez-vous ou une réunion
GetItem suivi de UpdateItem
Mettre à jour une réunion en utilisant le EWS
Supprimer un rendez-vous ou une réunion
GetItem suivi de DeleteItem
Supprimer un dossier à l’aide d’EWS

Voir aussi