PowerBuilder

De código a claridad: una matriz CRUD visual en PowerBuilder

AutorLuis Avilan
Publicado
Portada editorial de De código a claridad: una matriz CRUD visual en PowerBuilder
PB

2 visualizaciones

Versión ampliada en español del contenido publicado por Luis Avilan en Appeon Community.

Cómo analizar DataWindows, ventanas, objetos de usuario, procedimientos y disparadores para convertir dependencias dispersas en una matriz visual y exportable a Excel.

Una vista unificada del recorrido: analizar objetos, visualizar relaciones CRUD y exportar el resultado a Excel.

Detalles

Introducción

En una aplicación PowerBuilder madura, las reglas de acceso a datos rara vez están concentradas en un solo lugar. Un DataWindow consulta una tabla; una ventana utiliza varios DataObjects; un procedimiento almacenado actualiza registros; un disparador completa otra operación y, con el tiempo, la relación entre objetos y tablas deja de ser evidente.

La demo Demo_CRUD_Matrix convierte esa dispersión en una vista que se puede explorar. El desarrollador selecciona una conexión ODBC, filtra las tablas o columnas que desea estudiar, indica un target o una PBL y obtiene una matriz donde cada fila es un objeto y cada columna representa una tabla o un campo. Las intersecciones muestran las operaciones detectadas:

C crear, R leer, U actualizar y D eliminar.

El objetivo no es reemplazar una herramienta completa de análisis estático. El valor de la demo consiste en enseñar cómo combinar APIs nativas de PowerBuilder, metadatos de base de datos, exportación de objetos y una interfaz HTML para obtener documentación técnica útil de manera rápida.

¿Qué problema resuelve una matriz CRUD?

Una matriz CRUD responde una pregunta esencial: ¿qué componente toca cada dato y con qué intención? Esa respuesta ayuda durante una migración, un análisis de impacto, una auditoría, una refactorización o la incorporación de un nuevo integrante al equipo.

Arquitectura compacta del demo

La solución se mantiene deliberadamente pequeña. Solo incluye los objetos necesarios para demostrar el flujo completo:

El NVO expone únicamente las seis operaciones utilizadas por las ventanas:

1public function boolean of_esta_conectado ()
2public function boolean of_conectar_base_datos (...)
3public function long of_obtener_tablas (...)
4public function long of_obtener_columnas (...)
5public function string of_analizar_crud (...)
6public function long of_obtener_dsn_odbc (...)

Los métodos de parsing y extracción permanecen privados. Esta separación mantiene una interfaz pública sencilla y evita que la ventana dependa de detalles internos.

1. Configuración del análisis

La ventana w_crud_params comienza enumerando los DSN ODBC disponibles en el Registro de Windows. Después de conectarse, consulta information_schema.tables y utiliza un fallback basado en sys.tables para SQL Server.

Selección del DSN, tablas, campos y target antes de ejecutar el análisis.

La interfaz permite reducir el volumen de información antes de analizar:

• Filtrar tablas por nombre.

• Seleccionar una o varias tablas.

• Obtener las columnas de las tablas seleccionadas.

• Limitar la matriz a campos concretos.

• Incluir procedimientos almacenados y disparadores.

• Elegir un archivo .pbt o una biblioteca .pbl.

2. Descubrimiento de bibliotecas y objetos

Cuando se selecciona un target, el motor lee su propiedad LibList para resolver las PBL asociadas. A continuación, utiliza funciones nativas como LibraryDirectory y LibraryExport para enumerar y extraer el código fuente de DataWindows, ventanas y objetos de usuario.

1ls_dir = LibraryDirectory(ls_pbl, DirDataWindow!)
2ls_fuente = LibraryExport(ls_pbl, ls_nombre, ExportDataWindow!)

En ventanas y objetos de usuario, la búsqueda identifica referencias a la propiedad DataObject. Después resuelve el DataWindow correspondiente y analiza su sintaxis, de modo que la matriz puede atribuir la dependencia al componente visual que lo utiliza.

3. Detección de operaciones CRUD

Para un DataWindow, la demo examina elementos como table(name=...), cláusulas from, uniones y la propiedad update. Una fuente que solo recupera información se clasifica como lectura; cuando el DataWindow tiene capacidad de actualización, la relación puede marcarse como CRUD.

