¿CI de Toba relanza los conf de los ei en una llamada AJAX?

Buenas, estoy con un formulario que contiene un combo editable. Como tal, al momento de escribir a descripcion, via ajax realiza la recuperación de ciertos elementos que coincidan con lo ingresado en el mismo.

Ahora bien, me sucede que salta un error en el conf de un ei (otro form del mismo ci), y eso lanza una salida de error y el conocido error cuando se envian un json invalido:

Error en la respueta. Error JS: SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data Mensaje Server

Ademas, el conf en cuestión es de un ei_form que esta asociado a una pantalla completamente diferente (aunque en el mismo ci)

Este es un comportamiento valido?

Resumen de la duda:

  • Llamada ajax de combo editable ejecuta los conf_* de un ci
  • Ejecuta los conf_* aun cuando el ei no se encuentra en la misma pantalla (y por lo tanto no requiere configuracion)

Hola Tomas,

Todo depende lo que tenga el codigo, el conf del CI se dispara en todos los pedidos de pagina… inclusive en aquellos que van por servicios (tales como cascadas, filtrado combo editable, etc).
Si en dicho lugar tenes una referencia al formulario accediendolo por $this->dep(), eso va a forzar ademas de la carga en demanda… la configuracion del ei.

Aca tenes dos opciones:

  • Subsanar el error si es posible (un notice x ejemplo)
  • Mover el acceso a la dependencia al conf de la pantalla en la que este (si es que necesitas tenerlo ahi)

Esto que te comento es algo puntual, a nivel gral si no tenes nada en el conf del CI y solamente tenes los conf__form sin cruzamientos… salvo que sea un error de parseo, no deberia salirte nada al invocar el filtrado del combo editable.

Saludos

No es el conf del ci el problema. Es el conf__form_nombre() de un ei_form que se encuentra en otra pantalla. El conf del ci se ejecuta, eso esta perfecto y lo entiendo (y lo uso de hecho). Pero me choca que el ajax de un ef_combo_editable dispare una llamada ajax que invoque el conf de un ei que se encuentra en una pantalla que no es la suya propia.

Se que no sirve de mucho, pero tire un debug_print_backtrace en el conf__form y es devuelto dentro de la notificacion de error. Adjunto el screenshot

La salida es:

#0 ci_generico_transacciones->conf__form_preview() called at [/home/tomas/workspace/almacenes/vendor/siu-toba/framework/php/nucleo/componentes/toba_componente.php:221] #1 toba_componente->invocar_callback() called at [/home/tomas/workspace/almacenes/vendor/siu-toba/framework/php/nucleo/componentes/interface/toba_ci.php:635] #2 toba_ci->configurar_dep() called at [/home/tomas/workspace/almacenes/vendor/siu-toba/framework/php/nucleo/componentes/interface/toba_ci.php:475] #3 toba_ci->dependencia() called at [/home/tomas/workspace/almacenes/vendor/siu-toba/framework/php/nucleo/componentes/interface/toba_ei_pantalla.php:91] #4 toba_ei_pantalla->aplicar_restricciones_funcionales() called at [/home/tomas/workspace/almacenes/vendor/siu-toba/framework/php/nucleo/componentes/interface/toba_ei.php:121] #5 toba_ei->post_configurar() called at [/home/tomas/workspace/almacenes/vendor/siu-toba/framework/php/nucleo/componentes/interface/toba_ci.php:618] #6 toba_ci->pre_configurar() called at [/home/tomas/workspace/almacenes/vendor/siu-toba/framework/php/nucleo/toba_solicitud_web.php:156] #7 toba_solicitud_web->procesar_servicios() called at [/home/tomas/workspace/almacenes/vendor/siu-toba/framework/php/nucleo/toba_solicitud_web.php:60] #8 toba_solicitud_web->procesar() called at [/home/tomas/workspace/almacenes/vendor/siu-toba/framework/php/nucleo/toba_nucleo.php:96] #9 toba_nucleo->acceso_web() called at [/home/tomas/workspace/almacenes/www/aplicacion.php:33]

El form_preview ni siquera es dependencia de la pantalla en la que estoy (si del ci, pero en otra pantalla).

Ya se que puedo cargar estados en la memoria y hacer los ifs que correspondan. La consulta es si esto es un comportamiento esperado en Toba.


Screenshot from 2019-10-04 15-15-41.png

Screenshot from 2019-10-04 15-15-41.png

Hola Tomas,

sirve y mas de lo que pensas!, esta linea es la que esta generando el problema porque fuerza a cargar todas las dependencias del CI, esten o no en la pantalla actual:

#4  toba_ei_pantalla->aplicar_restricciones_funcionales() called at [/home/tomas/workspace/almacenes/vendor/siu-toba/framework/php/nucleo/componentes/interface/toba_ei.php:121]

Al aplicarse a nivel de operación las restricciones funcionales están afectando el form a pesar de que se encuentra en otra pantalla, quizás se podría mejorar eso para que únicamente afecte a las dependencias en la pantalla de servicio o que se apliquen mas temprano en el pedido de pagina, de forma que la carga de la dependencia no dispare el conf.

Ya se que puedo cargar estados en la memoria y hacer los ifs que correspondan. La consulta es si esto es un comportamiento esperado en Toba.
Si y no, es esperado que se aplique la restricción a toda la operación... no que indirectamente eso genere un notice en una dependencia que no esta en la pantalla. Como te dije antes, estaría piola mejorar el esquema para que afecte solo la pantalla actual, lo agrego como issue.

Saludos

Ahhh genial, pensé que era un quilombo mio. Joya. Gracias Richard.