Compartir a través de


Identificar la lista global de direcciones o un conjunto de listas de direcciones con un almacén

En una sesión de Microsoft Outlook donde hay varias cuentas de Microsoft Exchange definidas en el perfil, puede haber varias listas de direcciones asociadas con un almacén. Este tema tiene dos ejemplos de código que muestran cómo recuperar la Lista global de direcciones para un almacén determinado o cómo obtener todos los objetos AddressList asociados con un almacén dado. En cada uno de estos ejemplos de código, el almacén de interés específico es el almacén para la carpeta actual que se muestra en el explorador activo, pero el algoritmo para obtener la Lista global de direcciones o el conjunto de listas de direcciones para un almacén se aplica a cualquier almacén de Exchange.

El siguiente ejemplo de código administrado está escrito en C#. Para ejecutar un ejemplo de código administrado de .NET Framework que necesita llamar un modelo de objetos componentes (COM), debe utilizar un ensamblado de interoperabilidad que defina y asigne interfaces administradas a los objetos COM de la biblioteca de tipos de modelos de objetos. Para Outlook, puede utilizar Visual Studio y el ensamblado de interoperabilidad primario (PIA) de Outlook. Antes de ejecutar ejemplos de código administrado para Outlook 2013, compruebe que tiene el PIA de Outlook 2013 instalado y que ha añadido una referencia al componente biblioteca de objetos de Microsoft Outlook 15.0 en Visual Studio. Debe usar el código siguiente en la ThisAddIn clase de un complemento de Outlook (con Office Developer Tools para Visual Studio). El objeto Application del código debe ser un objeto Application de Outlook de confianza proporcionado por ThisAddIn.Globals. Si desea más información sobre el uso del PIA de Outlook para desarrollar soluciones de Outlook administradas, consulte Outlook 2013 Primary Interop Assembly Reference en MSDN.

El primer ejemplo de código contiene el DisplayGlobalAddressListForStore método y la GetGlobalAddressList función . El método DisplayGlobalAddressListForStore muestra la Lista global de direcciones que está asociada con el almacén actual en el cuadro de diálogo Seleccionar nombres. DisplayGlobalAddressListForStore obtiene primero el almacén actual. Si el almacén actual es un almacén de Exchange, llama a GetGlobalAddressList para obtener la Lista global de direcciones asociada con el almacén actual. GetGlobalAddressList usa el objeto PropertyAccessor y la propiedad MAPI, https://schemas.microsoft.com/mapi/proptag/0x3D150102, para obtener los UID de una lista de direcciones y el almacén actual. GetGlobalAddressList identifica una lista de direcciones como asociada a un almacén si sus UID coinciden y la lista de direcciones es la lista global de direcciones si su propiedad AddressListType es olExchangeGlobalAddressList. Si la llamada a GetGlobalAddressList se realiza correctamente, DisplayGlobalAddressListForStore usa el objeto SelectNamesDialog para mostrar la lista global de direcciones devuelta en el cuadro de diálogo Seleccionar nombres .

void DisplayGlobalAddressListForStore() 
{ 
    // Obtain the store for the current folder 
    // as the current store. 
    Outlook.Folder currentFolder = 
        Application.ActiveExplorer().CurrentFolder 
        as Outlook.Folder; 
    Outlook.Store currentStore = currentFolder.Store; 
 
    // Check if the current store is Exchange. 
    if (currentStore.ExchangeStoreType != 
        Outlook.OlExchangeStoreType.olNotExchange) 
    { 
        Outlook.SelectNamesDialog snd =  
            Application.Session.GetSelectNamesDialog(); 
 
        // Try to get the Global Address List associated  
        // with the current store. 
        Outlook.AddressList addrList =  
            GetGlobalAddressList(currentStore); 
        if (addrList != null) 
        { 
            // Display the Global Address List in the  
            // Select Names dialog box. 
            snd.InitialAddressList = addrList; 
            snd.Display(); 
        } 
    } 
} 
 
