Personalice la Experiencia

por Mark A. Williams Oracle ACE Director


Utilice las capacidades de ODP.NET para la globalización y personalización.

La interface de usuarios en una aplicación Oracle es el portal a través del cual los usuarios interactúan con los datos de Oracle Database, y presentar estos datos en un formato adecuado para la ubicación, región o país de cada usuario mejorará la experiencia del usuario. Según el nivel de acceso a los datos utilizado, personalizar las aplicaciones para la ubicación de cada cliente puede ser una tarea ardua, pero este no es definitivamente el caso al utilizar Oracle Data Provider for .NET (ODP.NET) como su nivel de acceso a los datos.

Esta columna demuestra cómo utilizar ODP.NET para crear una aplicación que permita que los usuarios personalicen su experiencia al seleccionar el idioma y el formato de la fecha y los datos numéricos. La aplicación consulta Oracle Database, de acuerdo con los datos de usuarios, y luego presenta los datos formateados de acuerdo con el criterio definido por el usuario. La interface de usuarios ofrece opciones para configurar el idioma, territorio, formato de fecha y si realizar una búsqueda que no concuerde con mayúsculas y minúsculas. (Para obtener información adicional sobre estos parámetros o los formatos válidos, vea la Guía para Soporte de Globalización de Oracle Database ).

Para crear la aplicación en esta columna, necesitará lo siguiente:

  • Acceso a Oracle9i Database versión 9.2 o superior (cualquier edición que incluya Oracle Database Express Edition)
  • Un alias de archivo tnsnames.ora para su base de datos (el mío es ORAMAG)
  • El esquema de muestra HR instalado (la aplicación utiliza la tabla EMPLOYEES)
  • Microsoft Visual Studio 2005 o Visual Studio 2008 (Ediciones no Express)
  • Oracle Developer Tools para Visual Studio .NET 11.1.0.6.20
  • Oracle Data Provider for .NET 11.1.0.6.20
  • Para crear la aplicación, cree una solución Visual Studio, exponga los puntos Web (incluidas las propiedades de configuración), configure las fuentes de datos, y ejecute la aplicación utilizando el servidor Web.

Comencemos por crear un nuevo sitio Web ASP .NET 2.0 en Visual Studio.

Crear la Solución

Los siguientes pasos crean la solución ASP.NET 2.0 dentro de Visual Studio 2005 o 2008:

  1. Desde el menú principal de Visual Studio, seleccione File -> New -> Web Site.
  2. Seleccione el Sitio Web ASP.NET del cuadro de diálogo Nuevo Sitio Web, seleccione Sistema de Archivo de la lista Ubicación, seleccione Visual C# de la lista de Idioma, e ingrese una ruta en el casillero de texto al lado de la lista Ubicación. (yo ingresé E:\My Projects\WebSites\SepOct2008 como ubicación para el sitio Web en mi sistema.) Haga click en OK; Visual Studio creará la solución y abrirá la página Default.aspx en el editor.
  3. Para agregar una referencia en ODP.NET, seleccione Website -> Add Reference del menú principal de Visual Studio, seleccione Oracle.DataAccess en Nombre de Componente en el cuadro de diálogo Agregar Referencia, y haga click en OK.


Presente la Pantalla Web

