Ejercicios Prácticos: Entornos 4GL

Ejercicio 3: Desarrollo de Formulario con 4GL

Generadores de Formularios 4GL

Características principales:

Flujo típico de desarrollo:

  1. Diseñar interfaz gráfica
  2. Vincular controles a campos de datos
  3. Implementar validaciones y reglas
  4. Programar eventos y lógica
  5. Generar aplicación ejecutable

Herramientas modernas:

Oracle Forms Microsoft Power Apps FileMaker Pro Google AppSheet OutSystems

Objetivo: Crear un formulario de entrada de pedidos usando un generador 4GL.

Enunciado:

  1. Diseñar la interfaz con campos para cliente, productos y cantidades
  2. Implementar validaciones de datos
  3. Conectar a la base de datos para guardar pedidos
  4. Agregar búsqueda de clientes y productos

Solución Paso a Paso con Oracle Forms

1. Diseño de la Interfaz
-- Archivo .fmb (Oracle Forms Builder)
FORM pedidos
  TITLE "Entrada de Pedidos"
  WIDTH 800 HEIGHT 600

  -- Bloque maestro (pedido)
  BLOCK pedido BLOCK
    DATABASE_ITEM "pedidos.pedido_id"
    DATABASE_ITEM "pedidos.fecha" DEFAULT SYSDATE
    DATABASE_ITEM "pedidos.cliente_id"
    DATABASE_ITEM "pedidos.estado" DEFAULT "PENDIENTE"
    
    -- Campos visuales
    TEXT_ITEM cliente_nombre DISPLAY_ONLY WIDTH 200
    BUTTON buscar_cliente LABEL "Buscar..."
    
    -- Bloque detalle (ítems)
    BLOCK items SUBTYPE "GRID"
      DATABASE_ITEM "items.producto_id"
      DATABASE_ITEM "items.cantidad"
      DATABASE_ITEM "items.precio_unitario"
      DATABASE_ITEM "items.total" CALCULATED "cantidad * precio_unitario"
      
      TEXT_ITEM producto_nombre DISPLAY_ONLY
      BUTTON buscar_producto LABEL "Buscar..."
    END BLOCK
    
    -- Botones de acción
    BUTTON guardar LABEL "Guardar Pedido"
    BUTTON cancelar LABEL "Cancelar"
  END BLOCK
END FORM
2. Implementación de Validaciones
-- Validación en el bloque de ítems
TRIGGER WHEN-VALIDATE-ITEM
BEGIN
  -- Validar cantidad positiva
  IF :items.cantidad <= 0 THEN
    MESSAGE('La cantidad debe ser mayor que cero');
    RAISE FORM_TRIGGER_FAILURE;
  END IF;
  
  -- Validar existencia de producto
  DECLARE
    v_existe NUMBER;
  BEGIN
    SELECT COUNT(*) INTO v_existe 
    FROM productos 
    WHERE producto_id = :items.producto_id;
    
    IF v_existe = 0 THEN
      MESSAGE('Producto no existe');
      RAISE FORM_TRIGGER_FAILURE;
    END IF;
  END;
END;

-- Validación al guardar
TRIGGER PRE-INSERT
BEGIN
  -- Requerir al menos un ítem
  IF :SYSTEM.LAST_RECORD = 'TRUE' THEN
    MESSAGE('Debe agregar al menos un producto al pedido');
    RAISE FORM_TRIGGER_FAILURE;
  END IF;
END;
3. Conexión a Base de Datos
-- Configuración de conexión
TRIGGER WHEN-NEW-FORM-INSTANCE
BEGIN
  -- Establecer conexión
  LOGON('usuario', 'contraseña', 'ORCL');
  
  -- Configurar bloque maestro
  SET_BLOCK_PROPERTY('pedido', DEFAULT_WHERE, 'pedido_id = -1');
  GO_BLOCK('pedido');
  EXECUTE_QUERY;
  
  -- Configurar bloque detalle
  SET_BLOCK_PROPERTY('items', INSERT_ALLOWED, PROPERTY_TRUE);
  SET_BLOCK_PROPERTY('items', UPDATE_ALLOWED, PROPERTY_TRUE);
  SET_BLOCK_PROPERTY('items', DELETE_ALLOWED, PROPERTY_TRUE);
END;

-- Guardar datos
TRIGGER WHEN-BUTTON-PRESSED (guardar)
BEGIN
  COMMIT_FORM;
  MESSAGE('Pedido guardado correctamente');
END;
4. Búsqueda de Clientes y Productos
-- Lógica para buscar cliente
TRIGGER WHEN-BUTTON-PRESSED (buscar_cliente)
DECLARE
  v_id NUMBER;
  v_nombre VARCHAR2(100);
