Compartir a través de


Filtrar y mostrar propiedades calculadas al enumerar elementos de una carpeta

En este ejemplo se muestra cómo filtrar y mostrar propiedades calculadas al enumerar elementos en 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. El objeto Row representa las filas de datos de un objeto Table. El objeto Columns representa las propiedades del objeto Table. Puede agregar determinadas propiedades al objeto Table mediante el método Add(String) del objeto Columns. Puede filtrar determinadas propiedades mediante el método Restrict(String) del objeto Table. Sin embargo, algunas de las propiedades no pueden agregarse al objeto Table mediante Columns.Add ni pueden filtrarse mediante el método Restrict. En la siguiente tabla se muestra si el objeto Table admite las propiedades al usar el método Columns.Add o el método Restrict.

Propiedad

Para Columns.Add

Para Restrict

Propiedades binarias, como EntryID.

Se admiten a través de las propiedades integradas o de espacio de nombres.

No admitida. Outlook producirá un error.

Propiedades de cuerpo, como Body y HTMLBody; y la representación del espacio de nombres de esas propiedades, como PR_RTF_COMPRESSED.

La propiedad Body se admite con la condición de que solo los primeros 255 bytes del valor se almacenan en un objeto Table. No se admiten otras propiedades que representan el contenido del cuerpo en HTML o RTF. Como solo se devuelven los primeros 255 bytes de la propiedad Body, si desea obtener todo el contenido del cuerpo de un elemento en texto o en HTML, use la propiedad EntryID del elemento en el método GetItemFromID(String, Object) para obtener el objeto de elemento. Después, recupere el valor completo de Body a través del objeto de elemento.

Sólo la propiedad Body representada en texto es compatible con un archivo. Esto significa que se debe hacer referencia a la propiedad en un filtro de búsqueda y ubicación DAV (DASL) como urn:schemas:http-mail:textdescription y no puede filtrar por ninguna etiqueta HTML en el cuerpo. Para mejorar el rendimiento, utilice palabras clave de indizador de contexto en el filtro para que coincidan con cadenas en el cuerpo.

Propiedades del equipo, como AutoResolvedWinner y BodyFormat.

No admitidas.

No admitidas.

Propiedades multivalor, como Categories, Children, Companies y VotingOptions.

Admitidas.

Admitidas, siempre que se cree una consulta DASL mediante la representación del espacio de nombres.

Propiedades que devuelven un objeto, como Attachments, Parent, Recipients, RecurrencePattern y UserProperties.

No admitidas.

No admitidas.

En la tabla siguiente se enumeran las propiedades no válidas conocidas que no se pueden agregar al objeto Table mediante el uso de Columns.Add. Si intenta agregar una propiedad de esta lista, Outlook producirá un error.

AutoResolvedWinner

BodyFormat

Clase

Companies

ContactNames

DLName

DownloadState

FlagIcon

HtmlBody

InternetCodePage

IsConflict

IsMarkedAsTask

MeetingWorkspaceURL

MemberCount

Permission

PermissionService

RecurrenceState

ResponseState

Saved

Enviados

Enviado

TaskSubject

No leídos

VotingOptions

Aunque algunas propiedades calculadas no se pueden agregar a las columnas de una tabla, el siguiente ejemplo de código resuelve esta limitación. GetToDoItems usa una consulta DASL para restringir los elementos que aparecen en el objeto Table. Si la propiedad calculada tiene una representación del espacio de nombres, se usa la representación del espacio de nombres para crear una consulta DASL que restringe el objeto Table para que devuelva filas para un valor específico de la propiedad calculada. GetToDoItems obtiene elementos de la Bandeja de entrada para los que el valor de la propiedad IsMarkedAsTask es igual a true, y luego asigna valores a determinadas propiedades de las tareas, como TaskSubject, TaskDueDate, TaskStartDate y TaskCompletedDate. Por último, esas propiedades 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 GetToDoItems()
{
    // Obtain Inbox
    Outlook.Folder folder =
        Application.Session.GetDefaultFolder(
        Outlook.OlDefaultFolders.olFolderInbox)
        as Outlook.Folder;
    // DASL filter for IsMarkedAsTask
    string filter = "@SQL=" + "\"" +
        "http://schemas.microsoft.com/mapi/proptag/0x0E2B0003"
        + "\"" + " = 1";
    Outlook.Table table =
        folder.GetTable(filter,
        Outlook.OlTableContents.olUserItems);
    table.Columns.Add("TaskStartDate");
    table.Columns.Add("TaskDueDate");
    table.Columns.Add("TaskCompletedDate");
    // Use GUID/ID to represent TaskSubject
    table.Columns.Add(
        "http://schemas.microsoft.com/mapi/id/" +
        "{00062008-0000-0000-C000-000000000046}/85A4001E");
    while (!table.EndOfTable)
    {
        Outlook.Row nextRow = table.GetNextRow();
        StringBuilder sb = new StringBuilder();
        sb.AppendLine("Task Subject: " + nextRow[9]);
        sb.AppendLine("Start Date: "
            + nextRow["TaskStartDate"]);
        sb.AppendLine("Due Date: "
            + nextRow["TaskDueDate"]);
        sb.AppendLine("Completed Date: "
            + nextRow["TaskCompletedDate"]);
        sb.AppendLine();
        Debug.WriteLine(sb.ToString());
    }
}

Vea también