Eficaz filtrar elementos de contacto en una carpeta de contactos en Outlook (2010) (traducción automática)

Importante

En este artículo es la máquina que se traduce, vea la renuncia de responsabilidad. Encontrará la versión en inglés de este artículo aquí para su referencia.

Ayuda visual de Office

Resumen:  Aprenda a obtener de forma eficaz y filtrar la información de los elementos de contacto en Microsoft Outlook 2010. En concreto, en este artículo se describe cómo utilizar el objeto Table y cómo utilizar el método GetTable del objeto Folder.

Applies to: Microsoft Outlook 2010 | Microsoft Visual Studio 2010

Publicado:  Octubre de 2010

Proporcionado por:  Jonathan Fingold, puente de SDK, LLC

Introducción

El objeto Table representa un rowset dinámica de sólo lectura de datos en un objeto Folder o Search, y puede utilizar el método GetTable del objeto Folder para obtener un objeto Table que representa los elementos de una carpeta. El objeto de Table permite para rapidez la enumeración y filtrar los elementos de la carpeta. Cada fila de un Table representa un elemento en la carpeta, y cada columna representa una propiedad de un elemento. El objeto de Table inicial contiene un subconjunto predeterminado de las propiedades disponibles. En este artículo se utiliza un proyecto de C# Microsoft Outlook 2010-in para mostrar cómo utilizar este objeto.

Codifíquelo

El ejemplo proporcionado con este Visual cómo utiliza un proyecto de C# Outlook 2010 complemento escrito en Microsoft Visual Studio 2010. Para utilizar este ejemplo, ya debe estar familiarizado con C# y crear formularios personalizados y complementos para Outlook. En este ejemplo también se basa en la funcionalidad que se presentan en el Eficiente obtener y establecer propiedades personalizadas en una carpeta de contactos en Outlook (2010) (traducción automática) Visual How To.

.files

El complemento contiene cinco clases merece la pena comentar:

  • ThisAddin: inicializa el complemento, proporciona acceso a la carpeta de contactos de oportunidades y crea la carpeta oportunidades si no existe.

  • OpportunitiesRibbon: proporciona un complemento de cinta que contiene un botón de Obtener informe que muestra el formulario de informe y dos botones para importar y exportar datos entre Outlook y los archivos de datos especificado.

  • Form1: Obtiene un objeto Table para los elementos en la carpeta de contactos de oportunidades y muestra la información de un control DataGrid.

  • Constants: se definen las referencias de la propiedad para las propiedades integradas y personalizadas que este complemento, importa y exporta y contiene otras constantes, como, por ejemplo, los pantalla nombres y tipos de datos de las propiedades.

  • ContactItemHelper: controla las operaciones de archivo asociadas a la importación y exportación de los datos de propiedad.

Además de los archivos de proyecto de Visual Studio, el archivo .zip de ejemplo de código también contiene dos archivos adicionales: ventas Opportunity.oft y ContactData.csv. Tendrá que publicar el formulario de oportunidades de ventas en la biblioteca de formularios personales con el nombre "Oportunidad de ventas".

Además, para rellenar la carpeta de contactos de oportunidades, debe hacer lo siguiente:

  1. Guarde el archivo ContactData.csv.

  2. En el archivo OpportunitiesRibbon.cs, actualizar el campo de la clase dataImportFile para que contenga la ruta de acceso para el archivo ContactData.csv.

  3. Compile y ejecute el complemento, que inicia Outlook.

  4. En la cinta de opciones de complementos, haga clic en Importar datos.

Puesta en marcha y la carpeta oportunidades

La clase ThisAddin define una propiedad de OpportunitiesFolder, para obtener el objeto Folder para la carpeta oportunidades y un método de CreateOpportunitiesFolder, para crear la carpeta si no existe. Al crear la carpeta oportunidades, el complemento utiliza el objeto de UserDefinedProperties para definir los cinco propiedades de usuario de las cinco propiedades personalizadas que corresponden a los campos en el formulario de oportunidades de ventas.

Obtener la clase de tabla predeterminado