BEGIN
  -- Llamar a LOV (List of Values) predefinido
  v_id := SHOW_LOV('clientes_lov');
  
  -- Si se seleccionó un cliente
  IF NOT FORM_SUCCESS THEN
    :pedido.cliente_id := v_id;
    
    -- Obtener nombre del cliente
    SELECT nombre INTO v_nombre
    FROM clientes
    WHERE cliente_id = v_id;
    
    :pedido.cliente_nombre := v_nombre;
  END IF;
END;

-- LOV para clientes
LOV clientes_lov
  TITLE "Buscar Cliente"
  WIDTH 400 HEIGHT 300
  SQL "SELECT cliente_id, nombre, direccion FROM clientes ORDER BY nombre"
  DISPLAY_COLUMN "nombre" WIDTH 200
  RETURN_COLUMN "cliente_id"
END LOV

-- Similar para productos (omitiendo por brevedad)

Nota: Oracle Forms permite crear formularios complejos con relativamente poco código, generando automáticamente la interfaz y manejo de datos.

Ejercicio 4: Generación de Aplicación con Low-Code

Plataformas Low-Code/No-Code

Evolución moderna de los entornos 4GL:

Componentes clave:

Plataformas destacadas:

Mendix OutSystems Microsoft Power Apps Appian Salesforce Lightning

Objetivo: Crear una aplicación de gestión de proyectos usando una plataforma low-code.

Enunciado:

  1. Modelar las entidades principales (Proyectos, Tareas, Usuarios)
  2. Diseñar las interfaces para CRUD de proyectos
  3. Implementar lógica de negocio (validaciones, flujos)
  4. Publicar la aplicación y generar versión móvil

Solución Paso a Paso con Oracle Forms

1. Diseño de la Interfaz
-- Archivo .fmb (Oracle Forms Builder)
FORM pedidos
  TITLE "Entrada de Pedidos"
  WIDTH 800 HEIGHT 600

  -- Bloque maestro (pedido)
  BLOCK pedido BLOCK
    DATABASE_ITEM "pedidos.pedido_id"
    DATABASE_ITEM "pedidos.fecha" DEFAULT SYSDATE
    DATABASE_ITEM "pedidos.cliente_id"
    DATABASE_ITEM "pedidos.estado" DEFAULT "PENDIENTE"
    
    -- Campos visuales
    TEXT_ITEM cliente_nombre DISPLAY_ONLY WIDTH 200
    BUTTON buscar_cliente LABEL "Buscar..."
    
    -- Bloque detalle (ítems)
    BLOCK items SUBTYPE "GRID"
      DATABASE_ITEM "items.producto_id"
      DATABASE_ITEM "items.cantidad"
      DATABASE_ITEM "items.precio_unitario"
      DATABASE_ITEM "items.total" CALCULATED "cantidad * precio_unitario"
      
      TEXT_ITEM producto_nombre DISPLAY_ONLY
      BUTTON buscar_producto LABEL "Buscar..."
    END BLOCK
    
    -- Botones de acción
    BUTTON guardar LABEL "Guardar Pedido"
    BUTTON cancelar LABEL "Cancelar"
  END BLOCK
END FORM
2. Implementación de Validaciones
-- Validación en el bloque de ítems
TRIGGER WHEN-VALIDATE-ITEM
BEGIN
  -- Validar cantidad positiva
  IF :items.cantidad <= 0 THEN
    MESSAGE('La cantidad debe ser mayor que cero');
    RAISE FORM_TRIGGER_FAILURE;
  END IF;
  
  -- Validar existencia de producto
  DECLARE
    v_existe NUMBER;
  BEGIN
    SELECT COUNT(*) INTO v_existe 
    FROM productos 
    WHERE producto_id = :items.producto_id;
    
    IF v_existe = 0 THEN
      MESSAGE('Producto no existe');
      RAISE FORM_TRIGGER_FAILURE;
    END IF;
  END;
END;

-- Validación al guardar
TRIGGER PRE-INSERT
BEGIN
  -- Requerir al menos un ítem
  IF :SYSTEM.LAST_RECORD = 'TRUE' THEN
    MESSAGE('Debe agregar al menos un producto al pedido');
    RAISE FORM_TRIGGER_FAILURE;
  END IF;
END;
3. Conexión a Base de Datos
-- Configuración de conexión
TRIGGER WHEN-NEW-FORM-INSTANCE
BEGIN
  -- Establecer conexión
  LOGON('usuario', 'contraseña', 'ORCL');
  
  -- Configurar bloque maestro
  SET_BLOCK_PROPERTY('pedido', DEFAULT_WHERE, 'pedido_id = -1');
  GO_BLOCK('pedido');
  EXECUTE_QUERY;
  
  -- Configurar bloque detalle
  SET_BLOCK_PROPERTY('items', INSERT_ALLOWED, PROPERTY_TRUE);
  SET_BLOCK_PROPERTY('items', UPDATE_ALLOWED, PROPERTY_TRUE);
  SET_BLOCK_PROPERTY('items', DELETE_ALLOWED, PROPERTY_TRUE);
