Error al crear un formulario de forma dinamica

Hola

Estoy armando un formulario que permite cargar los resultados de un laboratorio clinico. La cantidad de ef a mostrar es dinamico, depende de una lista de item de laboratorio.

Tengo un solo ef tipo fecha que se carga en el diseño del formulario y los demas se agregan a medida que va recorriendo la lista de items y para cada uno ello sumo un ef, “ef_editable_numero”. El codigo que utilice es :

$extra_ef = array(
‘obligatorio’ => 0,
‘colapsado’ => 0,
‘desactivado’ => 0,
‘descripcion’ => ‘’,
‘orden’ => 1,
‘oculto_relaja_obligatorio’ => 0,
‘carga_permite_no_seteado’ => 0
);

for ($i=0; $i<count($item_laboratorio);$i++) {
$form->agregar_ef($item_laboratorio[$i][‘idlaboratorio’], ‘ef_editable_numero’, $item_laboratorio[$i][‘nombre’], $item_laboratorio[$i][‘idlaboratorio’], $extra_ef);
}

Me base en la definicion de la funcion agregar_ef: agregar_ef( string $id_ef, string $clase, string $etiqueta, string $columnas_clave, array $parametros_extra )

Asi como arme el FOR, logro que me muestre el formulario como quiero, adjunto imagen.

El tema es que al hacer un clik en el boton AGREGAR, se rompe y muestra mensajes de error.

El codigo del boton :
function evt__form_laboratorio__alta($datos)
{
ei_arbol($datos);
}

MENSAJES DE ERROR:
Notice: Undefined offset: 13 in C:\Proyectos\toba\2.5\php\nucleo\componentes\interface\toba_ei_formulario.php on line 405
Fatal error: Call to a member function validar_estado() on null in C:\Proyectos\toba\2.5\php\nucleo\componentes\interface\toba_ei_formulario.php on line 405

Indudablemente, algo me quedo mal al armar el “agregar_ef” y no me estoy dando cuenta.

Porfi, podrian ayudarme.

Saludos


formulario.png

formulario.png

Hola Marcela,

el tema probablemente este relacionado al punto en el cual agregas dichas columnas al formulario.

La lista de efs que se enviaron al cliente se guarda de un pedido de pagina al otro… pero la definicion de la operacion se levanta desde la bd/disco… con lo cual si agregaste los efs durante el conf del formulario, dichos elementos no se encuentran durante la etapa de eventos… que es la primera.

Ello hace que se este intentando disparar la validacion sobre un ef para el cual no existe un objeto.

La forma mas sencilla en gral es a la inversa, generas estaticamente todos los efs que necesitas y luego en runtime quitas aquellos que no vas a utilizar, de esa forma te aseguras varias cosas:

  • Primero que no aparezca el error
  • Segundo que podes agregar restricciones funcionales sobre los efs previo al runtime, cosa que si los agregas dinamicamente resulta imposible.

Intentar agregas los efs en una etapa previa, solamente va a hacer que se complique el runtime… ya que al intentar acceder al formulario estarias disparando la configuracion del mismo… la cual es una etapa posterior a los eventos.

Una opcion, es que toda la logica de agregado de los efs quede dentro de una subclase del formulario pero vas a tener que redefinir mucho mas que ahora, ya que vas a necesitar hacerle llegar la informacion que posee el CI para decidir que “columnas” van.

Saludos