Cuando se carga el formulario cuando se hace clic en el botón Restablecer , el formulario obtiene el objeto de Table predeterminado de la carpeta de contactos de oportunidades y, a continuación, muestra esa información en un informe (como se muestra en el código siguiente). Además, el método ShowContactReport del formulario agrega un nuevo informe mediante una llamada a NewDataGrid o un mensaje de error mediante una llamada a NewErrorMessage.

El Table predeterminado contiene una fila para cada contacto en la carpeta e incluye las siguientes propiedades de contactos de ocho: EntryID, Subject, CreationTime, LastModificationTime, MessageClass, FirstName, LastName y CompanyName.

public Form1()
{
    InitializeComponent();

    ShowDefaultReport();
}

/// <summary>Handles the Click event for the form's Reset button.</summary>
private void resetButton_Click(object sender, EventArgs e)
{
    ShowDefaultReport();
}

/// <summary>Displays the contact data with the default columns and
/// does not filter the rows.</summary>
private void ShowDefaultReport()
{
    Outlook.Folder opportunities =
        Globals.ThisAddIn.OpportunitiesFolder;
    if (opportunities != null)
    {
        Outlook.Table contacts = opportunities.GetTable();

        ShowContactReport(contacts);
    }
    else
    {
        ShowContactReport(null);
    }
}

/// <summary>Displays the data from the specified Table
/// object.</summary>
/// <param name="table">The Table containing the contact data
/// to display. </param>
private void ShowContactReport(Outlook.Table table)
{
    this.SuspendLayout();

    // Free memory for any old controls.
    foreach (Control c in this.reportPanel.Controls)
    {
        if (c != null)
        {
            c.Dispose();
        }
    }

    this.reportPanel.Controls.Clear();

    if (table != null)
    {
        // Add the new control with updated contact information.
        this.reportPanel.Controls.Add(NewDataGrid(table));
    }
    else
    {
        this.reportPanel.Controls.Add(ErrorMessage());
    }

    this.ResumeLayout();
    this.Refresh();
}

Acceso a datos de tabla

La tabla proporciona información acerca de las propiedades que contiene en su propiedad de Columns, que contiene una colección de objetos de Column.

Gg262880.note(es-es,office.14).gifNota:
La colección de Columns de Outlook utiliza la indización de base uno.

Cuando se agrega una propiedad personalizada a un objeto Table, esa propiedad se convierte en una columna en la tabla. El valor de la propiedad Name del objeto Column contiene el nombre de propiedad que se hace referencia por espacio de nombres, en lugar del nombre para mostrar la propiedad. El formulario utiliza el método GetDisplayName de la clase Constants para devolver el nombre de presentación deseado para la propiedad que aparezca en el informe, como se muestra en el siguiente código. Además, el formulario da formato a la columna de la estimación de la compra como moneda.

Para enumerar las filas que contiene el objeto Table, utilice los métodos MoveToStart y GetNextRow y la propiedad EndOfTable. Para tener acceso a las propiedades contenidas en cada fila, utilice el método GetValues del objeto Row. Los valores se devuelven en una matriz de objetos y el orden de los valores coincide con el orden de las columnas de la colección la tabla Columns.

/// <summary>Creates a DataGridView control that displays the contact
/// information contained in the specified Table object.</summary>
/// <param name="table">The Table containing the contact data to
/// display. </param>
/// <returns>The new DataGridView.</returns>
private DataGridView NewDataGrid(Outlook.Table table)
{
    DataGridView dataGrid = new DataGridView();

    // For each column in the table, add a column to the control. Note
    // that the Table column collection uses 1-based indexing; whereas,
    // the DataGridView column collection uses 0-based indexing.
    dataGrid.ColumnCount = table.Columns.Count;
    for (int i = 1; i <= table.Columns.Count; i++)
    {
        Outlook.Column tableColumn = table.Columns[i];
        DataGridViewColumn dataColumn = dataGrid.Columns[i - 1];

        dataColumn.Name = tableColumn.Name;
        dataColumn.HeaderText =
            Constants.GetDisplayName(tableColumn.Name);
        dataColumn.ValueType = Constants.GetDataType(tableColumn.Name);
        dataColumn.AutoSizeMode =
            DataGridViewAutoSizeColumnMode.AllCells;

        // Format the Purchase Estimate property data as currency.
        if (dataColumn.HeaderText ==
            Constants.purchaseEstimateDisplayName)
        {
            dataColumn.DefaultCellStyle.Format = "C";
        }
    }

    // For each row in the table, add the contact data to the control.
    table.MoveToStart();
    while (!table.EndOfTable)
    {
        Outlook.Row contact = table.GetNextRow();
        object[] contactData = contact.GetValues();

        // The ordering of the contact property values returned by the 
        // Table's GetValues method matches the ordering of the column 
        // information returned by the Table's Columns property.
        dataGrid.Rows.Add(contactData);
    }

    // Modify the control's display and behavior properties.
    dataGrid.AutoSize = true;
    dataGrid.Dock = DockStyle.Fill;
    dataGrid.BorderStyle = BorderStyle.FixedSingle;

    dataGrid.ReadOnly = true;

    return dataGrid;
}

