Obtener acceso a los contactos como un delegado mediante EWS en ExchangeAccess contacts as a delegate by using EWS in Exchange

Obtenga información sobre cómo obtener acceso a contactos como un delegado mediante la API administrada de EWS o EWS en Exchange.Learn how to access contacts as a delegate by using the EWS Managed API or EWS in Exchange.

Puede usar la API administrada de EWS o EWS para conceder a un usuario acceso a la carpeta de contactos de un propietario del buzón.You can use the EWS Managed API or EWS to give a user access to a mailbox owner's Contacts folder. A continuación, el delegado puede crear contactos en nombre del propietario del buzón y recuperar, actualizar y eliminar contactos de la carpeta de contactos del propietario del buzón, en función de sus permisos.The delegate can then create contacts on behalf of the mailbox owner, and retrieve, update, and delete contacts from the mailbox owner's Contacts folder, depending on their permissions.

Como delegado, se usan los mismos métodos y operaciones para tener acceso a la carpeta de contactos de un propietario del buzón que se usa para tener acceso a su propia carpeta contactos.As a delegate, you use the same methods and operations to access a mailbox owner's Contacts folder that you use to access your own Contacts folder. La principal diferencia es que tiene que usar el acceso explícito para buscar o crear un elemento de contacto y, después, después de identificar el identificador de elemento, puede usar el acceso implícito para obtener, actualizar o eliminar el elemento.The main difference is that you have to use explicit access to find or create a contact item, and then after you identify the item ID, you can use implicit access to get, update, or delete the item.

Tabla 1. Métodos de la API administrada de EWS y operaciones EWS para tener acceso a un contacto como delegadoTable 1. EWS Managed API methods and EWS operations for accessing a contact as a delegate

Si quiere...If you want to… Use este método de API administrada de EWS...Use this EWS Managed API method… Usar esta operación de EWS...Use this EWS operation…
Crear un contacto como delegadoCreate a contact as a delegate
Item. Save donde el parámetro FolderId proporciona acceso explícito a la carpeta de contactos del propietario del buzón de correoItem.Save where the FolderId parameter provides explicit access to the mailbox owner's Contacts folder
CreateItem donde el elemento Mailbox especifica el EmailAddress del propietario del buzón de correoCreateItem where the Mailbox element specifies the EmailAddress of the mailbox owner
Crear varios contactos como un delegadoCreate multiple contacts as a delegate
ExchangeService. CreateItems donde el parámetro FolderId proporciona acceso explícito a la carpeta de contactos del propietario del buzón de correoExchangeService.CreateItems where the FolderId parameter provides explicit access to the mailbox owner's Contacts folder
CreateItem donde el elemento Mailbox especifica el EmailAddress del propietario del buzón de correoCreateItem where the Mailbox element specifies the EmailAddress of the mailbox owner
Resolver un contacto como delegadoResolve a contact as a delegate
ExchangeService. ResolveName donde el parámetro FolderId proporciona acceso explícito a la carpeta de contactos del propietario del buzón de correoExchangeService.ResolveName where the FolderId parameter provides explicit access to the mailbox owner's Contacts folder
ResolveNames donde el elemento Mailbox especifica el EmailAddress del propietario del buzónResolveNames where the Mailbox element specifies the EmailAddress of the mailbox owner
Buscar o buscar un contacto como delegadoSearch for or find a contact as a delegate
ExchangeService. FindItems donde el parámetro FolderId proporciona acceso explícito a la carpeta de contactos del propietario del buzón de correoExchangeService.FindItems where the FolderId parameter provides explicit access to the mailbox owner's Contacts folder
FindItem donde el elemento Mailbox especifica el EmailAddress del propietario del buzón.FindItem where the Mailbox element specifies the EmailAddress of the mailbox owner
Obtener un contacto como delegadoGet a contact as a delegate
Contact. bindContact.Bind
GetItemGetItem
Actualizar un contacto como delegadoUpdate a contact as a delegate
Contact. bind seguido por Contact. UpdateContact.Bind followed by Contact.Update
GetItem seguido de UpdateItemGetItem followed by UpdateItem
Eliminar un contacto como delegadoDelete a contact as a delegate
Contact. bind seguido por Contact. DeleteContact.Bind followed by Contact.Delete
GetItem seguido de DeleteItemGetItem followed by DeleteItem

Nota

En los ejemplos de código de este artículo, primary@contoso.com es el propietario del buzón.In the code examples in this article, primary@contoso.com is the mailbox owner.

Tareas de requisitos previosPrerequisite tasks

Para que un usuario pueda tener acceso a la carpeta de contactos del propietario del buzón como delegado, el usuario debe agregarse como delegado con permisos para la carpeta de contactos del propietario del buzón.Before a user can access the mailbox owner's Contacts folder as a delegate, the user must be added as a delegate with permissions to the mailbox owner's Contacts folder.

