Compartir a través de


Buscar una frase en el cuerpo de los elementos de una carpeta

En este ejemplo se busca la cadena "office" en la sección Cuerpo de todos los elementos de la Bandeja de entrada.

Ejemplo

En este ejemplo de código se usa una sintaxis de DASL (DAV Searching and Locating) para especificar una consulta. Para construir el filtro, el ejemplo de código comprueba primero si la búsqueda instantánea está habilitada en el almacén predeterminado para determinar si se debe usar la palabra clave ci_phrasematch para una coincidencia de frase exacta de "office" en el cuerpo del elemento o la palabra clave like para que coincida con cualquier aparición de "office" como una cadena exacta o una subcadena en el cuerpo del elemento. El ejemplo luego aplica el filtro del método GetTable en la Bandeja de entrada y obtiene los resultados de un objeto Table. En el ejemplo de código se muestra el asunto de cada uno de los elementos devueltos en Table.

En el código de ejemplo se especifica la propiedad Body usando la representación del espacio de nombres urn:schemas:httpmail:textdescription.

La sintaxis para usar la palabra clave ci_phrasematch es:

<PropertySchemaName> ci_phrasematch <ComparisonString>

La sintaxis para utilizar la palabra clave like para la coincidencia de prefijo es:

<PropertySchemaName> like <Token>%

La sintaxis para utilizar la palabra clave like para la coincidencia de subcadena es:

<PropertySchemaName> like %<Token>%

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 Imports o using no deben producirse directamente antes de las funciones en el ejemplo de código, pero deben agregarse antes de la declaración de clase pública. Las líneas siguientes de código muestran cómo realizar la importación y la asignación en Visual Basic y C#.

Imports Outlook = Microsoft.Office.Interop.Outlook
using Outlook = Microsoft.Office.Interop.Outlook;
Private Sub DemoSearchBody()
    Dim filter As String
    If (Application.Session.DefaultStore.IsInstantSearchEnabled) Then
        filter = "@SQL=" & Chr(34) _
            & "urn:schemas:httpmail:textdescription" & Chr(34) _
            & " ci_phrasematch 'office'"
    Else
        filter = "@SQL=" & Chr(34) _
            & "urn:schemas:httpmail:textdescription" & Chr(34) _
            & " like '%office%'"
    End If
    Dim table As Outlook.Table = _
        Application.Session.GetDefaultFolder( _
        Outlook.OlDefaultFolders.olFolderInbox).GetTable( _
        filter, Outlook.OlTableContents.olUserItems)
    While Not (table.EndOfTable)
        Dim row As Outlook.Row = table.GetNextRow()
        Debug.WriteLine(row("Subject"))
    End While
End Sub
private void DemoSearchBody()
{
    string filter;
    if (Application.Session.DefaultStore.IsInstantSearchEnabled)
    {
        filter = "@SQL=" + "\""
            + "urn:schemas:httpmail:textdescription" + "\""
            + " ci_phrasematch 'office'";
    }
    else
    {
        filter = "@SQL=" + "\""
            + "urn:schemas:httpmail:textdescription" + "\""
            + " like '%office%'";
    }
    Outlook.Table table = Application.Session.GetDefaultFolder(
        Outlook.OlDefaultFolders.olFolderInbox).GetTable(
        filter, Outlook.OlTableContents.olUserItems);
    while (!table.EndOfTable)
    {
        Outlook.Row row = table.GetNextRow();
        Debug.WriteLine(row["Subject"]);
    }
}

Vea también