Un objeto de tabla en las propiedades integradas de filtrado

Puede filtrar los elementos o bien al obtener la tabla desde la carpeta, mediante el método GetTable con los criterios de filtrado especificados, o después de crea la tabla, mediante el método Restrict. En cualquier caso, el método devuelve un nuevo objeto Table. En el código siguiente, el método GetTable de la carpeta filtra los elementos mediante el uso de una cadena de consulta de Jet para obtener únicamente la información de los elementos con un valor de CompanyName de "Adventure Works".

Los métodos GetTable y Restrict admiten cadenas de consulta tanto Jet y DAV Searching and Locating (DASL).

/// <summary>Handles the Click event for the form's Filter
/// button.</summary>
/// <remarks>Displays the contact data with the default columns
/// and filters the rows based on the CompanyName property.
/// </remarks>
private void filterButton_Click(object sender, EventArgs e)
{
    Outlook.Folder opportunities =
        Globals.ThisAddIn.OpportunitiesFolder;
    if (opportunities != null)
    {
        string criteria = "[CompanyName] = 'Adventure Works'";
        Outlook.Table contacts =
            opportunities.GetTable(criteria);

        ShowContactReport(contacts);
    }
    else
    {
        ShowContactReport(null);
    }
}

Modificación de las columnas de un objeto Table

Puede agregar o quitar columnas de una tabla existente llamando al método Add o Remove en la colección Columns para el objeto Table. El parámetro de Name puede contener un nombre de propiedad explícito integrado o un nombre de propiedad que se hace referencia por espacio de nombres. Sin embargo, se debe hacer referencia como el nombre de propiedad en la configuración regional de inglés.

Para agregar una propiedad personalizada a un Table, tendrá que hacer referencia a la propiedad por su espacio de nombres y anexar explícitamente el tipo de la propiedad al final de la referencia de propiedad, como se muestra en el siguiente código.

/// <summary>Handles the Click event for the form's Customize
/// Columns button.</summary>
/// <remarks>Displays the contact data with the addition of the
/// CustomerID built-in property and the five Sales Opportunity
/// custom properties. Does not filter the rows.</remarks>
private void customizeColumnsButton_Click(
    object sender, EventArgs e)
{
    Outlook.Folder opportunities =
        Globals.ThisAddIn.OpportunitiesFolder;
    if (opportunities != null)
    {
        Outlook.Table contacts = opportunities.GetTable();
        AddCustomColumns(contacts);

        ShowContactReport(contacts);
    }
    else
    {
        ShowContactReport(null);
    }
}

/// <summary>For a Table object, removes the CreationTime and
/// LastModificationTime properties and adds the CustomerID
/// built-in property and the five Sales Opportunity custom
/// properties.</summary>
private void AddCustomColumns(Outlook.Table contacts)
{
    for (int i = contacts.Columns.Count; i > 0; i--)
    {
        if (contacts.Columns[i].Name ==
            Constants.creationTimeDisplayName ||
            contacts.Columns[i].Name ==
            Constants.lastModificationTimeDisplayName)
        {
            contacts.Columns.Remove(i);
        }
    }

    contacts.Columns.Add(Constants.customerIDProperRef);

    contacts.Columns.Add(Constants.encounterDatePropTag);
    contacts.Columns.Add(Constants.purchaseEstimatePropTag);
    contacts.Columns.Add(Constants.salesRepPropTag);
    contacts.Columns.Add(Constants.salesValuePropTag);
    contacts.Columns.Add(Constants.tradeShowPropTag);
}

