En un Trigger se pierde el valor de una Variable Global


([N4] Ramon Denuc) #1

Hola Foro,

Me acabo de dar cuenta que si tengo una variable global con persistencia en Memoria y esta variable global la utilizo en un Trigger por ejemplo “Modificación: Anterior a una modificación de ficha” pierdo el valor de dicha variable.

Peor si esa misma variable global le pongo la persistencia en Disco no pierde su valor al ser utilizado dentro de dicho trigger.

Que pasa que al querer utilizar esa variable dentro del trigger nunca contiene el valor, fuera del trigger si contiene su valor.

Modificar campo(USUARIO,$USER_NOM@aplicacion.dat)

¿Alguna idea para no perder el valor de la variable global en los trigger?

Saludos


([N4] bitcodesoft) #2

En tercer plano las variables globales en memoria no se replican, si el valor de tu variable global lo asignas en 1er plano, al disparar una función en el servidor( 3er plano) el valor de esta variable estará sin asignar.


([N1] wikan) #3

Debes revisar los ámbitos de las variables.
En tu ejemplo tienes el nombre del usuario, pero ¿qué valor tiene esa variable en el servidor si tienes varios usuarios?
Dónde ves que tenga valor esa variable? en el cliente o en el servidor, si pones un mensaje te devuelve vacío o te devuelve lo que necesitas?

De toda formas para tu caso concreto, tienes unas variable del sistema, sysUserName que puede que te sirva.


([N4] Ramon Denuc) #4
  • Esa Variable Global que contiene el nombre del Usuario, tiene su valor en todos los lugares menos en el Trigger.

  • Esa misma Variable Global esta en el contenido inicial de casi todas las tablas que contiene el campo USUARIO, y cuando se crea un nuevo registro se incluye correctamente el valor de la Variable.

  • Si esa Variable Global la utilizo con el programa instalado en un servidor “vatp://v7cloud6.velneo…” o en local “vatp://127.0.0.1” se obtiene correctamente el valor de la Variable.

Esa Variable Global se asigna su valor cuando el Usuario se “logea” al entrar al programa, ya que el programa contiene una gestión de usuario con sus respectivos privilegios.

Saludos


([N4] bitcodesoft) #5

Los triggers se disparan en 3er plano, así que es indiferente en qué servidor lo ejecutes el valor de esa variable( global en memoria) es cero, o en tu caso al ser variable alfanumérica está vacía("").

Ámbito de las variables globales:

http://velneo.es/info_v7_718_es/velneo_vdevelop_v7/proyectos_objetos_y_editores/proyecto_de_datos/variable/

Puedes poner como valor inicial del campo USUARIO la variable $USER_NOM@aplicacion.dat o sysUserName y te olvidas de la variable global.


([N4] Infortic) #6

En los contenidos iniciales te cargará correctamente el valor cuando des el alta desde un formulario de alta, pues se inferirá su valor desde el 1er plano.

Ya una vez trabajas en 3er plano, esa variable no tendrá valor.

Si por ejemplo desde el trigger de alta das un alta entra tabla, esa variable estará vacía.

Es una putada bastante gorda, yo me vi exáctamente en el mismo problema cuando comencé con mi primera aplicación.

Me decidí por una tabla de usuarios en lugar de los users del vServer porque no existía API para crear usuarios de forma sencilla (ahora sí la hay), así que lo que te recomiendo es que los usuarios estén creados en el vServer y siempre uses la variable sysUserName que es compartida en todos los planos, te ahorrará dolores de cabeza.

Aquí tienes un estupendo artículo de Jorge Hontoria explicando mi problema, échale un ojo.

http://tipesoft.com/el-infierno-y-iv-de-las-variables-globales-en-velneo-v7/