Cómo crear un asistente de carga de datos en Oracle APEX 5.0

Por Clarisa Maman Orfali Oracle ACE
Publicado en Marzo 2016

En este artículo quiero presentar una de las características que Oracle APEX nos entrega a los desarrolladores y que nos hace la vida más simple a la hora de desarrollar y me refiero específicamente al tema de que nuestros usuarios finales puedan contar con la capacidad de cargar datos de forma dinámica para importar dichos datos en una tabla dentro de cualquier esquema al que el usuario final tenga acceso.

Es muy fácil de implementar esto en APEX y lo mejor de todo es que nos brinda a los desarrolladores una funcionalidad poderosa en pocos minutos dentro de nuestras aplicaciones ya que la importación de datos generalmente es un requisito muy pedido por nuestros usuarios finales.

Al usar esta funcionalidad para importar los datos, los usuarios finales podrán ejecutar un asistente de carga de datos dentro de la aplicación que le permitan cargar los datos desde un archivo o también podrán copiar y pegar los datos directamente en el asistente.

Al crear el asistente de carga de datos, el desarrollador podrá incluir entre otras definiciones lo siguiente:

  • Definiciones de la tabla: Esta definición especifica el nombre de la tabla de carga de datos con la columna o columnas de clave única.
  • Reglas de transformación de datos: esto le permite al desarrollador dar un formato a alguna columna específica, como el cambio de los datos de importación a mayúsculas, minúsculas, sustituir, recorte, recortar a la izquierda, o a la derecha, consulta SQL, o expresión PL/SQL, etc. Y esto lo hace definiendo reglas de transformación de datos. Si el archivo de importación incluye datos de la columna con mayúsculas y minúsculas y la tabla de carga requiere todo en mayúsculas, el desarrollador podrá definir una regla de transformación de datos para insertar solamente mayúsculas en la columna durante la carga de datos. (En el ejemplo mostraremos una regla de transformación)
  • Consultas a tablas: Si existen datos en el archivo de importación que se deben corresponder con los datos que se pueden encontrar en otra tabla, se podrá especificar una búsqueda en la tabla para realizar el mapeo. Por ejemplo, si el archivo de importación contiene un nombre de departamento para la columna DEPTNO pero la tabla de carga requiere el ID del departamento en esa columna, se podrá realizar una regla de consulta de tabla para encontrar el número de departamento correspondiente para el nombre del departamento en la otra tabla. (En el ejemplo mostraremos esta regla de consulta de tabla)

Crear Aplicación de Tipo Escritorio

Para elaborar este ejemplo vamos a crear una aplicación de tipo escritorio siguiendo los pasos del asistente y luego creamos un reporte interactivo mostrando los datos de los Empleados de la tabla EMP y un botón que diga Cargar Datos Empleados.

Crear Asistente de Carga de Datos

Desde la Página de Inicio de la Aplicación:

  1. Hacemos clic en el botón “Crear Página”.
  2. Seleccione Tipo de Página: Carga de Datos
  3. En Tabla de Carga de Datos:
    • Nombre de la Definición: Cargar Datos Empleados
    • Propietario: [NOMBRE_ESQUEMA]
    • Nombre de la Tabla: EMP (tabla)
    • Columna Única 1: EMPNO (Number)
    • Hacemos clic en el botón “Siguiente”.
  1. En Reglas de Transformación (Reglas de Transformación permite modificar los datos que se van a cargar antes de insertarlos en la tabla base. Como ejemplo, pasaremos a mayúsculas el JOB)
    • Nombre de la Regla: Pasa a Mayúsculas
    • Seleccionar Columnas: pasar al lado derecho la columna JOB
    • Tipo: A Mayúsculas
    • Hacemos clic en el botón “Agregar”.
    • Hacemos clic en el botón “Siguiente”.
  1. En Consultas de Tablas (Consultas de Tabla hace coincidir un valor cargado con otra tabla y permite utilizar el valor de clave asociado, en lugar del valor cargado):
    • Agregar Nueva Consulta de Tabla:
      - Nombre de Columna: DEPTNO_ID
        • Definición de Columna:
          - Propietario: [NOMBRE_ESQUEMA]
          - Nombre de la Tabla: DEPT
          - Devolver Columna: DEPTNO (Number)
          - Cargar Columna: DNAME (Varchar2)
          - Hacemos clic en el botón “Agregar”.
        • Hacemos clic en el botón “Siguiente”.
  1. En Atributos de Páginas:
  • Paso 1:
    • Nombre de la Página: Origen de Carga de Datos
    • Número de Página: 2
    • Nombre de la Región: Origen de Carga de Datos
  • Paso 2:
    • Nombre de la Página: Asignación de Datos/Tabla
    • Número de Página: 3
    • Nombre de la Región: Asignación de Datos/Tabla
  • Paso 3:
    • Nombre de la Página: Validación de Datos
    • Número de Página: 4
    • Nombre de la Región: Validación de Datos
  • Paso 4:
    • Nombre de la Página: Resultados de Carga de Datos
    • Número de Página: 5
    • Nombre de la Región: Resultados de Carga de Datos
  • Modo de Página: Normal
  • Ruta de Navegación: Ruta de Navegación
  • Entrada Principal: Inicio (Página 1)
  • Nombre de Ruta de Navegación: Asistente Carga de Datos Empleados
  • Hacemos clic en el botón “Siguiente”.
  1. En Menú de Navegación:
  • Preferencia de Navegación: Identificar una entrada del menú de navegación existente para esta página
  • Entrada de Menú de navegación Existente: Inicio
  • Hacemos clic en el botón “Siguiente”.
  1. En Botones y Bifurcación:
  • Etiqueta de Botón Siguiente: Siguiente >
  • Etiqueta de Botón Anterior: < Anterior
  • Etiqueta de Botón Cancelar: Cancelar --- Bifurcar a Página: 1
  • Etiqueta de Botón Terminar: Ver Alumnos --- Bifurcar a Página: 1
  • Hacemos clic en el botón “Siguiente”.
  1. En Confirmar:
  • Hacemos clic en el botón “Crear”.