Siga los pasos de esta sección para presentar los elementos de la interface de usuarios en la pantalla Web. Para mantener la interface lo más simple y compacta posible, utilizo componentes ASP.NET 2.0 estándar y no segrego las funcionalidades, como la presentación y la lógica de negocios, en diferentes niveles.

  1. Haga click en Origen para cambiar a la vista de origen en el editor.
  2. Expanda el nodo HTML dentro de la caja de herramientas, arrastre un objeto de Tabla de la caja de herramientas, y suéltelo entre <div> y </div> en la vista de origen de la pantalla Web. Luego, edite el HTML para la tabla con el fin de crear una tabla con cinco filas y dos columnas:
  3. Ahora que ha creado la tabla HTML que contendrá los controles de ingreso de la interface de usuarios (como las listas y casilleros de texto), haga click en Diseño para cambiar a vista de diseño.
  4. La primera columna de celdas en la tabla incluirá las etiquetas y el control de botones. En la primera celda de la primera fila, escriba Language:; en la primera celda de la segunda fila, escriba Territory:; en la primera celda de la tercera fila, escriba Date Format:; en la primera celda de la cuarta fila, escriba Last Name:; y arrastre un control de Botón desde el nodo Estándar de la caja de herramientas y suéltelo en la primera celda de la última fila.
  5. Haga click en control de Botón para seleccionarlo, y luego en la ventana de propiedades, ingrese Lookup como propiedad de Texto e ingrese btnLookup como la propiedad (ID).
  6. Arrastre un control DropDownList desde el nodo Estándar en la caja de herramientas, y suéltelo en la segunda celda de la primera fila. En la ventana de propiedades, ingrese ddlLanguage como la propiedad (ID).
  7. Arrastre otro control DropDownList, y suéltelo en la segunda celda de la segunda fila. En la ventana de propiedades, ingrese ddlTerritory como la propiedad (ID).
  8. Arrastre un control TextBox (desde el nodo Estándar), y suéltelo en la segunda celda de la tercera fila. En la ventana de propiedades, ingrese txtDateFormat como la propiedad (ID).
  9. Arrastre otro control TextBox, y suéltelo en la segunda celda de la cuarta fila. En la ventana de propiedades, ingrese txtLastName como la propiedad (ID).
  10. Arrastre un control CheckBox (desde el nodo Estándar) en la segunda celda de la última fila. En la ventana de propiedades, ingrese chkCaseInsensitive como la propiedad (ID) e ingrese Case Insensitive como propiedad de Texto.
  11. Luego, agregue los objetos de fuente de datos en la pantalla Web. Expanda el nodo de Datos en la caja de herramientas, arrastre un control SqlDataSource en la superficie de diseño debajo de la tabla HTML, e ingrese dsLanguage como la propiedad (ID). Arrastre otro control SqlDataSource en la pantalla con el control dsLanguage. Ingrese dsTerritory como la propiedad (ID) para este control de fuente de datos.
  12. El último paso para presentar la pantalla es arrastrar un control GridView en la pantalla debajo de los controles de fuente de datos. Ingrese gvResults como la propiedad (ID), haga click en GridView Tasks en el ángulo superior derecho de GridView, seleccione el enlace Auto Format a partir de las tareas disponibles, seleccione Rainy Day de los esquemas de formato disponibles, y luego haga click en OK para aplicar el formato.

En este punto, la presentación se verá similar a la presentación en la Figura 1.

Figura 1

Figura 1: La pantalla Web ASP.NET 2.0 en tiempo de diseño

Configurar las Fuentes de Datos y Conectar los Controles

Ahora que ha finalizado exitosamente la presentación de los controles y elementos HTML en la pantalla Web, es hora de “conectar” las piezas. En esta sección, usted puede crear la cadena de conexión de base de datos necesaria y el texto SQL, y combinar los controles.

  1. Haga click en el control dsLanguage SqlDataSource para seleccionarlo, y luego haga click en tareas rápidas en el ángulo superior derecho del control para abrir la ventana SqlDataSource Tasks. Haga click en la opción Configurar Fuente de Datos, y luego haga click en Nueva Conexión y asegúrese de que Oracle Database (Oracle ODP.NET) se encuentre en la lista de fuentes de datos. Si no se encuentra en la lista, haga click en Cambiar y seleccione Oracle Database para fuente de datos, y Oracle Data Provider for .NET para proveedor de datos, y haga click en OK. En la ventana Agregar Conexión, seleccione el nombre de la fuente de datos de la lista para la fuente de datos que quiere utilizar (ORAMAG en mi caso). Ingrese HR como nombre de usuario, ingrese la contraseña para el usuario HR en su sistema, y haga click en Guardar contraseña.
    Luego, haga click en Avanzado y configure las siguientes propiedades en la ventana Propiedades Avanzadas, al seleccionar los valores adecuados de las listas correspondientes: Metadata Pooling = false, Enlist = false, and Statement Cache Purge = true. Haga click en OK para cerrar la ventana Propiedades Avanzadas, y luego haga click en OK para cerrar la ventana Agregar Conexión.
  2. Ahora que se ha configurado la conexión, haga click en Siguiente; haga click en Sí, guarde esta conexión como: check box; cambia el nombre de la cadena de conexión a SepOct2008; haga click en Siguiente; haga click en la opción Especificar una sentencia SQL personalizada o procedimiento almacenado; haga click en Siguiente; ingrese el siguiente texto como sentencia SQL:
select value from v$nls_valid_values 
where parameter='LANGUAGE' order by 1


Haga click en Siguiente; y finalmente haga click en Finalizar.

3. Haga click en el control dsTerritory SqlDataSource para seleccionarlo, y haga click en tareas rápidas en el ángulo superior derecho del control para abrir la ventana de Tareas SqlDataSource como antes. Haga click en la opción Configurar Fuente de Datos, seleccione la conexión previamente definida de la lista, haga click en Siguiente, haga click en la opción Especificar una sentencia SQL personalizada o procedimiento almacenado, haga click en Siguiente, ingrese el siguiente texto como texto SQL:

 

