Compartilhar via


Filtrar e exibir propriedades calculadas ao enumerar itens em uma pasta

Este exemplo mostra como filtrar e exibir propriedades calculadas ao enumerar itens em uma pasta.

Exemplo

Observação

O exemplo de código a seguir é um trecho de Programar aplicativos para o Microsoft Office Outlook 2007.

O objeto Table representa um conjunto de dados de itens de um objeto Folder ou Search. O objeto Row representa linhas de dados em uma Table (tabela). O objeto Columns representa propriedades de Table. Você pode adicionar certas propriedades ao objeto Table usando o método Add(String) do objeto Columns. Você pode filtrar certas propriedades usando o método Restrict(String) do objeto Table. No entanto, algumas propriedades não podem ser adicionadas ao objeto Table usando Columns.Add, e também não podem ser filtrados com o uso do método Restrict. A tabela a seguir descreve se propriedades têm suporte para o objeto Table quando se usa o método Columns.Add ou Restrict.

Propriedade

Para Columns.Add

Para Restrict

Propriedades binárias como EntryID.

Suporte por meio de propriedade interna ou de namespace.

Sem suporte. O Outlook irá gerar um erro.

Propriedades do corpo, incluindo Body e HTMLBody, e representação do namespace dessas propriedades, incluindo PR_RTF_COMPRESSED.

A propriedade Body é suportada com a condição de que somente os primeiros 255 bytes do valor sejam armazenados em um objeto Table. Não há suporte para outras propriedades que representam o conteúdo do corpo em HTML ou RTF. Pelo motivo de somente os primeiros 255 bytes de Body serem retornados, se você quiser obter o conteúdo completo do corpo de um item em texto ou HTML, use o EntryID do item no método GetItemFromID(String, Object) para obter o objeto do item. Depois, recupere o valor completo de Body através do objeto do item.

Somente a propriedade Body representada em texto tem suporte em um filtro. Isso significa que a propriedade deve ser referenciada em um filtro DAV Searching and Locating (DASL) como urn:schemas:http-email:textdescription, e você não pode filtrar nenhuma marca HTML no corpo. Para melhorar o desempenho, use palavras-chave do indexador de contexto no filtro para combinar cadeias de caracteres no corpo.

Propriedades do computador, como AutoResolvedWinner e BodyFormat.

Sem suporte.

Sem suporte.

Propriedades de valores múltiplos, como Categories, Children, Companies e VotingOptions.

Com suporte.

Com suporte, desde que você possa criar uma consulta DASL usando a representação do namespace.

Propriedades que retornam um objeto, como Attachments, Parent, Recipients, RecurrencePattern e UserProperties.

Sem suporte.

Sem suporte.

A tabela a seguir lista as propriedades inválidas conhecidas que não podem ser adicionadas ao objeto Table com o uso de Columns.Add. Se você tentar adicionar uma propriedade desta lista, o Outlook irá gerar um erro.

AutoResolvedWinner

BodyFormat

Class

Companies

ContactNames

DLName

DownloadState

FlagIcon

HtmlBody

InternetCodePage

IsConflict

IsMarkedAsTask

MeetingWorkspaceURL

MemberCount

Permission

PermissionService

RecurrenceState

ResponseState

Saved

Sent

Submitted

TaskSubject

Unread

VotingOptions

Embora algumas propriedades calculadas não possam ser adicionadas à coluna definida para uma tabela, o seguinte exemplo de código funciona para contornar esta limitação. GetToDoItems usa uma consulta DASL para restringir os itens que aparecem em Table. Se a propriedade computada tem uma representação de namespace, a representação de namespace é usada para criar uma consulta DASL que restringe o objeto Table para retornar linhas de um valor específico da propriedade calculada. GetToDoItems coloca itens na Caixa de Entrada onde o valor da propriedade IsMarkedAsTask é igual a verdadeiro, e depois atribui valores a determinadas propriedades de tarefas como TaskSubject, TaskDueDate, TaskStartDate e TaskCompletedDate. Finalmente, essas propriedades são escritas para rastrear ouvintes da coleção Listeners.

Se usar o Visual Studio para testar este exemplo de código, adicione primeiro uma referência ao componente da biblioteca de objetos do Microsoft Outlook 15.0 e especifique a variável do Outlook quando importar o namespace Microsoft.Office.Interop.Outlook. A instruçãousing não deve ocorrer diretamente antes das funções no exemplo de código, mas deve ser adicionada antes da declaração de classe pública. The following line of code shows how to do the import and assignment in 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());
    }
}

Confira também