Acomodamos los botones a nuestro gusto y la posición de las regiones para luego ejecutar la página 2 “Origen de Carga de Datos” para visualizar su aspecto:

 

El asistente nos creó en forma rápida un conjunto de 4 páginas que conformarán el asistente de carga de datos en nuestra aplicación:

  • Origen de Carga de Datos: es la página en el cual determinamos si la carga de datos se realizará a través de un archivo separado por comas (*.csv) o delimitado por tabuladores o por medio de la acción Copiar y Pegar. Además podemos indicar los símbolos que se usan como separadores, los valores por defecto son \t y opcionalmente las comillas dobles. Si nuestro archivo cuenta con la primera fila con nombres de columnas lo indicamos marcando la casilla de verificación, además de los otros parámetros de formato de fecha, caracteres de archivo y los parámetros de globalización. En el recuadro “Copiar y Pegar Datos Delimitados” se usa cuando tenemos marcado la opción de Importar como: “Copiar y Pegar”.
  • Asignación de Datos/Tabla: Esta es la segunda página del asistente donde asignamos la columna que corresponde a cada columna del archivo a importar.
  • Validación de Datos: En la siguiente página el asistente verificará las validaciones que hayamos indicado a la hora de crear nuestro asistente.
  • Resultados de Carga de Datos: Es la página final del asistente que muestra una tabla con los resultados finales de la importación. 

Crear Región de contenido estático Datos de Ejemplo

Para este ejemplo vamos a crear en la página 2 de Origen de Carga de Datos una región el cual le mostrará al usuario un texto con el formato de 5 registros el cual le mostrará al usuario cual es el formato en el cual debe tener en su archivo para que pueda importar los datos a la tabla EMP.

Desde el Diseñador de Páginas de la Página 2 en la ficha de Presentación:

  1. Hacemos clic con el botón derecho del ratón sobre “Regiones” y seleccionamos “Crear Región”.
  1. En la sección Identificación del panel derecho de propiedades de la región:
    • Título: Datos de Ejemplo
    • Tipo: Contenido Estático
  1. En la sección Origen:
    • Texto:
      <p>Seleccione del campo <strong>Importar de</strong> la opción "Copiar y Pegar", ingrese en el <strong>Separador</strong> una "," y asegúrese de que la opción <strong>La Primera Fila es Nombre de Columna</strong> esté selccionada.</p>
      <p>Haga click en el botón<strong> Insertar Datos de Ejemplo</strong> y automáticamente se cargará los datos de ejemplo en el recuadro de arriba o también puede seleccionar el texto de abajo, lo copia y luego lo pega dentro del cuadro <strong>Copiar y Pegar Datos Delimitados</strong>. </p>
      <pre id="sampledata">
      ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO
      Gerardo,Analyst,7698,,5000,35,ACCOUNTING
      Marcelo,Salesman,7782,,3000,55,SALES
      Gustavo,Manager,7782,,2000,75,RESEARCH
      Clarisa,Analyst,7782,,300,25,ACCOUNTING
      Fernando,Analyst,7566,,4000,45,ACCOUNTING
  1. En la sección Apariencia:
    • Plantilla: Collapsible
    • Opciones de Plantilla:
      • Default State: Collapsed
  2. Hacemos clic en el botón “Guardar”.

