Hola!
Tengo 2 pantallas.
La primera que posee 3 formularios, y uno inferior con un botón que guarda los datos y permite pasar a la siguiente pantalla.
En la siguiente pantalla, tengo 2 formularios, un ML y un formulario con un botón que me permite volver a la primer pantalla.
Ahora, bien, todo indicaría que los eventos se lanzan según el orden de los formularios en forma visual.
Eso funciona de esa forma en la primer pantalla.
Es decir, se lanzan los eventos de los 3 formularios, de arriba a abajo, y luego se ingresa al evento propiamente del botón que lanzó la ejecución. Esto me permite validar y preparar datos, previos a la ejecución del evento del botón propiamente.
En la segunda pantalla, sin embargo, pese a que el ML se encuentra arriba, se ejecuta siempre primero el evento del botón.
Es un comportamiento raro… no se si tendrá que ver con que es un ML.
Hay forma de especificar o asegurar el orden de llamada en los eventos de una pantalla?
De hecho, tiene que ver con ser un ML, ya que a la segunda pantalla le agregué un formulario común, y el evento modificación se dispara antes.
modificacion del formulario
evento del boton
modificacon del formulario ML
El ML está definido Sin análisis, pero probé con las 3 opciones y siguen disparándose en ese orden, no respetando el orden de presentación en la pantalla.
Se me ocurre que el orden de atención de eventos es:
formularios
botones
formularios ML
Desconozco si esto es modificable, o puede solucionarse pero quizá por consistencia debería ser:
formularios
formularios ML
botones
O quizá tener la posibilidad de seleccionar el orden de atención de los eventos en una pantalla en forma manual. Capaz es posible, y simplemente desconozco como hacerlo.
te hago una consulta… el evento de la segunda pantalla esta tildado como ‘Maneja Datos’ ?.
De no ser asi, el Ci en cuestion lo lanzara como un evento propio sin tomar en cuenta a sus dependencias, en caso contrario siempre debe primero lanzar los eventos de las dependencias y luego los propios.
Si, maneja datos, por eso me extraño que dispare el modificacion del formulario (maneja datos), el evento del botón (maneja datos), y luego el evento modificación del ML (maneja datos, sin análisis de filas).
Ojo, hay que tener en cuenta que el botón que genera el disparo de los eventos está en otro formulario, no en el CI.
Es decir, visualmente, aparecen así (layout):
Formulario1 con evt modificacion
FormularioML con evt modificacion
Formulario2 con botòn
Al presionar el botón, se evaluan los formularios en orden de aparición modificacion_1, evt_boton (formulario_2), modificacion_ML.
El mismo esquema pero solo con formularios:
Formulario1
Formulario2
Formulario3 con boton,
Los dispara en orden… form1_modif, form2_modif, evt_boton_form3
Es raro…
Igual, si fuera posible cambiar algo, sería muy interesante poder definir a nivel de pantalla en que orden se evaluarian las dependencias cuando salte cualquier evento.
aparentemente el orden visual se mantiene unicamente para los componentes del mismo tipo (yo pense que era en gral), buscando en el codigo encontre lo siguiente:
//Se ordenan las dependencias: Por ultimo se atienden los cuadros y antes los ML
//Porque pueden contener eventos a nivel de fila que cambien algun cursor
//y cambien el procesamiento de los otros eventos
$cuadros = array();
$form_ml = array();
$otros = array();
foreach ($dependencias as $dep) {
if ($this->_dependencias[$dep] instanceof toba_ei_cuadro) {
$cuadros[] = $dep;
} elseif ($this->_dependencias[$dep] instanceof toba_ei_formulario_ml) {
$form_ml[] = $dep;
} else {
$otros[] = $dep;
}
}
return array_merge($otros, $form_ml, $cuadros);
Con lo cual, el orden en que se disparan depende del tipo de componente usado y luego del orden visual en que esten definidos.
De todas maneras voy a charlar con Seba el tema del orden de disparo de eventos, quizas no salga para esta proxima version… pero veremos que pasa mas adelante.
Impecable! de momento, lo solucioné, ya que funciona, (al menos, mientras no actualice la versión) ya que es consistente, y sabiendo el orden de disparo uno actúa en consecuencia.
Pero para evitar que “deje” de funcionar ante algún cambio en el núcleo lo ideal sería que pudiera extenderse o indicarse el orden de proceso, asegurando así el orden de ejecución.
Gracias!!!