La clase Constants incluye las cadenas de referencia para las propiedades personalizadas de pedido de venta que especifican el tipo de propiedad, como se muestra en el siguiente código.

// References to custom properties by their namespaces, including data
// type.
public static readonly string encounterDatePropTag =
    encounterDatePropRef + "/0x00000040";
public static readonly string purchaseEstimatePropTag =
    purchaseEstimatePropRef + "/0x00000006";
public static readonly string salesRepPropTag =
    salesRepPropRef + "/0x0000001f";
public static readonly string salesValuePropTag =
    salesValuePropRef + "/0x00000005  ";
public static readonly string tradeShowPropTag =
    tradeShowPropRef + "/0x0000000b";

Filtrado de un objeto de la tabla de propiedades personalizadas

Puede filtrar elementos por la mayoría de las propiedades disponibles. Sin embargo, las propiedades personalizadas deben definirse en la carpeta donde va a aplicar el filtro. La llamada producirá un error si aplica un filtro en una propiedad personalizada que se define únicamente en el elemento. En el código siguiente, el método GetTable de la carpeta filtra los elementos y utiliza una cadena de consulta de Jet para obtener información sólo para artículos con un valor de representante de ventas de "Contreras". A continuación, se modifica la colección Columns para el Table y la tabla resultante se muestra en el informe.

/// <summary>Handles the Click event for the form's Customize
/// Columns button.</summary>
/// <remarks>Displays the contact data with the addition of the
/// CustomerID built-in property and the five Sales Opportunity
/// custom properties. Filters the rows based on the custom 
/// Sales Rep property.</remarks>
private void filterCustomColumnsButton_Click(
    object sender, EventArgs e)
{
    Outlook.Folder opportunities =
        Globals.ThisAddIn.OpportunitiesFolder;
    if (opportunities != null)
    {
        string criteria = string.Format("[{0}] = 'Karen Berg'",
            Constants.salesRepDisplayName);
        Outlook.Table contacts =
            opportunities.GetTable(criteria);
        AddCustomColumns(contacts);

        ShowContactReport(contacts);
    }
    else
    {
        ShowContactReport(null);
    }
}

Léalo

El artículo de Eficiente obtener y establecer propiedades personalizadas en una carpeta de contactos en Outlook (2010) (traducción automática) mostraba cómo cargar datos desde un archivo de datos para rellenar los elementos de contacto en la carpeta oportunidades. Los contactos de esta carpeta incluyen información de ventas personalizado, que puede tener acceso a través de un formulario personalizado de la oportunidad de venta.

Si desea obtener un informe de los datos existentes, puede utilizar el objeto Table, ya que proporciona una manera eficaz de acceso y filtrar datos de propiedad. El objeto Table representa un rowset dinámica de sólo lectura de datos en un objeto Folder o Search, y puede utilizar el método GetTable de la Folder para obtener un Table que representa los elementos de una carpeta. Para obtener elementos de la carpeta, utilice el método GetTable en la carpeta oportunidades.

Objeto de tabla

El objeto Table permite rapidez la enumeración y filtrar los elementos de la carpeta. Cada fila de una Table representa un elemento en la carpeta, y cada columna representa una propiedad de un elemento. El objeto de Table inicial contiene un subconjunto predeterminado de las propiedades disponibles: EntryID, Subject, CreationTime, LastModificationTime, MessageClass, FirstName, LastName y CompanyName.

Uso del objeto de tabla

Para demostrar algunas capacidades del objeto Table, el complemento que contiene un informe que muestra la tabla de datos en un formulario. El formulario proporciona cuatro botones para obtener acceso a la tabla de datos.

Cuando se carga el formulario, se obtiene de la tabla predeterminada de la carpeta oportunidades y muestra la información predeterminada que se ha proporcionado. El botón Restablecer también obtiene la misma tabla y muestra la misma información.