Crear Elemento de Página P2_ DATOS_EJEMPLO

Vamos a crear un elemento de página para que se guarde en él los 5 registros de ejemplo.

Desde el Diseñador de Páginas de la Página 2 en la ficha de Presentación:

  • Hacemos clic con el botón derecho del ratón sobre la región “Datos de Ejemplo” y seleccionamos “Crear Elemento de Página”.
  • En la sección Identificación del panel derecho de propiedades de la región:
    • Nombre: P2_DATOS_EJEMPLO
    • Tipo: Oculto
  • En la sección Origen:
    • Tipo: Valor Estático
    • Valor Estático:
    ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO
    Gerardo,Analyst,7698,,5000,35,ACCOUNTING
    Marcelo,Salesman,7782,,3000,55,SALES
    Gustavo,Manager,7782,,2000,75,RESEARCH
    Clarisa,Analyst,7782,,300,25,ACCOUNTING
    Fernando,Analyst,7566,,4000,45,ACCOUNTING
    • Usado: Siempre, sustituyendo cualquier valor existente en el estado de sesión
  • Hacemos clic en el botón “Guardar”. 

Crear Botón de Región Insertar Datos de Ejemplo

Desde el Diseñador de Páginas de la Página 2 en la ficha de Presentación:

  1. Hacemos clic con el botón derecho del ratón sobre la región “Datos de Ejemplo” y seleccionamos “Crear Botón”.
  1. En la sección Identificación del panel derecho de propiedades de la región:
    • Nombre del Botón: INSERTAR_DATOS_DE_EJEMPLO
    • Etiqueta: Insertar Datos De Ejemplo
  1. En la sección Diseño:
    • Posición del Botón: Edit
    • Directa: Sí
    • En Opciones de Plantilla
      • Size: Large
      • Type: Primary
  1. En la sección Apariencia:
    • Plantilla de botón: Text with icon
    • Directa: Sí
    • Classes CSS de icono: fa-cog
  1. En la sección Comportamiento:
    • Definida por Acción Dinámica
    • Ejecutar Validaciones: Sí
  1. Hacemos clic en el botón “Guardar”.

Crear Acción Dinámica

Por otra parte, necesitamos crear una acción dinámica que, al hacer clic en el botón “Insertar Datos de Ejemplo”, tome los datos del elemento P2_DATOS_EJEMPLO y los traspase al elemento Copiar y Pegar Datos Delimitados.
Para ello, desde el Diseñador de Páginas de la Página 2, en la ficha de Presentación:

  1. Hacemos clic con el botón derecho del ratón sobre el botón INSERTAR_DATOS_DE_EJEMPLO y seleccionamos “Crear Acción Dinámica”.
  1. En Identificación:
    • Nombre: Pegar Datos de Ejemplo
  1. En Cuando:
    • Evento: Clic
    • Tipo de Selección: Botón
    • Botón: INSERTAR_DATOS_DE_EJEMPLO
  1. En Verdadero:
    • Acción: Ejecutar Código JavaScript
    • Configuración:
      • Código: set_item();
  1. En Opciones de Ejecución:
    • Arrancar al Cargar Página: No
  1. En Elementos Afectados:
    • Tipo de selección: Botón
    • Botón: INSERTAR_DATOS_DE_EJEMPLO
  1. Hacemos clic en el botón “Guardar”. 

Editar Página “Origen de Carga de Datos”

Para que al pulsar el botón de importar datos realice la acción dinámica y ejecute la función JavaScript, necesitamos incorporar a la página esa función en la sección de la declaración de funciones y variables globales de la página.

Desde el Diseñador de Páginas de la Página 2 en la ficha de Presentación:

  1. Hacemos clic sobre el título de la página Origen de Carga de Datos.
  1. En la sección JavaScript del panel derecho de propiedades:
  2. Declaración de Función y Variable Global:
function set_item()
 $s('P2_IMPORT_FROM', 'PASTE');
 $s('P2_SEPARATOR',',');
 $s('P2_FIRST_ROW', 'Y');
 $('#P2_COPY_PASTE').val($('#P2_DATOS_EJEMPLO').val());
 }

  1. Hacemos clic en el botón “Guardar”. 

