Identificar el objeto acción desde proceso llamado, mediante javascript


([N4] sat) #1

Hola:

La idea es la siguiente. Tenemos una acción que llama a un proceso javascript. ¿Es posible desde el proceso javascript saber el nombre (objeto) que ha invocado el proceso?
Esto permitiría en un mismo proceso hacer cosas diferentes en función de la acción que lo haya ejecutado.

¿Alguna idea?

Gracias.


([N1] wikan) #2

No puedes saber la acción pero puedes saber el objeto llamador con theSender.

Otra opción para lo mismo sería que el proceso reciba una variable y haces las funciones en base a esa variable. Lo que tendrías que hacer es un proceso intermedio que le diera valor a esa variable.


([N4] sat) #3

Hola Wikan:

Hasta donde yo he visto, en la documentación dice que theSender es válido para eventos. Yo desde luego, no he conseguido utilizarlo con objetos.

Evidentemente, la segunda opción sería válida, pero precisamente se trataba de evitar tener que tocar el proceso cada vez que añado una nueva acción que llame al proceso. Si en el proceso puedo “coger” el nombre de la acción que lo llama y luego reutilizarlo dentro del proceso para hacer una u otra cosa, la abstracción se incrementa notablemente y se simplifica el mantenimiento.

Gracias.


([N1] wikan) #4

Según la documentación de VRoot, literalmente dice

Ejecutamos un proceso JavaScript con una acción: el objeto theRoot del proceso representa al ejecutor del proceso en V7.

No si un proceso llamado desde un acción, su ejecutor se refiere a la propia acción.
¿Has probado theSender desde un proceso llamado desde una acción a ver que te devuelve?

De todas formas ya tu propia preguntas es abstracta, me refiero. Dices que no quieres tocar el proceso cuando añadas una nueva acción, por ende, en teoría ¿el proceso ya hace todo lo que tiene que hacer?. ¿No tendrías que tocar el proceso igualmente para añadirle esa nueva “acción” que debe realizar?


([N3] pacosatu) #5

Hola Luis, Manuel.

  • theSender solo se instancia en los Manejadores de evento (del formulario), en este caso de tipo Javascript.
  • theRoot es el ejecutor del propio proceso, la Acción es simplemente un Lanzador.

Como no podemos pasar parámetros a un proceso “Lanzado” desde una Acción, yo creo que no nos queda más remedio que crear un Proceso Intermedio por cada Acción (como ya te indicó Manuel), que actúe como intermediario entre la Acción y el Proceso llamado.

1- Acción ACC_ACCION1 -> Ejecutar proceso PRO_ACCION1
2- PRO_ACCION1
Crear manejador de objeto PRO_PRINCIPAL
Set variable local CACCION = “ACCION1” // pasamos parámetros
Disparar objeto

1- Acción ACC_ACCION2 -> Ejecutar proceso PRO_ACCION2
2- PRO_ACCION2
Crear manejador de objeto PRO_PRINCIPAL
Set variable local CACCION = “ACCION2” // pasamos parámetros
Disparar objeto

De esta forma podemos parametrizar la llamada al proceso genérico PRO_PRINCIPAL.
Por cada ACCION habrá un PROCESO que instancia y parametriza la llamada al proceso genérico.

Saludos
Paco Satué