Alguien tiene hecho un "Settings" pero con JSONCollection? - tincho - 07-05-2021
Hola amigos.
¿Alguien tiene hecho un "Settings" pero con JSONCollection?
Es que necesito mantener las claves con valores vacíos y Settings (que yo sepa) no lo hace.
Saludos.
RE: Alguien tiene hecho un "Settings" pero con JSONCollection? - Harpo - 14-05-2021
Saludos Tincho,
No sé si le servirá esto que subo. Es una prueba de concepto, yo uso un "Settings" en XML y estuve jugando con uno en JSON, está incompleto, solo realiza la lectura del fichero. A futuro quiero retomarlo, me pareció más sencillo que XML. He "limpiado" un poco el código para hacerlo más entendible.
La idea es tener dos ficheros de configuración, uno local y otro global. Permite parámetros de aplicación generales y particulares.
Lo que hay en el programa es:- Una clase PARAMETRO, básicamente contiene datos del parámetro: Scope (ámbito global o local), Sección (agrupo los parámetros), nombre, clave (código único de 4 dígitos), tipo (string - integer - ....) y el valor.
- Una clase CONFIG, es una colección de parámetros y su gestión. Es quien hace la lectura de JSON. La Key del objeto "Collection" es la clave del parámetro.
- Un módulo MODGEN. Es el arranque del programa, contiene la definición de constantes para "mapear" los códigos numéricos y hace una carga por defecto de la configuración.
- Un formulario para visualizar parámetros y llamar a los procesos de carga. Estos procesos se llaman desde el evento "click" del combobox.
Además incluye los procesos de carga XML y los ficheros de configuración XML.
El formulario:
El fichero JSON utilizado:
Código: {"Global":
{"ConfigJSON":[
{"Database":[
{"key":1000, "name": "DBType", "type": "string", "value": "sqlite3"},
{"key":1001, "name": "DBCharset", "type": "string", "value": "UTF8"},
{"key":1002, "name": "DBHostName", "type": "string", "value": "PruebaLocal"},
{"key":1003, "name": "DBPort", "type": "integer", "value": "8000"},
{"key":1004, "name": "DBDatabase", "type": "string", "value": "ConfigJSON.sqlite"},
{"key":1005, "name": "DBUser", "type": "string", "value": null},
{"key":1006, "name": "DBPassword", "type": "string", "value": null}
]},
{"Mask":[
{"key":1100, "name": "MaskDate", "type": "string", "value": "dd/mm/yyyy"},
{"key":1101, "name": "MaskInteger", "type": "string", "value": "###0"},
{"key":1102, "name": "MaskFloat", "type": "string", "value": "#,##0.00"},
{"key":1103, "name": "MaskTime", "type": "string", "value": "hh:mm"},
{"key":1104, "name": "ComaDecimal", "type": "string", "value": ","},
{"key":1105, "name": "PuntoMiles", "type": "string", "value": "."},
{"key":1106, "name": "Decimales", "type": "integer", "value": "-2"},
{"key":1107, "name": "MaskMoney", "type": "string", "value": "$#,##0.00"}
]},
{"Company":[
{"key":9900, "name": "RazonSocial", "type": "string", "value": "Prueba S.L."},
{"key":9901, "name": "CIF", "type": "string", "value": "B00000000"},
{"key":9902, "name": "Direccion", "type": "string", "value": "Avenida de JSON 5"},
{"key":9903, "name": "Poblacion", "type": "string", "value": "JSON de Abajo"},
{"key":9904, "name": "CodigoPostal", "type": "string", "value": "99000"},
{"key":9905, "name": "Provincia", "type": "string", "value": "Republica de JSON"},
{"key":9906, "name": "Telefono", "type": "integer", "value": "999 999 999"},
{"key":9907, "name": "Movil", "type": "string", "value": null},
{"key":9950, "name": "Banco", "type": "string", "value": "El móvil es NULL"},
{"key":9951, "name": "Oficina", "type": "string", "value": null},
{"key":9952, "name": "Cuenta", "type": "string", "value": null},
{"key":9953, "name": "SWIF", "type": "string", "value": null}
]}
]}
}
Espero que le sirva.
Un saludo, Harpo.
RE: Alguien tiene hecho un "Settings" pero con JSONCollection? - tincho - 14-05-2021
Gracias Harpo. Lo estudiaré.
RE: Alguien tiene hecho un "Settings" pero con JSONCollection? - tincho - 26-05-2021
Hola Harpo, estudie el código que compartiste y tomo nota del método que sigues.
Por lo que veo la clase clsConfig toma los parámetros iniciales desde un módulo llamado ModGen en el método _new() así que tal vez tenga que modificar un poco la clase para que sea de uso mas general. Hice un proyecto vacío y luego copie las clases clsConfig y clsParametro para aislar la parte de gestión de json.
Dentro de un tiempo tal vez vuelva a la carga con la clase para json ya que me parece que es el método mas prolijo para gestionarla. Por ahora estoy usando un archivo .json y una colección y JSONEncode y JSONDecode.
Gracias por el aporte de código.
Saludos.
El método que uso actualmente es el siguiente:
partiendo de un archivo sFile "/ruta/del/archivo.json"
Código: sConfig = File.Load(sFile)
jConfig = JSON.FromString(sConfig, True)
Donde jConfig es una "Collection" luego para el flujo dle programa leo, escribo, agrego o retiro datos y claves de esta colección y al final del proceso guardo archivo.json
[code]
Saludos.
|