Interfaz: recalcular control


([N2] overall) #1

Buenos días,

Tengo un formulario sin origen con un "Control Objeto" que como objeto 1 tengo una búsqueda y como objeto 2 la rejilla para presentar los datos. Lo que quiero hacer es lo siguiente:

- A la búsqueda le quiero pasar el contenido de una variable local que tengo en el formulario. La variable también la he creado en la búsqueda, y la tengo como condicionante de la parte de la búsqueda.

Lo he probado con el manejador de objetos para pasarle el contenido de la variable a la búsqueda, pero no funciona, cuando lanzo la instrucción "Interfaz: recalcular control", hace caso omiso del contenido que le paso a la búsqueda.

Quizá le esté dando vueltas a algo que no se puede hacer. A alguien se le ocurre alguna idea?

Ya sé que con las variables globales tengo el tema resuelto, pero en este caso no quiero hacer uso de ellas, ya que el caso se repite en muchos formularios (que pueden estar abiertos) y no quiero cargarme de muchas variables globales.

Saludos

Overall

 


([N1] Pepeto) #2

De momento me parece que lo tendras que solucionar con variables globales, ya que las variables locales no es posible pasarlas de un objeto a otro.

Al menos por el momento, esperemos que pronto sea posible.

Un saludo.

José

 


([N2] overall) #3

Muchas gracias José. Esperaremos entonces. Veo un punto muy interesante.

Saludos

Overall


([N1] Velasco) #4

Buena overall.

Yo tengo en mis pantallas una variable local para hacer las búsquedas pero despúes la paso a una variable global para todas las búsquedas y no me da ningún problema.

Un saludo.

 

 

 

Jorge Velasco Fernández

jvelasco@theseedsc.com

www.theseedsc.com


([N2] overall) #5

Buenos días Jorge,

Es una opción, lo pruebo y comento.

Gracias Jorge

Saludos

Overall


([N2] overall) #6

Soy yo de nuevo,

Pues no acaba de funcionar bien, la variable global que modifico en cada formulario no se refresca correctamente. Me explico.

En cada formulario tengo una variable local (variable alfabética), al perder el foco del campo que la contiene se dispara una conexión a evento que dispara el evento que recalcula el control objeto que contiene la búsqueda. En éste evento, antes de recalcular el control objeto modifico la variable global, para que los datos sean los recién introducidos. Hasta aquí todo correcto. En todos los formularios tengo un proceso ON_INIT que pone, tanto la variable global como la local "vacia".

Cuando lanzo el primer formulario, todo correcto, realizo la búsqueda por trozos de palabra y funciona correctamente. Acto seguido lanzo el mismo formulario, y me presenta los mismos datos que el formulario que ya tengo abierto (y eso que en el proceso ON_INIT refresco las variable, pero no hace caso). Si lanzo de nuevo el mismo formulario el resultado es correcto, me presenta todos los datos.

Esto mismo lo he probado en formularios de datos distintos y el comportamiento es el mismo. Hay un problema de refresco de variables, creo que V7 no las refresca correctamente.

Este comportamiento sobre las variables también se puede apreciar cuando tenemos un botón check que su contenido es una variable global (por poner un ejemplo) le asignamos una conexión a evento que al soltar el ratón nos dispare un evento que recalcule el control objeto. La variable que le pasamos nunca se refresca bien, siempre va a la inversa.

Alguien ha podido apreciar este comportamiento?

Saludos

Overall


([N1] Velasco) #7

Buenas overall.

Yo en el proceso de incialización del formulario tengo una instrucción en la que la variable global coge el valor de la variable local y después recalcula el control objeto. y no tengo ningún problema

Si quieres mándame un mensaje al correo o si tienes skype y te lo enseño.

Un saludo.

 

 

 

 

Jorge Velasco Fernández

jvelasco@theseedsc.com

www.theseedsc.com


([N2] overall) #8

Hola Jorge,

Funciona como tu bien dices, pero hay un problema, y es que el objeto control se lanza 2 veces cada vez que iniciamos el formulario. Si se trata de pocos registros, bien, pero el rendimiento se puede ver afectado si la salida es de miles de registros.

Saludos,

Overall


([N1] Velasco) #9

Buenas overall

Eso es verdad, yo juego con ello controlando que no lo recalcule si la variable global si está vacia, etc.

Pero eso sería un punto para ver si Velneo nos dá alguna solución.

Un saludo.

 

 


Jorge Velasco Fernández

jvelasco@theseedsc.com

www.theseedsc.com


([N4] Jorge) #10

Nosotros utilizamos un módulo exclusivo para resolver esta y otras problemáticas relacionadas con el refresco de controles.
Por un lado la persistencia de las variables locales la almacenamos en tablas en memoria (similar a las variables globales pero con persistencia por usuario/sesión/modulo).
Por otro decidimos que se refresca en función de los valores de las variables locales o de las variables en tablas en memoria.

