El MIX de los Globales tipo Array


([N3] pacosatu) #1

Hola.

A pesar de que en la info está documentado que se pueden usar Variables Globales de tipo Array unidimensional, no encontraba la forma de asignar valores a dicho Array.

Consultado a soporte, me confirman que es un error de la documentación y que aunque se pueden leer los valores de un Array global desde Velneo, la asignación de valores solo se puede realizar a través del API. Esto sí que es un verdadero MIX de código Velneo y Javascript.

El uso de un Array Global nos facilita la gestión de determinada información al poder agrupar N-variables globales en una sola.

Pongo un ejempo:
Hemos creado en el proyecto de datos una variable global en memoria G_CONEXION de tipo Array y de 1 dimension. La dimensión se irá adaptando al número de elementos creados. Disponemos de 2 funciones Velneo para Inicializar los valores del Array y para obtener un determinado elemento del Array

Script PRO_JS_CONEXION_INI - Fija los elementos del Array


// Usuario conectado
theApp.setGlobalVarArray(“0PS_Ejercicios_dat/G_CONEXION”,0,theApp.userName());
// ¿Es administrador?
theApp.setGlobalVarArray(“0PS_Ejercicios_dat/G_CONEXION”,1,theApp.isAdministrator()?“Sí”:“No”);
// Fecha-Hora de la conexión
var f = new Date();
var dias_semana = new Array(‘domingo’,‘lunes’,‘martes’,‘miércoles’,‘jueves’,‘viernes’,‘sábado’);
var fecha = dias_semana[f.getDay()]
+ " " + f.getDate() + “/” + (((f.getMonth()+1)<10?“0”:"")) + (f.getMonth() + 1) + “/” + f.getFullYear()
+ " " + ((f.getHours()<10)?“0”:"") + f.getHours() + “:” + ((f.getMinutes()<10)?“0”:"") + f.getMinutes();
theApp.setGlobalVarArray(“0PS_Ejercicios_dat/G_CONEXION”,2,fecha);
//theApp.setGlobalVarArray(“0PS_Ejercicios_dat/G_CONEXION”,2,f.toLocaleString());
// Código de Pais
theApp.setGlobalVarArray(“0PS_Ejercicios_dat/G_CONEXION”,3,theApp.sysCountryIsoCode());
// Nombre de máquina
theApp.setGlobalVarArray(“0PS_Ejercicios_dat/G_CONEXION”,4,theApp.sysMachineName());


Script PRO_JS_CONEXION_GET - Obtiene un elemento del Array G_CONEXION


// Devuelve el valor del elemento del Array G_CONEXION pasando como parámetro un String CVALOR que describe la información solicitada

var aValores = new Array(“USER”,“ISADMIN”,“DATELOGIN”,“COUNTRY”,“MAQUINA”)
var cValor = theRoot.varToString(“CVALOR”)
var pos = aValores.indexOf(cValor)
// Devuelve en VRETORNO el valor del elemento del Array
theRoot.setVar(“VRETORNO”,theApp.globalVarArrayToString(“0PS_Ejercicios_dat/G_CONEXION”,pos))


En el proyecto de Aplicación podremos usar:


Mensaje(
"Usuario - " + fun:FUN_G_CONEXION_GET@0PS_Ejercicios_dat.dat(“USER”) + “\n” +
"Administrador - " + fun:FUN_G_CONEXION_GET@0PS_Ejercicios_dat.dat(“ISADMIN”) + “\n” +
"Conectado el - " + fun:FUN_G_CONEXION_GET@0PS_Ejercicios_dat.dat(“DATELOGIN”) + “\n” +
"Código de país - " + fun:FUN_G_CONEXION_GET@0PS_Ejercicios_dat.dat(“COUNTRY”) + “\n” +
"Máquina - " + fun:FUN_G_CONEXION_GET@0PS_Ejercicios_dat.dat(“MAQUINA”), Informacion)


Aunque esto no sustituye a la versatilidad de las tablas en disco, facilita la gestión de aquella información que solo existe mientras dura la sesión.
Por supuesto, tener en cuenta que las variables Globales no se replican en el servidor.

Saludos
Paco Satué


([N1] wikan) #2

Buenas @seh
Has pensado la opción de tener una variable en memoria que almacene un JSON con los datos que necesitas?

Cristian Vazquéz lo tiene montado así y me parece una muy buena opción, es dinámico y puedes mostrar su contenido en cualquier momento para depurar errores.

Saludos


([N3] pacosatu) #3

Hola wikan.

Efectivamente, ya lo había pensado. En mi anterior etapa todo lo manejaba con objetos (globales y locales) y al fin y al cabo JSON no es más que una representación plana de un Objeto o de un Array.

El post es para ver el caso curioso de los Arrays Globales, que deben ser fijados en JS y se pueden obtener en Velneo con $G_CONEXION@0PS_Ejercicios_dat.dat[2].

Todavía estoy en una fase temprana de aprendizaje de las posibilidades de Velneo.
Ya estaba diseñando la función para replicar el array global al servidor con JSON.

La solución JSON sería perfecta si Velneo sacara Funciones nativas de Parseo de JSON y/o XML y evitar el MIX con JS.

No lo he testeado a fondo, pero creo que los Arrays globales pueden tener diferente tipo de Dato en cada elemento, lo cual también es una ventaja.

Saludos
Paco Satué