Desde dónde se puede acceder a las cestas?


([N1] soporte) #1

Buenas tardes.

Si yo desee un proceso que se ejecuta cuando pulso un botón, creo una cesta local, puedo luego acceder a esa cesta desde otro procedimiento que está en el mismo formulario?

O para poder hacer esto y acceder a la misma cesta desde el mismo formulario tengo que crearme antes un objeto cesta?

Gracias


([N1] wikan) #2

Se supone que mientras las cestas locales se llamen igual, debes tener acceso aunque lo ejecutes en eventos distintos del mismo formulario.
Verifica que no estés limpiando la cesta


([N4] Infortic) #3

Wikan, no es del todo así, ya lo ví yo con soporte porque parecía que ese era el funcionamiento, pero no… y finalmente tuvieron que cambiar la documentación para explicarlo bien.

La cesta se mantiene siempre y cuando las llamadas a los manejadores estén “enlazadas”, al finalizar la ejecución en curso se destruyen las cestas.

Es decir.

  • 2 manejadores, los dos con la cesta local con el mismo nombre.
  • Si haces un evento que llama al manejador 1 y el manejador 1 llama al 2 --> Si comparten valores las 2 cestas
  • Si un evento llama al manejador 1 y termina, y otro evento llama al manejador 2 --> La cesta está vacía, no comparte.

Remito la información que me proporcinó soporte:

Al igual que las variables locales de un objeto son compartidas por todos los manejadores de evento, las cestas locales creadas en los manejadores de evento, también pueden ser compartidas por los menejadores. Para evitar que varios manejadores tengan conflicto con las cestas locales solo tenemos que asignarles nombres diferentes a las cestas. Lo importante es que esta funcionalidad nos permite de forma sencilla compartir listas de registros entre los manejadores de un objeto. Las cestas creadas por un manejador de objetos se destruyen cuando el manejador de evento finaliza, pero en el caso de que el manejador de evento sea llamado por otro manejador las cestas no se destruyen hasta que finaliza el manejador principal, es en este caso en el que si usamos cestas creadas con el mismo nombre en 2 manejadores sus datos son compartidos.

Esto limita mucho dicha funcionalidad la verdad, toca usar cestas globales en la mayoría de casos.


([N1] wikan) #4

Bueno, siempre se podrá pasar la lista de registro a una variable en formato JSON y usarla.


([N3] pacosatu) #5

Hola.

Ocurre algo parecido con el comando “Disparar objeto (manejador)”. Podemos disparar un Manejador de Objeto definido en otro manejador del formulario siempre y cuando uno llame al otro. Así podemos disparar un mismo Objeto desde uno o varios manejadores donde previamente se han dado valores a las variables locales de dicho Objeto.

Por ejem:
Los manejadores A y B personalizan de diferente manera el objeto BUS_CLIENTES y los 2 pasan el mismo manejador de objeto al manejador de evento O.

  • Manejador A
    Crear manejador de objeto (BUS_CLIENTES)
    Set variable local de objeto (CVALOR1, valorA1)
    Set variable local de objeto (CVALOR2, valorA2)
    Interfaz: Ejecutar manejador de evento (Manejador O)

  • Manejador B
    Crear manejador de objeto (BUS_CLIENTES)
    Set variable local de objeto (CVALOR1, valorB1)
    Set variable local de objeto (CVALOR2, valorB2)
    Interfaz: Ejecutar manejador de evento (Manejador O)

  • Manejador O
    rem la línea siguiente está comentada para que el comando Disparar objeto vea el identificador BUS_CLIENTES
    rem Crear manejador de objeto (BUS_CLIENTES)
    rem El manejador BUS_CLIENTES conserva la referencia y valores dados a las variables locales
    Disparar objeto (BUS_CLIENTES)

Esto es algo no documentado por Velneo (que yo sepa) y no está garantizado que funcione en el futuro.

Saludos
Paco Satué


([N1] soporte) #6

Muchas gracias a todos