Tener en cuenta que en la versión actual (v7.2.1) es un problema considerable que las instrucciones de proceso relacionadas con los manejadores de objetos no se puedan utilizar con objetos declarados en el propio formulario (solo se pueden utilizar para crear nuevas instancias, no para manejar las actuales). El conjunto de instrucciones actual no permite realizar fácilmente paso de valores entre objetos contenidos en un formulario. Lo ideal es que mediante estas instrucciones pudiéramos rellenar el valor de las variables locales de los objetos contenidos para luego refrescarlos. Esto permitiría evitar el uso de variables globales para traspaso de gestión de estado.
Otra cuestión similar (derivada de la falta de concreción en estas instrucciones) es el poder gestionar traspaso de variables entre objetos de una multivista...

Menudo tocho me salió...
 

Para mayores detalles revisaros el ejemplo tuiTV que podéis descargar desde nuestra web http://blog.tipesoft.com

 


([N2] overall) #11

Hola Jorge Hontoria,

Lo que planteas resuelve esta problemática y llegas a tener un control mucho mas eficaz y sin límites. Me he mirado tu app y la verdad está muy trabajada y muy bien cuidada, tanto a nivel visual como de programación.

Crees que el rendimiento es el mismo al haber tantas llamadas a una tabla? Yo tengo un planteamiento igual en los permisos y accesos a las distintas partes de la aplicación para usuarios y el rendimiento baja un poco, aunque estoy esperando que las tablas en memoria están listas para la nueva versión.

Saludos y buena aportación.

Overall


([N1] Velasco) #12

Buenas.

No es por desanimar pero creo que las tablas en memoria no estarán para la 7.3

Un saludo.

 

 

 

Jorge Velasco Fernández

jvelasco@theseedsc.com

www.theseedsc.com


([N2] overall) #13

Si no es así será una lástima, trabajando en la nube se hacen imprescindibles.

Saludos

Overall


([N4] Fran) #14

Buenos dias:

 

Aunque no tiene que mucho que ver con el tema del hilo... un comentario:

 

<Idea de bombero retirado>

Las tablas en memoria estar... están... pero siempre están en la memoria del servidor, no en la del cliente. Esto hace que sean, por el momento, prácticamente igual que las tablas en disco.

Con su ubicación actual se me ocurre que se podrían utilizar, marcando en un campo el usuario propietario del registro, para mejorar el rendimiento de ciertos procesos en tercer plano... como estos se ejecutan en el servidor y la tabla está en la memoria del servidor, se reducirían los accesos al disco en estos procesos.

</Idea de bombero retirado>

 

Un saludo,

 

Fran

fjpnovo@efeuno.org

www.efeuno.org


([N1] fjvila) #15

Ahí le has dao Fran!!!!

y se nota....

Un saludo


([N4] Jorge) #16

Overall: Bastante de acuerdo en el tema del rendimiento:

El rendimiento baja considerablemente si realizas demasiadas llamadas a las funciones, para evitar este problema varios criterios a seguir:

Solo se llaman cuando son estrictamente necesarias.

Nunca se utilizan para elementos repetitivos.

Si se pueden utilizar una vez mejor, para ello utilizamos variables locales que contienen el resultado de la llamada (no llamamos dos veces si sabemos que el resultado no a cambiado).

Por último tuiTV muestra la existencia de esta problemática y busca la mejor solución posible. Pocas opciones tenemos si las variables globales son compartidas y las variables locales no se pueden conectar entre objetos relacionados. Sabes de que hablo por lo que no creo que tengas muchas dudas respecto a lo que digo, tal vez tu única duda es si la solución que planteamos es mejorable. Si das en el cómo no dudes en postear... Nosotros no tenemos una solución mejor, por lo que no nos queda otra.´

Por cierto... en nuestro caso el tema de la seguridad también se resuelve de forma similar en PaaSOS - Nueva funcionalidad de PaaSOS – tuiSecurity ACL’s

 

Fran... me perdí... Razón no te falta: en el server van bastante lentas, lógico la petición es de ida y vuelta. Si planteas otra solución desarrolla un poco, estoy un pelín espeso y no entiendo tu solución.


([N2] overall) #17

Seguiremos con el planteamiento actual a la espera que de poder enviar variables entre objetos. De la misma manera sería muy interesante poder llamar un evento de un formulario desde otro objeto.

Estamos a la espera de lo que nos depara la nueva versión.

Saludos

OVerall

PD, las variables globales son compartidas siempre que residan en disco, las que residen en memoria los cambios solo afectan al usuario.