Si se activan procedimientos o disparadores, el motor consulta sys.objects y sys.sql_modules. El SQL recuperado se inspecciona en busca de operaciones INSERT, SELECT, UPDATE y DELETE relacionadas con las tablas filtradas.

4. Un contrato JSON entre análisis y presentación

El motor entrega un JSON con tres colecciones: tablas, objetos y aristas. Esto desacopla la lógica de análisis de la interfaz y facilita la creación de otras visualizaciones.

1{
2 "tables": ["dbo.articulos", "dbo.articulos_tallas"],
3 "objects": [
4 {"name": "d_articulos", "type": "DataWindow"}
5 ],
6 "edges": [
7 {"from": "d_articulos", "to": "dbo.articulos", "crud": "CRUD"}
8 ]
9}

w_crud_matrix inyecta ese JSON en un documento HTML, crea dinámicamente la tabla y la muestra con WebBrowser.NavigateToString(). Los encabezados permanecen visibles, los nombres de tabla se presentan verticalmente y las operaciones usan colores semánticos.

Matriz generada: objetos por filas, tablas por columnas y operaciones CRUD en las intersecciones.

5. Exportación a un XLSX nativo y vistoso

La primera aproximación de la demo descargaba HTML con extensión .xls. Aunque Excel puede interpretar ese contenido, muestra una advertencia porque el formato real no coincide con la extensión y algunos estilos CSS se pierden.

La versión actual utiliza automatización OLE para crear un libro real. Los mismos datos JSON se leen mediante JsonParser; después se escribe y formatea cada sección en Excel.

1lole_excel.ConnectToNewObject("Excel.Application")
2lole_excel.Workbooks.Add()
3
4lole_hoja.Cells(ll_fila, ll_columna).Value = ls_crud
5lole_hoja.Cells(ll_fila, ll_columna).Interior.Color = RGB(227, 242, 253)
6
7// 51 = xlOpenXMLWorkbook
8lole_libro.SaveAs(ls_ruta, 51)

El libro incluye una banda azul de título, leyenda C/R/U/D, encabezados verticales, bordes, anchos controlados, paneles congelados, cuadrícula oculta y colores específicos para cada operación. El resultado es un .xlsx válido, listo para compartir sin advertencias de compatibilidad.

Limitaciones que deben conocerse

Por ello, la matriz debe utilizarse como mapa de exploración y apoyo documental. Para llevar la idea a producción conviene incorporar un parser SQL más formal, escape correcto de JSON, análisis de dependencias entre funciones, persistencia de resultados, comparación entre versiones y pruebas con múltiples motores de base de datos.

Ideas para extender la demo

• Agregar filtros por tipo de objeto y operación CRUD.

• Mostrar el fragmento de código que originó cada relación.

• Comparar dos versiones de una PBL y resaltar dependencias nuevas o eliminadas.

• Generar documentación HTML, Markdown o PDF además del libro Excel.

• Incorporar análisis de funciones globales, menús, consultas y pipelines.

• Aplicar reglas de arquitectura, por ejemplo, detectar ventanas que acceden directamente a tablas sensibles.

Conclusión

La demo demuestra que PowerBuilder conserva herramientas muy potentes para inspeccionar sus propios artefactos. Al combinar LibraryDirectory, LibraryExport, metadatos ODBC, JSON, WebBrowser y automatización de Excel, es posible transformar una base de código compleja en una representación comprensible.

La matriz CRUD no es solo una tabla bonita. Es un punto de partida para responder preguntas de impacto, documentar sistemas heredados, preparar migraciones y conversar con mayor precisión sobre el acceso a los datos.

¿Te interesan más demos reales de PowerBuilder?

Este proyecto es solo una parte del laboratorio. En mi blog encontrarás más artículos, pruebas técnicas e ideas aplicables a modernización, integración y herramientas para desarrolladores.

Capturas y recursos visuales del demo

De código a claridad: una matriz CRUD visual en PowerBuilder, captura 1 del demo
De código a claridad: una matriz CRUD visual en PowerBuilder, captura 2 del demo
De código a claridad: una matriz CRUD visual en PowerBuilder, captura 3 del demo
De código a claridad: una matriz CRUD visual en PowerBuilder, captura 4 del demo

El código fuente relacionado con este artículo está disponible en Descargas.

De código a claridad: una matriz CRUD visual en PowerBuilder | Luis Avilan