public Outlook.AddressList GetGlobalAddressList(Outlook.Store store) 
{ 
    // Property string for the UID of a store or address list. 
    string  PR_EMSMDB_SECTION_UID =  
        @"https://schemas.microsoft.com/mapi/proptag/0x3D150102"; 
 
    if (store == null) 
    { 
        throw new ArgumentNullException(); 
    } 
 
    // Obtain the store UID using the property string and  
    // property accessor on the store. 
    Outlook.PropertyAccessor oPAStore = store.PropertyAccessor; 
 
    // Convert the store UID to a string value. 
    string storeUID = oPAStore.BinaryToString( 
        oPAStore.GetProperty(PR_EMSMDB_SECTION_UID)); 
 
    // Enumerate each address list associated 
    // with the session. 
    foreach (Outlook.AddressList addrList  
        in Application.Session.AddressLists) 
    { 
        // Obtain the address list UID and convert it to  
        // a string value. 
        Outlook.PropertyAccessor oPAAddrList =  
            addrList.PropertyAccessor; 
        string addrListUID = oPAAddrList.BinaryToString( 
            oPAAddrList.GetProperty(PR_EMSMDB_SECTION_UID)); 
 
        // Return the address list associated with the store 
        // if the address list UID matches the store UID and 
        // type is olExchangeGlobalAddressList. 
        if (addrListUID == storeUID && addrList.AddressListType == 
            Outlook.OlAddressListType.olExchangeGlobalAddressList) 
        { 
            return addrList; 
        } 
    } 
    return null; 
} 

El segundo ejemplo de código contiene el método y GetAddressLists la EnumerateAddressListsForStore función . El método EnumerateAddressListsForStore muestra el tipo y el orden de resolución de cada lista de direcciones definida para el almacén actual. EnumerateAddressListsForStore primero obtiene el almacén actual y luego llama a GetAddressLists para obtener el objeto List de .NET Framework genérico que contenga objetos AddressList para el almacén actual. GetAddressLists enumera cada lista de direcciones definida para la sesión, usa el objeto PropertyAccessor y la propiedad con nombre MAPI, https://schemas.microsoft.com/mapi/proptag/0x3D150102, para obtener los UID de una lista de direcciones y el almacén actual. GetGlobalAddressList identifica una lista de direcciones como asociada con un almacén si sus UID coinciden, y devuelve un conjunto de listas de direcciones para el almacén actual. EnumerateAddressListsForStore a continuación, usa las propiedades AddressListType y ResolutionOrder del objeto AddressList para mostrar el tipo y el orden de resolución de cada lista de direcciones devueltas.

private void EnumerateAddressListsForStore() 
{ 
    // Obtain the store for the current folder 
    // as the current store. 
    Outlook.Folder currentFolder = 
       Application.ActiveExplorer().CurrentFolder 
       as Outlook.Folder; 
    Outlook.Store currentStore = currentFolder.Store; 
 
    // Obtain all address lists for the current store. 
    List<Outlook.AddressList> addrListsForStore =  
        GetAddressLists(currentStore); 
    foreach (Outlook.AddressList addrList in addrListsForStore) 
    { 
        // Display the type and resolution order of each  
        // address list in the current store. 
        Debug.WriteLine(addrList.Name  
            + " " + addrList.AddressListType.ToString() 
            + " Resolution Order: " + 
            addrList.ResolutionOrder); 
     }  
} 
 
public List<Outlook.AddressList> GetAddressLists(Outlook.Store store) 
{ 
    List<Outlook.AddressList> addrLists =  
        new List<Microsoft.Office.Interop.Outlook.AddressList>(); 
 
    // Property string for the UID of a store or address list. 
    string PR_EMSMDB_SECTION_UID = 
        @"https://schemas.microsoft.com/mapi/proptag/0x3D150102"; 
 
    if (store == null) 
    { 
        throw new ArgumentNullException(); 
    } 
 
    // Obtain the store UID and convert it to a string value. 
    Outlook.PropertyAccessor oPAStore = store.PropertyAccessor; 
    string storeUID = oPAStore.BinaryToString( 
        oPAStore.GetProperty(PR_EMSMDB_SECTION_UID)); 
 
    // Enumerate each address list associated 
    // with the session. 
    foreach (Outlook.AddressList addrList 
        in Application.Session.AddressLists) 
    { 
        // Obtain the address list UID and convert it to  
        // a string value. 
        Outlook.PropertyAccessor oPAAddrList = 
            addrList.PropertyAccessor; 
        string addrListUID = oPAAddrList.BinaryToString( 
            oPAAddrList.GetProperty(PR_EMSMDB_SECTION_UID)); 
         
        // Add the address list to the resultant set of address lists 
        // if the address list UID matches the store UID. 
        if (addrListUID == storeUID) 
        { 
            addrLists.Add(addrList); 
        } 
    } 
    // Return the set of address lists associated with the store. 
    return addrLists; 
} 

Soporte técnico y comentarios

¿Tiene preguntas o comentarios sobre VBA para Office o esta documentación? Vea Soporte técnico y comentarios sobre VBA para Office para obtener ayuda sobre las formas en las que puede recibir soporte técnico y enviar comentarios.