Variable global Perdida


(JuanJex) #1

Amigos en mi py de datos he definido una variable global con persistencia en memoria, luego en un evento lanzo un proceso en 3er plano, que usa esa variable y lleno una tabla con el valor de la variable, pero la toma vacía, si lo corro en primer plano si lo hace bien, como podría solucionar este comportamiento, es normal?

Atte.

Juan J. Moreno

Peru


([N1] Velasco) #2

Buenos días.

En el vBugman se encuantra la incidencia 1488 que hace referencia a eso.

Un saludo.

 

 

 

Jorge Velasco Fernández

jvelasco@theseedsc.com

www.theseedsc.com

 


([N3] blavan) #3

¿Y sí declara la variable con persistencia en disco?


([N1] Velasco) #4

Buenas Benito.

Las variables globales con persistencia en disco son solicitadas al servidor cada vez que se necesita su valor.

Su uso no está optimizado y no es recomendado su uso.

Si quieres puedes mirar la incidencia 1780 del vBugman.

Un saludo.

 

 


Jorge Velasco Fernández

jvelasco@theseedsc.com

www.theseedsc.com


([N3] blavan) #5

Volviendo con variable global.

Juanjuex se queja de que en tercer plano no puede modificar campo con valor de una variable global.

Pregunto pero en 3º plano el servidor a que valor de la variable global responde si son varios usuarios dando valor a una variable global en 3º plano como sabe el servidor el valor de la variable de cada usuario?

Pienso que en 3º plano no se puede utilizar para modificar campo si veo lógico que se pueda utilizar  por ejemplo dentro de un IF

IF variable global=xxx ....

Eso sí,  pero en 3º plano modificar campo con variable global  ... no lo veo,


([N4] eic) #6

Hola.

@Benito: ya en 6.x se podían utilizar variables globales en memoria. Al lanzar el proceso en 3º plano, el servidor debería (aunque, por la incidencia que comenta Jorge, en esta versión de V7 no lo hace) copiarse al proceso el valor de las variables, lo ejecuta, y luego retorna.

Piensa que las variables globales en memoria mantienen valores distintos por cada usuario. Así puedes tener la misma variable que, para usuarios distintos, tiene distintos valores (p.ej., una variable que indique el nombre del usuario). 

Saludos,

Fran Varona

 


([N3] blavan) #7

Tengo una consulta a soporte que no me contestó precisamente como tu dices.

Estas cosas debán estar muy claritas en documentación con ejemplos sencillos, no es tan dificil particularizar tres ó cuatro casos y no irse por explicaciones que por muy técnicas no se captan facilmente para los poco capaces como el menda

Gracias Franz


(Chema) #8

Lo que no acabo de entender es porqué quieres que la variable viaje al servidor? Podrías explicarme con un ejemplo para que lo necesitas? En lugar de ejecutar proceso, que es como supongo que lo estás haciendo, puedes hacerlo creando el manejador de objeto y pasar las variables que necesite como locales al proceso.

 

Saludos


([N3] blavan) #9

Chema, soy Benito, la cuestion la inicio Juanjex por lo cual te puede contestar él según su casuística.

Pero vamos a mí así de modo rápido por ejemplo en 3º plano ó en proceso anterior al alta ó modificación de ficha, modificar campo USUARIO con la variable global NOMBRE USUARIO captada al arranque de la aplicación.

Gracias

 


(JuanJex) #10

En mi caso, es por que tengo que refrescar un casillero(7 dias x 24 horas) que jala de una tabla en memoria que me tiene la programacion de una semana determinada, y es esa semana la que debo enviar, llenar esa tabla en desde la tabla donde esta toda la programacion demora...por eso lo hago en 3er plano, y si pedro, juan etec estan editando el calendario, necesito que puedan manejar semanas diferentes, es mas quiza habra la ventana 2 veces o la aplicacion, o cambie de semana en fin muchas situaciones, por eso debe ser VARIABLE GLOBAL EN MEMORIA, lo q de hecho entiendo es al ser 3er plano solo tiene acceso a todo lo del servidor, pero como la variable es global en memoria esta no viaja en v7, como dice Fran en v6 si lo hace solicita el valor del cliente que me parece logico sino cual es la gracia, pero les cuento que lo he solucionado con una idea que se usa mucho en tuiTV la openApp en sus incidencias notifican esto, asi que lo q hago es: tengo un tabla en disco con un registro por cada usuario, entonces en el arranque cuando ingreso borro ese registro y lo vuelvo a crear y ahi tengo campos que antes de lanzar el 3er plano lo lleno y el proceso en 3er plano lo lee, es la solucion pero falta refinarla por que deberia ser por conexion , imaginense que me conecto 2 veces con el mismo usuario, chanco y desastre, ahora la duda seria como identifico la conexion no por ip por q podria haber ejecutdo la aplicacion mas de una vez en la msima maquina.

Atte.

Juanjex

Peru


(Chema) #11

@Benito. Evidentemente si lo quieres hacer en un evento no hay nada que objetar. Ahora si lo haces con un proceso en 3P puedes hacerlo perfectamente con "Crear manejador de objeto"

 

Saludos