END;

-- Guardar datos
TRIGGER WHEN-BUTTON-PRESSED (guardar)
BEGIN
  COMMIT_FORM;
  MESSAGE('Pedido guardado correctamente');
END;
4. Búsqueda de Clientes y Productos
-- Lógica para buscar cliente
TRIGGER WHEN-BUTTON-PRESSED (buscar_cliente)
DECLARE
  v_id NUMBER;
  v_nombre VARCHAR2(100);
BEGIN
  -- Llamar a LOV (List of Values) predefinido
  v_id := SHOW_LOV('clientes_lov');
  
  -- Si se seleccionó un cliente
  IF NOT FORM_SUCCESS THEN
    :pedido.cliente_id := v_id;
    
    -- Obtener nombre del cliente
    SELECT nombre INTO v_nombre
    FROM clientes
    WHERE cliente_id = v_id;
    
    :pedido.cliente_nombre := v_nombre;
  END IF;
END;

-- LOV para clientes
LOV clientes_lov
  TITLE "Buscar Cliente"
  WIDTH 400 HEIGHT 300
  SQL "SELECT cliente_id, nombre, direccion FROM clientes ORDER BY nombre"
  DISPLAY_COLUMN "nombre" WIDTH 200
  RETURN_COLUMN "cliente_id"
END LOV

-- Similar para productos (omitiendo por brevedad)

Nota: Oracle Forms permite crear formularios complejos con relativamente poco código, generando automáticamente la interfaz y manejo de datos.

Ejercicio 5: Automatización de Documentación con CASE

Funcionalidades Avanzadas de Herramientas CASE

Para documentación técnica:

Tipos de documentación generable:

Herramientas especializadas:

Enterprise Architect IBM Rational DOORS Sparx Systems Visual Paradigm Doxygen

Objetivo: Automatizar la generación de documentación técnica para un sistema.

Enunciado:

  1. Importar el modelo de base de datos a la herramienta CASE
  2. Generar diagramas ER y documentación técnica
  3. Crear trazabilidad entre requisitos y entidades
  4. Exportar documentación en múltiples formatos

Solución Paso a Paso con Enterprise Architect

1. Importar Modelo de Base de Datos
  1. Seleccionar "Database Engineering" → "Import DB Schema"
  2. Configurar conexión a la base de datos:
    Connection String: jdbc:mysql://localhost:3306/biblioteca
    Username: usuario
    Password: ********
    Driver: com.mysql.jdbc.Driver
  3. Seleccionar esquema/tablas a importar
  4. Mapear tipos de datos SQL a tipos UML
  5. Ejecutar importación (genera clases UML equivalentes)
2. Generar Diagramas y Documentación
  1. Diagrama ER:
    • Crear nuevo diagrama "Logical Data Model"
    • Arrastrar tablas importadas al diagrama
    • Ajustar layout automáticamente
    • Agregar notas explicativas
  2. Documentación técnica:
    • Seleccionar "Generate Documentation"
    • Elegir plantilla "Database Specification"
    • Seleccionar elementos a documentar
    • Configurar formato de salida (RTF, PDF, HTML)

<database name="biblioteca">
  <table name="libros">
    <description>Contiene información bibliográfica de los libros</description>
    <column name="ISBN" type="VARCHAR(20)" primaryKey="true">
      <description>Identificador único internacional del libro</description>
    </column>
    <column name="titulo" type="VARCHAR(200)" notnull="true">
      <description>Título completo del libro</description>
    </column>
    <!-- más columnas... -->
  </table>
  <!-- más tablas... -->
</database>
3. Trazabilidad con Requisitos
  1. Importar requisitos desde documento Word/Excel
  2. Crear relación "realiza" entre requisitos y entidades:
    
    
      El sistema debe permitir registrar préstamos de libros
      
        prestamos
        ejemplares
        usuarios
      
    
  3. Generar matriz de trazabilidad:
    • Seleccionar "Traceability Matrix"
    • Configurar fuente (requisitos) y destino (entidades)
    • Exportar a Excel para análisis
4. Exportación en Múltiples Formatos
Formato Procedimiento Uso recomendado
PDF Generate Documentation → PDF Template Documentación formal
HTML Publish → HTML Documentación en línea
Word Generate Documentation → RTF Template Edición posterior
Excel Report → Matrix → Export CSV Análisis de datos
XML Project → Export XML Intercambio con otras herramientas

Nota: Enterprise Architect permite personalizar completamente las plantillas de documentación para adaptarse a estándares organizacionales.

▲   volver