jueves, 25 de abril de 2013

ADF 11g: Importación y exportación de ficheros CSV

Una de las funcionalidades requeridas suele ser la importación/exportación de información de base de datos en un archivo CSV.

Link to english version.
Link to download sample application. (Broken Link)

CSV Sample file
En esta solución se hace uso de un código sencillo y genérico usando cualquier iterador (DCIteratorBinding) configurado en la vista para extraer/importar información independientemente de el número y nombre de las columnas de la tabla de base de datos sobre la que itera.

El ejemplo contiene la siguiente configuración:
  • Esta preparado y habilitada la carga de ficheros. Esta configuración  se consigue configurando Trinidad en web.xml y habilitando la subida de ficheros en el tag af:form.

    Configuración: web.xml
    Habilitar la subida de ficheros.
  • El Task Flow contiene un Manage Bean (CSVProcessor) encargado de la gestión de los ficheros CSV y de los mecanismos de importación/exportación:
    • Posee una variable inyectada y configurable para establecer el nombre del DCIteratorBinding.
      Inyección del iterador a usar
    • El método de carga del fichero genera un objeto de tipo CSVFile que se usará más adelante para la importación. Usa oracle.adf.model.adapter.dataformat.CSVHandler para la lectura y escritura en la estructura de datos que se desee. En este caso un Map<String,String>
      Fragmento del CSVHandler para leer CSV files
    • El método de export es usado por af:fileDownloadActionListener. Genera un fichero CSV en el siguiente formato:

      Fragmento de la exportación
      • La primera fila se corresponde con el nombre de las columnas definidas en la tabla.
      • Las demás filas contienen la información separadas por un carácter especial . En el caso del ejemplo "|".
    • El método import realiza una limpieza total y carga de los datos procedentes del fichero. Ayudándose de que la primera fila son exáctamente los nombres de las columnas de la tabla vuelve a cargar los datos a través del DCIteratorBinding y persistirlos en base de datos.

      Fragmento de código de la importación
  • La UI permite usar el API de manera intuitiva. Cargar el fichero a través del inputFile, exportar la tabla e importar los datos a través del fichero.

    Interfaz del sample
El ejemplo solo es una ayuda para el tratamiento de ficheros CSV, no incluye tratamiento de errores o comportamientos inesperados.
Además, el ejemplo usa su propio esquema y tabla de base de datos llamada Samples la cual es facilmente reproducible en una base de datos Oracle XE mediante JDeveloper.

4 comentarios:

  1. Podrias volver a subir el archivo esta dañado o un tuto en video me ha servido de mucho

    Buen post

    ResponderEliminar
  2. Lo buscaré e intentaré volver a subir. No se como se ha podido "evaporar" del Dropbox :(

    ResponderEliminar
  3. Podrias volver a subir el archivo esta dañado o un tuto en video me ha servido de mucho

    ResponderEliminar
    Respuestas
    1. Perdí este workspace en una de las migraciones de PC y movimiento de Dropbox a Git.

      Si lo rescatase no dudaría en subirlo.

      Lo siento.
      Un saludo.

      Eliminar