Acceder a alternador de lista desde javascript ejecutado en acción

Buenas noches.

He programado un javascript que antes se ejecutaba desde una captura de señal de un alternador de lista. La señal la disparaba una acción de la toolbar del alternador.

De esta manera accedía correctamente al alternador:

var alternador = theRoot.dataView();

Ahora , ejecuto el script desde la acción de la toolbar con la opción " disparar objeto " para ahorrarme capturar una señal, pero el código anterior no me funciona ¿Cómo tengo que modificar el código para poder acceder al alternador desde el script al dispararlo directamente desde la acción?

image

Saludos.

Hola softbert.

Pues te estás complicando la vida.
Eliminar un “capturar señal” no es un ahorro, todo lo contrario, precisamente el evento Capturar señal te permite ejecutar Manejadores del propio Alternador.

Disparando directamente un proceso estarás en el contexto de la aplicación y tendrás que localizar el objeto Localizador en el Interface visible en ese momento.

Tendrás que controlar el modelo de objetos accesible con el API de Velneo.

Saludos
Paco Satué

Buenas noches.

Creo que el programador es el único que puede decidir si se “está complicando la vida o no”, ya que conoce los motivos por los que toma una decisión.
El script lo quiero ejecutar desde una acción de la toolbars de varios alternadores de lista. Me parece tedioso tener que disparar una señal en cada acción, capturarla en cada alternador y en el manejador del evento ejecutar el script. Es algo repetitivo y poco elegante. Son 3 instrucciones para ejecutar un script por cada alternador donde quiero hacerlo.
Me parece más óptimo hacer directamente la llamada al script desde la propia acción.

Gracias. Probaré lo que me propone usted.

Saludos.

Hola softbert.

Nada más lejos de mi voluntad que determinar tu decisión de complicarte la vida o no.

Con Velneo nativo construyes un código muy sólido y fiable que siempre va a funcionar bien.
Pero esa forma de programar tiene un coste, debemos olvidarnos del paradigma de programación que hayamos usado hasta ahora.

En Velneo diseñas un Alternador con la Conexión de evento y el Manejador.
Una vez probado lo copias y pegas para crear otros 2 Alternadores más. De esta forma, el objeto theRoot siempre será, y nunca habrá duda, el control Vista de datos del Alternador que haya capturado la señal.

Si ejecutas el proceso directamente desde la Acción, entonces eres tú el que tiene que encontrar en el interface qué Alternador quieres procesar. Tendrás que buscar el control que tenga el foco, pero a veces no será el Alternador el que tenga el foco. También lo puedes encontrar navegando por el árbol de objetos desde la Vista o pestaña activa. Esta opción es poco fiable y en cuanto cambies el Identificador de algún control o lo muevas de sitio, el código javascript deja de funcionar.

Es el dilema de Copiar y pegar controles con la gran potencia de la Refactorización o liarme a escribir código javascript que dejará de funcionar con solo tocar un Nombre de objeto.

Yo pongo en la balanza

  • ¿ tener garantía 100% de que el objeto theRoot es el que quiero aunque tenga 10 líneas más de código,
  • o ahorrarme esas 10 líneas pero a costa de rebajar la fiabilidad de obtener el objeto que quiero ?

Por supuesto, programar en javascript de forma dinámica y tener el control del árbol de objetos es muy gratificante al principio, pero en ese camino Velneo ya no te asistirá cuando haya problemas y te dejará tirado a la mínima.

Mi consejo, usar el API de Velneo cuando realmente sea necesario y solo cuando conozcas perfectamente todas las clases disponibles y su funcionamiento.

Espero haberte aclarado un poco la justificación para complicarte o no la vida.

Saludos
Paco Satué

Muchas gracias.

Al final lo solucioné simplemente con esta línea de código y me ahorré disparar y capturar señales.

var rejilla = theApp.focusDataView();

Saludos.

P.D.: Debería usted de escribir un libro técnico sobre Velneo, con ejemplos. Ayudaría a muchísima gente.

Hola softbert.

Por favor, tutéame que no soy tan mayor.
Gracias por lo del libro. Hace 20 años me lo hubiera planteado, pero ahora ¿quién lee? y menos pagar por ello.

En cuanto a lo de var rejilla = theApp.focusDataView(); prueba 2 cosas:

  1. Coloca el cursor en otro control distinto al Alternador y pulsa la Toolbar.
  2. Intenta depurar la siguiente línea a ésta y comprueba el valor de la variable rejilla.

Y me cuentas.

Saludos
Paco Satué