Crear un contacto como delegado mediante la API administrada de EWSCreate a contact as a delegate by using the EWS Managed API

La API administrada de EWS permite usar el objeto de servicio para que el usuario delegado cree contactos para el propietario del buzón.The EWS Managed API enables you to use the service object for the delegate user to create contacts for the mailbox owner. En este ejemplo se muestra cómo usar el método Save para crear una reunión y enviar las convocatorias de reunión a los asistentes.This example shows how to use the Save method to create a meeting and send meeting requests to the attendees.

En este ejemplo se supone que el servicio es un objeto ExchangeService válido para el delegado y que se han concedido al delegado los permisos adecuados para la carpeta de contactos del propietario del buzón.This example assumes that service is a valid ExchangeService object for the delegate and that the delegate has been granted the appropriate permissions for the mailbox owner's Contacts folder.

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

Tenga en cuenta que, al guardar el elemento, la llamada al método Save debe identificar la carpeta de contactos del propietario del buzón.Note that when you save the item, the Save method call must identify the mailbox owner's Contacts folder. Si no se especifica la carpeta de contactos del propietario del buzón, la convocatoria de reunión se guarda en la carpeta contactos del delegado y no en la carpeta contactos del propietario del buzón.If the mailbox owner's Contacts folder is not specified, the meeting request gets saved to the delegate's Contacts folder and not the mailbox owner's Contacts folder. Puede incluir la carpeta contactos del propietario del buzón en la llamada al método Save de dos maneras.You can include the mailbox owner's Contacts folder in the Save method call in two way. Se recomienda crear una instancia de una nueva instancia del objeto FolderId con el WellKnownFolderName y la dirección SMTP del propietario del buzón.We recommend that you instantiate a new instance of the FolderId object by using the WellKnownFolderName and the SMTP address of the mailbox owner.

contact.Save(new FolderId(WellKnownFolderName.Contacts, "primary@contoso.com"));

Sin embargo, también puede enlazar a la carpeta de contactos y, a continuación, usar el identificador de la carpeta en la llamada al método Save .However, you can also Bind to the Contacts folder first, and then use the ID of the folder in the Save method call. Sin embargo, tenga en cuenta que esto crea una llamada a EWS adicional.Be aware, however, that this creates an extra EWS call.

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

Crear un contacto como delegado mediante EWSCreate a contact as a delegate by using EWS

EWS permite usar el objeto de servicio para que el usuario delegado cree elementos de contacto para el propietario del buzón.EWS enables you to use the service object for the delegate user to create contact items for the mailbox owner. En este ejemplo se muestra cómo utilizar la operación CreateItem para crear un contacto.This example shows how to use the CreateItem operation to create a contact.

También es la solicitud XML que la API administrada de EWS envía cuando se usa el método Save para crear un contacto.This is also the XML request that the EWS Managed API sends when you use the Save method to create a contact.

<?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: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>

El servidor responde a la solicitud CreateItem con un mensaje CreateItemResponse que incluye un valor de elemento ResponseCode de NoError, lo que indica que el contacto se ha creado correctamente.The server responds to the CreateItem request with a CreateItemResponse message that includes a ResponseCode element value of NoError, which indicates that the contact was created successfully. La respuesta también contiene el identificador de elemento del contacto recién creado.The response also contains the item ID of the newly created contact.

Resolver un contacto como delegado mediante la API administrada de EWSResolve a contact as a delegate by using the EWS Managed API

Para buscar un contacto basándose en un nombre o término posiblemente ambiguo, debe usar uno de los métodos ExchangeService. ResolveName que incluya un parámetro FolderId , de modo que pueda especificar la carpeta de contactos del propietario del buzón.To find a contact based on a possibly ambiguous name or term, you must use one of the ExchangeService.ResolveName methods that includes a FolderId parameter, so that you can specify the mailbox owner's Contacts folder.

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

Una vez que la llamada al método ResolveNames devuelve una respuesta con un identificador, puede obtener, actualizar o eliminar el contacto mediante el uso del identificador y el acceso implícito, — y no es necesario especificar la dirección SMTP del propietario del buzón.After the ResolveNames method call returns a response with an ID, you can get, update or delete the contact using the ID and implicit access—and you do not need to specify the mailbox owner's SMTP address.

Resolver un contacto como delegado mediante EWSResolve a contact as a delegate by using EWS

EWS permite usar el objeto de servicio para que el usuario delegado resuelva los nombres parciales en la carpeta de contactos del propietario del buzón.EWS enables you to use the service object for the delegate user to resolve partial names in the mailbox owner's Contacts folder. En este ejemplo se muestra cómo usar la operación ResolveNames para buscar reuniones en la carpeta de contactos del propietario del buzón de correo que contengan la palabra "Johnson".This example shows how to use the ResolveNames operation to find meetings in the mailbox owner's Contacts folder that contain the word "johnson".

