Formulario Visor Json
Descripción General
El formulario Visor Json es una interfaz desarrollada en Visual FoxPro 9 para importar, visualizar y analizar datos en formato JSON, orientada a la gestión documental electrónica. Permite la carga múltiple de archivos JSON, la visualización tabular y jerárquica de los datos, y la interacción mediante controles como cuadrícula (Grid) y árbol (TreeView).
Componentes principales
- Cuadrícula (Grid1): Muestra los datos importados en 8 columnas editables, con doble clic para ver detalles.
- TreeView (Olecontrol1): Permite navegar la estructura jerárquica de los datos JSON.
- Botón "Importar Json" (Command1): Inicia la importación de archivos JSON.
- Botón "Actualizar" (Command2): Refresca la visualización de los datos.
- Controles OLE adicionales: Para visualización o interacción avanzada.
- Propiedades clave: Modo oscuro, maximizado, integración MDI, año inicial (
startyear = 2020).
Propiedades relevantes
Caption = "Visor Json": Título del formulario.startyear = 2020: Año inicial para operaciones relacionadas.WindowState = 2: El formulario se abre maximizado.MDIForm = .T.: El formulario es hijo MDI.- Colores y fuentes adaptados para modo oscuro.
Eventos destacados
- Command1.Click: Llama a
ImportMultipleJSpara importar archivos JSON. - Command2.Click: Actualiza la vista o recarga los datos.
- Grid1.ColumnX.Text1.DblClick: Llama a
ViewJsonpara mostrar el detalle del registro seleccionado. - Olecontrol1.Click: Permite seleccionar nodos en el árbol para cargar detalles.
Métodos y Procedimientos del Formulario (detallados)
crearindices
Crea índices sobre los datos cargados para optimizar búsquedas y ordenamientos dentro del formulario. Suele ser llamado después de importar o generar datos, y puede usar comandos como INDEX ON para mejorar el rendimiento de consultas y navegación.
gencurbase
Genera un cursor base a partir de los datos JSON importados, permitiendo trabajar con una estructura temporal y manipulable en Visual FoxPro. Elimina cualquier cursor temporal anterior, convierte los datos JSON en un cursor, define campos y tipos de datos, inserta los datos procesados y crea índices para optimizar el acceso.
importmultiplejs
Permite importar múltiples archivos JSON. Abre un cuadro de diálogo para seleccionar archivos, lee y convierte su contenido a cursores, y actualiza la cuadrícula y el árbol de navegación. Utiliza funciones como GETFILE, FILETOSTR y JSONTOCURSOR.
joinfjsontables
Permite unir varias tablas o estructuras JSON en una sola vista o cursor, facilitando la comparación y análisis de datos provenientes de diferentes archivos. Puede usar comandos como SELECT ... UNION o rutinas personalizadas para combinar datos.
newkey
Genera una nueva clave o identificador único para registros o nodos, útil al importar o crear nuevos elementos. Puede incrementar un contador interno o buscar el valor máximo actual y sumarle uno.
nodelist
Genera y mantiene una lista de nodos a partir de la estructura de los datos JSON importados, facilitando la navegación y búsqueda. Recorre la estructura JSON, crea una lista (cursor o arreglo) con información como ID, nombre, padre, nivel y tipo, y la utiliza para poblar el TreeView o realizar búsquedas rápidas.
setear
Método general para establecer propiedades, valores o configuraciones en los controles del formulario según el contexto o los datos cargados. Puede ajustar visibilidad, habilitación, colores, fuentes y otros atributos de los controles.
setgrid
Configura la cuadrícula (Grid1) para mostrar los datos importados. Define columnas, encabezados, formatos, anchos y enlaza los datos a la cuadrícula. Puede ajustar la alineación y el formato de celdas según el tipo de dato.
settreeview
Configura el control tipo árbol (TreeView) para mostrar la estructura jerárquica de los datos importados, creando nodos y subnodos según la estructura JSON. Limpia el árbol, recorre la estructura y agrega nodos con relaciones padre-hijo.
validarnodo
Verifica si un nodo seleccionado cumple con los criterios de validez antes de permitir operaciones adicionales. Evalúa condiciones como existencia, tipo, formato y reglas de negocio, devolviendo .T. o .F. según la validez del nodo.
viewjson
Muestra el detalle del JSON correspondiente al registro seleccionado en la cuadrícula. Se activa al hacer doble clic en cualquier celda, recupera el JSON, lo formatea y lo muestra en un visor o ventana modal.
Ejemplo de flujo de uso
- El usuario abre el formulario, que se presenta en modo oscuro y maximizado.
- Puede importar archivos JSON usando el botón "Importar Json".
- Los datos importados se muestran en la cuadrícula y el árbol.
- Al hacer doble clic en una celda, se visualiza el detalle del JSON.
- El botón "Actualizar" permite refrescar la vista o recargar los datos.
Ejemplo de métodos (pseudocódigo)
PROCEDURE crearindices
* Crea índices sobre los datos cargados
INDEX ON id TAG id
ENDPROC
PROCEDURE darkmode
* Cambia colores de fondo y texto a modo oscuro
THIS.BackColor = RGB(30,30,30)
THIS.ForeColor = RGB(240,240,240)
ENDPROC
PROCEDURE gencurbase
IF USED("curBase")
USE IN curBase
ENDIF
lcJson = THISFORM.cJsonData
IF !EMPTY(lcJson)
JSONTOCURSOR(lcJson, "curBase", .T.)
ENDIF
INDEX ON id TAG id
THISFORM.Grid1.RecordSource = "curBase"
ENDPROC
PROCEDURE importmultiplejs
lcFiles = GETFILE("json", "Selecciona archivos JSON", "Importar", 1)
IF EMPTY(lcFiles)
RETURN
ENDIF
FOR EACH lcFile IN lcFiles
lcJson = FILETOSTR(lcFile)
IF !ISNULL(lcJson)
JSONTOCURSOR(lcJson, "miCursor", .T.)
ENDIF
ENDFOR
THISFORM.SetGrid()
THISFORM.SetTreeView()
ENDPROC
PROCEDURE joinfjsontables
* Une varias tablas JSON en una sola vista
SELECT * FROM tabla1 UNION SELECT * FROM tabla2 INTO CURSOR unionjson
ENDPROC
PROCEDURE newkey
* Genera una nueva clave única
cKey = STR(VAL(THIS.cnextkey) + 1)
RETURN cKey
ENDPROC
PROCEDURE nodelist
IF USED("curNodos")
USE IN curNodos
ENDIF
CREATE CURSOR curNodos (id I, nombre C(100), idPadre I, nivel I, tipo C(20))
LOCAL lnId, lnNivel
lnId = 1
lnNivel = 1
DO WHILE !EOF("curBase")
INSERT INTO curNodos VALUES (lnId, curBase.nombre, curBase.idPadre, lnNivel, curBase.tipo)
IF curBase.tieneHijos
=ProcesarHijos(curBase.id, lnNivel+1)
ENDIF
SKIP IN curBase
lnId = lnId + 1
ENDDO
ENDPROC
PROCEDURE setear
* Establece propiedades/configuraciones en controles
THIS.Grid1.Enabled = .T.
ENDPROC
PROCEDURE setgrid
* Configura la cuadrícula para mostrar datos
THIS.Grid1.ColumnCount = 8
ENDPROC
PROCEDURE settreeview
THISFORM.Olecontrol1.Object.Nodes.Clear()
SCAN
THISFORM.Olecontrol1.Object.Nodes.Add(, , "nodoID", campoPrincipal)
IF !EMPTY(campoSubnodo)
THISFORM.Olecontrol1.Object.Nodes.Add("nodoID", 4, , campoSubnodo)
ENDIF
ENDSCAN
THISFORM.Olecontrol1.Object.Nodes.Item(1).Expanded = .T.
ENDPROC
PROCEDURE validarnodo
lcNodo = THISFORM.Olecontrol1.Object.SelectedItem
IF ISNULL(lcNodo) OR EMPTY(lcNodo.Text)
RETURN .F.
ENDIF
IF lcNodo.Tipo <> "Permitido"
RETURN .F.
ENDIF
RETURN .T.
ENDPROC
PROCEDURE viewjson
IF EOF() OR BOF()
RETURN
ENDIF
lcJson = THISFORM.Grid1.ColumnX.Text1.Value
lcJsonFormatted = FormatearJson(lcJson)
MESSAGEBOX(lcJsonFormatted, 64, "Detalle JSON")
ENDPROC
Esta documentación detalla la estructura, componentes y funcionamiento del formulario Visor Json según el archivo fuente. Para mayor profundidad, consulta los métodos específicos en el código fuente.