Editar Botón de Región Cargar Datos Empleados

Ahora debemos configurar el botón “Cargar Datos Empleados” de la página de inicio donde se encuentra nuestro informe interactivo de Empleados que cuando se pulse el botón llame a la página de inicio del asistente, que en nuestro ejemplo es la página 2:

Desde el Diseñador de Páginas de la Página 1 en la ficha de Presentación:

  1. Hacemos clic con el botón derecho del ratón sobre el botón “CARGAR_DATOS”.
  1. En Comportamiento:
    • Acción: Redirigir a Página en esta Aplicación
    • Página: 2
    • Borrar Cache: 2,3,4,5
  1. Hacemos clic en el botón “Guardar”. 

Probando el Asistente de Carga de Datos Empleados

Desde la página de inicio de la aplicación hacemos clic en el botón “Cargar Datos Empleados” el cual llamara a la página 2: “Origen de Carga de Datos”.

Hacemos clic en el botón “Importar Datos de Ejemplo” y podemos ver que los datos son incorporados a la casilla de texto “Copiar y Pegar Datos Delimitados”

Verificamos todos los parámetros y hacemos clic en el botón Siguiente y llegamos a la segunda página del asistente llamada Asignación de Datos/Tabla y verificamos que cada columna de los datos importados esté correctamente seleccionada.

Como podemos ver en la última columna DEPTNO si bien estamos mostrando el nombre del departamento en los datos copiados y pegados, cuando se haga la importación de los datos por medio del INSERT, se tomará el nombre del departamento y se insertará en su lugar el ID que corresponde a ese departamento.

Hacemos clic en el botón Siguiente y en la página Validación de Datos nos indica si se realizará un INSERT, UPDATE o si se produjo un FALLO, en este ejemplo se realizarán 5 INSERT a la tabla EMP.

Claramente podemos ver cómo en la última columna se muestran los ID de los departamentos que reemplazan los nombres de departamentos y además en la columna JOB se aplicó la regla de transformación “Pasar a Mayúsculas”.

Hacemos clic en el botón “Cargar Datos”

El asistente al finalizar las operaciones nos muestra la página de Resultados de la Carga de Datos, el cual nos indica en este caso que se insertó en la tabla EMP 5 registros nuevos.

De igual modo podemos cargar datos en la tabla desde un archivo separado por comas CSV.

Seleccionamos la opción Cargar Archivo Separado por Comas (*.csv) o Delimitado por Tabuladores.

Y en este caso hacemos un update de los 5 registros insertados previamente:

Limitaciones a la hora de cargar datos


El asistente de carga de datos utiliza colecciones en APEX para realizar las operaciones de INSERT o UPDATE.
Cada Colección en APEX cuenta con 50 atributos de caracteres (varchar2(4000)), 5 atributos numéricos, 5 atributos de tipo fecha, un atributo de tipo XML, un atributo BLOB y un atributo CLOB, y para manejar las colecciones usamos el PL/SQL API APEX_COLLECTION.

Con eso en mente, no podremos cargar datos usando este tipo de asistente si tenemos tablas por ejemplo que tienen más de 50 columnas de tipo VARCHAR2 porque está sujeto a la colección en APEX.

Conclusión


Después de realizar los pasos descriptos en este artículo podemos ver que de forma muy fácil y rápida con Oracle APEX podemos crear un gestor de carga de datos para los usuarios finales, ya sea copiando y pegando datos o cargándolo desde un archivo de tipo CSV o delimitados por tabulaciones.

 


Clarisa Maman Orfali es fundadora y CEO de ClarTech Solutions Inc. Se ha convertido en Oracle ACE hace algunos años, tiene más de 15 años de experiencia en el desarrollo y la capacitación en tecnologías de la información. Hace unos años descubrió la belleza de Oracle Application Express (APEX) y se ha especializado en esa área. Ella también es una Co-Fundadora y Directora del Argentina Oracle User Group (AROUG) y ha participado activamente en la organización de grandes y populares eventos. Ella tiene una gran pasión por las tecnologías de Oracle y quiere ampliar esa pasión e influencia transfiriendo su conocimiento y experiencia a la totalidad de las comunidades de Oracle América Latina y en todo el mundo.

Este artículo ha sido revisado por el equipo de productos Oracle y se encuentra en cumplimiento de las normas y prácticas para el uso de los productos Oracle.