También es la solicitud XML que la API administrada de EWS envía cuando usa el método ResolveName para resolver un contacto.This is also the XML request that the EWS Managed API sends when you use the ResolveName method to resolve a contact.

 <?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: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>

El servidor responde a la solicitud ResolveNames con un mensaje ResolveNamesResponse que incluye un valor de elemento ResponseCode de NoError, lo que indica que la operación se completó correctamente y encontró solo un resultado, o ErrorNameResolutionMultipleResults si se encontraron varios resultados, que es lo que se muestra en el tercer ejemplo de código en función del contacto cree un contacto como delegado mediante la API administrada de EWS.The server responds to the ResolveNames request with a ResolveNamesResponse message that includes a ResponseCode element value of NoError, which indicates that the operation completed successfully and found only one result, or ErrorNameResolutionMultipleResults if multiple results were found - which is what's shown in third code example based on the contact Create a contact as a delegate by using the EWS Managed API. La respuesta también contiene el Itemid de cada resultado.The response also contains the ItemId of each result.

El valor del elemento Itemid se ha abreviado para facilitar su lectura.The value of the ItemId element has been shortened for readability.

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

Ahora que tiene el Itemid para los contactos que coinciden con el nombre ambiguo, puede obtener, actualizar o eliminar los elementos de contacto como delegado mediante EWS mediante el uso de Itemid y el acceso implícito — y no es necesario especificar la dirección SMTP del propietario del buzón.Now that you have the ItemId for the contacts that match the ambiguous name, you can Get, update, or delete contact items as a delegate by using EWS by using the ItemId and implicit access—and you do not need to specify the mailbox owner's SMTP address.

Obtener, actualizar o eliminar elementos de contacto como un delegado mediante la API administrada de EWSGet, update, or delete contact items as a delegate by using the EWS Managed API

Puede usar la API administrada de EWS para obtener, actualizar o eliminar un contacto de la misma manera que realiza estas acciones cuando no está usando acceso delegado.You can use the EWS Managed API to get, update, or delete a contact in the same way that you perform these actions when you're not using delegate access. La única diferencia es que el objeto de servicio es para el usuario delegado.The only difference is that the service object is for the delegate user. El identificador de elemento incluido en la llamada al método BIND identifica de forma única el elemento en el almacén de buzones, en la carpeta de contactos del propietario del buzón.The item ID included in the Bind method call uniquely identifies the item in the mailbox store, in the mailbox owner's Contacts folder.

Tabla 2. Métodos de la API administrada de EWS trabajar con un contacto como delegadoTable 2. EWS Managed API methods working with a contact as a delegate

TareaTask Método de la API administrada de EWSEWS Managed API method Ejemplo de códigoCode example
Obtener un contactoGet a contact
BINDBind
Obtener un elemento mediante la API administrada de EWSGet an item by using the EWS Managed API
Actualizar un contactoUpdate a contact
Enlazar seguido de UpdateBind followed by Update
Actualizar un elemento mediante la API administrada de EWSUpdate an item by using the EWS Managed API
Eliminar un contactoDelete a contact
Enlazar seguida de eliminarBind followed by Delete
Eliminar un elemento mediante la API administrada de EWSDelete an item by using the EWS Managed API

Obtener, actualizar o eliminar elementos de contacto como un delegado mediante EWSGet, update, or delete contact items as a delegate by using EWS

Puede usar EWS para obtener, actualizar o eliminar un contacto de reunión o cita de la misma manera que realiza estas acciones cuando no está usando acceso delegado.You can use EWS to get, update, or delete a meeting or appointment contact in the same way that you perform these actions when you're not using delegate access. La única diferencia es que el objeto de servicio es para el usuario delegado.The only difference is that the service object is for the delegate user. El identificador de elemento incluido en la solicitud GetItem identifica de forma única el elemento en el almacén de buzones, en la carpeta de contactos del propietario del buzón.The item ID included in the GetItem request uniquely identifies the item in the mailbox store, in the mailbox owner's Contacts folder.

Tabla 3. Operaciones de EWS para trabajar con un contacto como delegadoTable 3. EWS operations for working with a contact as a delegate

TareaTask Operación de EWSEWS operation EjemploSample
Obtener un contactoGet a contact
GetItemGetItem
Obtener un elemento mediante EWSGet an item by using EWS
Actualizar un contactoUpdate a contact
GetItem seguido de UpdateItemGetItem followed by UpdateItem
Actualizar un elemento mediante EWSUpdate an item by using EWS
Eliminar un contactoDelete a contact
GetItem seguido de DeleteItemGetItem followed by DeleteItem
Eliminar un elemento mediante EWSDelete an item by using EWS

Vea tambiénSee also