El botón de Filtro especifica los criterios de filtro para obtener un conjunto específico de contactos en la carpeta oportunidades: en este caso, los criterios selecciona sólo los elementos que tienen un valor de CompanyName de "Adventure Works" y, a continuación, muestra la información disponible en la tabla.

El botón Personalizar columnas obtiene la tabla predeterminada de la carpeta oportunidades, quita las columnas CreationTime y LastModificationTime de la tabla, agrega las propiedades personalizadas de la oportunidad de ventas a la tabla y, a continuación, muestra la información resultante.

Por último, en el botón de la Columna de filtro personalizado especifica los criterios de filtro para obtener un conjunto específico de contactos en la carpeta oportunidades (esta vez, el selecciona criterios sólo los elementos que tienen un valor de propiedad personalizado de representante de ventas de "Contreras"), modifica las columnas que se encuentra en la tablay, a continuación, muestra la información resultante.

Agregar propiedades personalizadas a una tabla

Las propiedades personalizadas en este ejemplo abarcan algunos de los tipos de datos posibles:

  • Fecha encontró contiene un valor de fecha, que es DateTime en C#.

  • Estimación de la compra contiene un valor de moneda, que es double en C#.

  • El representante de ventas contiene un valor de cadena.

  • Valor de ventas contiene un valor entero de 32 bits con signo y representa el rango del contacto.

  • Feria comercial contiene un valor booleano, que es bool en C#.

Para agregar una propiedad personalizada a un Table, tendrá que hacer referencia a la propiedad por su espacio de nombres y anexar explícitamente el tipo de la propiedad al final de la referencia de propiedad. Para obtener más información acerca de cómo agregar propiedades personalizadas a una tabla, vea los temas MSDN siguientes:

Filtrado utilizando un objeto Table

Puede filtrar elementos por la mayoría de las propiedades disponibles. Sin embargo, las propiedades personalizadas deben definirse en la carpeta donde va a aplicar el filtro. La llamada producirá un error si aplica un filtro en una propiedad personalizada que se define únicamente en el elemento.

Los métodos GetTable y Restrict admiten cadenas de consulta tanto Jet y DAV Searching and Locating (DASL).

Consideraciones

Hay varias cosas a considerar cuando se utilizan los métodos GetProperties y SetProperties:

  • Aunque las adiciones y eliminaciones de la carpeta subyacente se reflejan en las filas en el objeto Table, el Table no admite los eventos o métodos para actualizar la carpeta subyacente. Si es necesario disponer de un objeto modificable de la Table, obtener el identificador de entrada para esa fila de la columna de Id. de entrada predeterminada en la Table y, a continuación, utilice el método GetItemFromID del objeto NameSpace para obtener el elemento completo.

  • Sólo se puede utilizar el método Restrict del objeto Table para aplicar otro filtro a ese Table si el objeto primario de la Table es un Folder. Si el objeto primario es un objeto de Search, el método Restrict devolverá un error.

  • Algunas propiedades, como, por ejemplo, las propiedades binarias, propiedades computadas y contenido HTML o RTF, no se puede agregar a un Table mediante el método Add de la colección Columns.

  • Aunque el método SetColumns de la colección Items puede utilizarse para facilitar el almacenamiento en caché determinadas propiedades para agilizar el acceso a dichas propiedades, algunas propiedades tienen restricciones de SetColumns. Dado que estas restricciones no se aplican al método Add de la colección de Columns, el objeto Table es menos restrictivo que el objeto Items.

Consulte la explórelo sección para obtener una lista de los artículos que tratan estas cuestiones y otra información.

Consultar

Ver el vídeo

Ver el vídeo

Duración del vídeo: 09: 21 | Tamaño del archivo: 35.0 MB | Tipo de archivo: Archivo WMV

Hacer clic para obtener el código

Tomar el código

Explórelo

Nota

Declinación de responsabilidades de traducción automática: Este artículo se ha traducido con un sistema informático sin intervención humana. Microsoft ofrece estas traducciones automáticas para que los hablantes de otros idiomas distintos del inglés puedan disfrutar del contenido sobre los productos, los servicios y las tecnologías de Microsoft. Puesto que este artículo se ha traducido con traducción automática, es posible que contenga errores de vocabulario, sintaxis o gramática.