Hola, cómo están?
Quería consultar porque estoy usando unos formularios multilínea para un sistema de presentación de proyectos. El problema que tengo es el siguiente, cuando ingresan datos en el formulario y hago el sincronizar me guarda los datos sin ningún problema. Al volver a entrar en la pantalla de edición los datos están, pero aparecen en un orden diferente al que se cargó. Es importante que se mantenga el orden.
Lo tengo configurado de la siguiente manera: en el editor de Toba tengo un datos relación que contiene la tabla del proyecto a presentar y los objetivos. En la solapa de tablas está configurado para proyecto min filas: 0, max filas: 1 y para objetivos min filas: 0 y max filas 20.
El formulario ml, tiene configurado: análisis en línea con los registros, permite agregar, no permite ordenar.
En el evento conf, traigo los datos de la siguiente manera:
function conf__form_objetivos_esp(proy_extension_ei_formulario_ml $form_ml)
{
return $this->dep('datos')->tabla('objetivos_especificos')->get_filas(null, true);
}
En el evento modificación, hago lo siguiente:
function evt__form_objetivos_esp__modificacion($datos)
{
$this->dep('datos')->tabla('objetivos_especificos')->procesar_filas($datos);
$this->dep('datos')->sincronizar(); //guardo en este momento, porque en la pestaña siguiente lo tiene que reflejar
}
Otra de las cosas que probé es pasar en el método, el parámetro false para get_filas(null, false).
Estoy usando php 5.3.8 en desarrollo y testing; y 5.2.10-2ubuntu6 en producción, en cualquiera de los 3 servidores tengo el mismo inconveniente.
Mi consulta es si hay alguna forma de que los datos aparezcan tal cual se los carga, a lo mejor estoy haciendo algún paso mal. El problema puede ser debido a problemas de concurrencia de usuarios (vi que pasa seguido cuando el servidor tiene muchas personas conectadas al sistema) o no tiene nada que ver?
Muchas gracias por la ayuda
la clave de la tabla hija es un autonumerico? o involucra algun campo que se edita a mano?.
la relacion se carga cada vez que entras (o antes) a la pantalla de edicion?
Tene en cuenta que los objetos de persistencia no especifican una columna de orden en el mecanismo de carga, por lo cual los datos se mantienen en el orden que los entrega el motor, a priori asumo que deberia ser el orden de las claves, aunque en ciertas situaciones pareciera estar tomando otro distinto, no tengo conocimiento interno del motor como para saber que agarra… pero a veces parece ordenado por un maniaco depresivo el recordset.
Lo que podes usar para forzar un ordenamiento en particular es el objeto toba_datos_busqueda, alli podes especificar una o mas columnas con un criterio de ordenamiento, te cambiaria un poco el metodo conf del form.
Gracias por tu respuesta. Respondiendo a tus preguntas:
La clave de la tabla hija es un valor autonumérico (está creado por una secuencia) los campos relacionado con la clave primaria y con la clave foránea de la tabla no se modifican, pero existen otros campos que si (de hecho son los que se muestran en el formulario).
En la pantalla principal, tengo un cuadro que mediante el evento selección carga la relación y pasa a la pantalla de edición. Después se trabaja todo con los métodos get_filas y procesar_filas, hasta que se hace un sincronizar() dentro del evento procesar que depende el ci principal. Esta última acción te lleva a la pantalla principal nuevamente.
De todos modos ahora pruebo como me va siguiendo los pasos que me decís vos, creo que con eso va a funcionar. De todos modos te cuento más tarde como me fue.
claro, en ppio uno creeria que el orden en que se retornan los registros es el de la clave ppal, siendo autonumerica el orden no deberia alterarse nunca.
De todos modos ahora pruebo como me va siguiendo los pasos que me decís vos, creo que con eso va a funcionar. De todos modos te cuento más tarde como me fue.