select value from v$nls_valid_values where parameter='TERRITORY' order by 1


Haga click en Siguiente, y haga click en Finalizar.
4. Haga click en la lista ddlLanguage para seleccionarla, haga click en tareas rápidas, seleccione Elegir Fuente de Datos, seleccione dsLanguage desde la lista Seleccionar fuente de datos, y haga click en OK.
5. Haga click en la lista ddlTerritory para seleccionarla, haga click en tareas rápidas, seleccione Elegir Fuente de Datos, seleccione dsTerritory desde la lista Seleccionar una fuente de datos, y haga click en OK.
6. Haga doble click en el botón btnLookup para abrir el editor de código de origen para el archivo Default.aspx.cs; agregue lo siguiente a la lista de directivas de uso:

using Oracle.DataAccess.Client;


y para el btnLookup_Click automáticamente creado, ingrese el código en la Lista 1.

Lista de Código 1: código del operador de evento

protected void btnLookup_Click(object sender, EventArgs e) {
        string strLastName = string.Empty;

        string constr = ConfigurationManager.ConnectionStrings["SepOct2008"]    
.ConnectionString;

        OracleConnection con = new OracleConnection(constr);
        con.Open();

        OracleGlobalization glb = OracleGlobalization.GetThreadInfo();

        glb.Language = ddlLanguage.Text;
        glb.Territory = ddlTerritory.Text;

        if (txtDateFormat.Text.Length > 0) {
                glb.DateFormat = txtDateFormat.Text;
        }

        if (txtLastName.Text.Length > 0) {
                strLastName = txtLastName.Text;
        }
        else {
                strLastName = "%";
        }

        if (chkCaseInsensitive.Checked) {
                glb.Sort = "BINARY_CI";
                glb.Comparison = "LINGUISTIC";
        }

        con.SetSessionInfo(glb);

        OracleCommand cmd = con.CreateCommand();
        cmd.CommandText = "select first_name, " +
                "last_name, " +
                "to_char(hire_date) hire_date, " +
                "to_char(nvl(commission_pct, 0), 'fm990D00') commission_pct " +
                "from employees " +
                "where last_name like (:1) " +
                "order by last_name, first_name";

        OracleParameter pLastName = new OracleParameter();
        pLastName.Value = strLastName;

        cmd.Parameters.Add(pLastName);

        OracleDataReader dr = cmd.ExecuteReader();

        gvResults.DataSource = dr;
        gvResults.DataBind();

        glb.Dispose();
        dr.Dispose();
        pLastName.Dispose();
        cmd.Dispose();
        con.Dispose();
}


Ponga en Marcha la Muestra

Usted ahora puede ejecutar esta aplicación del sitio Web ASP.NET 2.0 al presionar la tecla F5 desde Visual Studio y hacer click en OK para permitir que la información de depuración se cree en el archivo de configuración. Para configurar la presentación para el idioma Francés y Francia como país, haga lo siguiente cuando el browser despliegue la pantalla Web: seleccione FRENCH de la lista de Idioma y FRANCE de la lista Territorio; ingrese DD-fmMonth-YYYY para Formato de Fecha; ingrese g% para Apellido; haga un click en el casillero No Coincidir Mayúsculas y Minúsculas; y finalmente haga click en el botón Consultar. Fíjese que los nombres de meses se muestran en Francés, el separador decimal para Porcentaje de Comisión es una coma (adecuado para la opción de territorio FRANCE), y los valores para Apellido son adecuadamente recuperados sin que coincidan las mayúsculas y minúsculas. (Fíjese que si su browser no respalda la disposición del idioma seleccionado, puede ver caracteres incorrectos en el resultado.) Le aconsejo experimentar diferentes combinaciones de idioma, territorio, formato de fecha y búsquedas que no coincidan con mayúsculas y minúsculas.

Conclusión

Los pasos de esta columna han demostrado cómo crear una aplicación ASP.NET 2.0 con ODP.NET rápida y fácilmente, que pueda adecuarse a la preferencia del usuario respecto del idioma y el formato de fecha y datos numéricos almacenados en Oracle Database. Utilizar ODP.NET para ofrecer esta experiencia personalizada al cliente aumenta la productividad del desarrollador (porque hay menos código para escribir) y facilita la administración de códigos, porque su aplicación utilizará un solo grupo de código que puede aplicarse a todos los lugares.




Mark A. Williams ( mawilliams@cheshamdbs.com) es un director Oracle ACE, un DBA Oracle Certified Professional, el autor de Pro .NET Oracle Programming (Apress, 2004), y contribuyente en el foro de Oracle Data Provider for .NET en Oracle Technology Network.