Compartir a través de


Filtrar y mostrar propiedades multivalor al enumerar elementos de una carpeta

En este ejemplo se muestra cómo filtrar y mostrar propiedades multivalor al enumerar elementos de una carpeta.

Ejemplo

Nota:

El siguiente ejemplo de código es un fragmento de Programming Applications for Microsoft Office Outlook 2007 (Programación de aplicaciones para Microsoft Office Outlook 2007).

El objeto Table representa un conjunto de datos de elementos de un objeto Folder o Search. Cuando se agrega por primera vez una propiedad binaria, de fecha o multivalor a un objeto Table, la manera en la que se hace referencia a la propiedad afecta a su tipo y a su formato. Como las referencias de nombres integrados devuelven a veces un valor de otra columna en lugar de una referencia de espacio de nombres, debe determinar si se hace referencia a la propiedad por su nombre explícito integrado (si procede) o por espacio de nombres (independientemente de la existencia de un nombre explícito integrado). En la tabla siguiente se muestran las diferencias entre las representaciones de los valores de las propiedades (según su tipo y formato) de acuerdo con el tipo original de la propiedad:

Tipo

Tipo devuelto si la propiedad especificada usa un nombre integrado

Tipo devuelto si la propiedad especificada usa un espacio de nombres

Binario (PT_BINARY)

Cadena

Matriz de bytes

Fecha (PT_SYSTIME)

DateTime local

DateTime UTC

Multivalor (también conocido como tipo de palabra clave), como la propiedad Categories (PT_MV_STRING8)

Cadena que contiene valores separados por comas

Matriz unidimensional que contiene un elemento por cada palabra clave

En el siguiente ejemplo de código se muestra cómo agregar una propiedad MAPI de espacio de nombres de cadena al objeto Table y cómo afectan las propiedades multivalor a los valore devueltos en un objeto Column. El procedimiento TableMultiValuedProperties filtra el objeto Table por las columnas en las que la propiedad Categories no es una referencia nula. La propiedad Categories se representa por una propiedad que usa el espacio de nombres de cadena MAPI. Se crea un filtro de búsqueda y ubicación DAV (DASL) para los elementos que tienen categorías (el filtro actual devuelve las categorías que no tienen una referencia nula). Después se agrega una columna Categories al objeto Table concatenando el especificador de tipo 0000001f, con la constante categoriesProperty. Por último, el objeto Column que representa la propiedad Categories contiene una matriz de cadena unidimensional donde cada elemento de la matriz representa una categoría asignada al elemento. Las propiedades Categories y Subject del elemento se escriben en los agentes de escucha de seguimiento de la colección Listeners.

Si usa Visual Studio para probar este ejemplo de código, primero debe agregar una referencia al componente de la biblioteca de objetos de Microsoft Outlook 15.0 y especificar la variable de Outlook al importar el espacio de nombres Microsoft.Office.Interop.Outlook. La instrucción using no debe producirse directamente antes de las funciones en el ejemplo de código, pero debe agregarse antes de la declaración de clase pública. La siguiente línea de código muestra cómo realizar la importación y la asignación en C#.

using Outlook = Microsoft.Office.Interop.Outlook;
private void TableMultiValuedProperties()
{
    const string categoriesProperty =
        "http://schemas.microsoft.com/mapi/string/"
        + "{00020329-0000-0000-C000-000000000046}/Keywords";
    // Inbox
    Outlook.Folder folder =
        Application.Session.GetDefaultFolder(
        Outlook.OlDefaultFolders.olFolderInbox)
        as Outlook.Folder;
    // Call GetTable with filter for categories
    string filter = "@SQL="
        + "Not(" + "\"" + categoriesProperty
        + "\"" + " Is Null)";
    Outlook.Table table =
        folder.GetTable(filter,
        Outlook.OlTableContents.olUserItems);
    // Add categories column and append type specifier
    table.Columns.Add(categoriesProperty + "/0000001F");
    while (!table.EndOfTable)
    {
        Outlook.Row nextRow = table.GetNextRow();
        string[] categories =
            (string[])nextRow[categoriesProperty + "/0000001F"];
        Debug.WriteLine("Subject: " + nextRow["Subject"]);
        Debug.Write("Categories: ");
        foreach (string category in categories)
        {
            Debug.Write("\t" + category);
        }
        Debug.WriteLine("\n");
    }
}

Vea también