Guardar Registros en Lotes

5 views
Skip to first unread message

rosb

unread,
Nov 23, 2009, 8:24:43 PM11/23/09
to symfony-es
Hola a todos.

Estoy desarrollando un proyecto symfony donde requiero guardar muchos
registros sobre varios formularios y donde estos registros tienen
mayormente información en común, es decir, hay 4 o 5 campos que se
repiten en todos los registros.

Entonces me pregunto? como hacer para tratar de optimizar el tiempo de
registro de por ejemplo 100 nuevos ingresos.

Algo que he pensado seria definir estos tipos de datos comunes y crear
los registros a partir de ellos (sobreescribiendo el método save() de
symfony en una ciclo for por ejemplo) y luego hacer una especie de
edición en caso de querer cambiar/agregar información a cada registro
creado. Quizas sea una total locura esto que describo, aún no he
realizado prueba alguna.

A primera vista veo un problema con las claves autonumericas y las
relaciones que son uno-muchos y otras muchos-muchos.

En fin queria comentar antes de empezar a jugar para ver si ya se han
planteado el tema para optimizar el ingreso de nuevos registros (no
tiene mucho sentido llenar un formulario de 15 campos donde 6 o 7 o 8
campos son siempre los mismos 100 veces no creen?)

Un saludo desde Valencia-Venezuela

pablodip

unread,
Nov 27, 2009, 5:21:50 AM11/27/09
to symfony-es
Puedes hacer que en el formulario se muestren por defecto los datos
más comunes, así le das la posibilidad de cambiarlos directamente, y
si no tocan nada se ponen esos.

Saludos!

randolph octavio

unread,
Nov 27, 2009, 4:26:41 PM11/27/09
to symfony-es
Hola de nuevo, muchas gracias por la respuesta. Acá expongo mi avance:

Despúes de pensarme un poco mejor el problema de como OPTIMIZAR el
tiempo de creación de nuevos registros el problema pasa de ser Guardar
registros en Lotes a Precargar datos en un Formulario. Aunque esto
represente mas trabajo para nosotros como desarrolladores creo que
para el usuario final si que va a ser de ayuda. Explico el proceso:

Sobre los datos comunes lo que estoy haciendo ahora es: Creé un nuevo
modelo en mi BD con relaciones a todos estos campos comunes y sobre el
Form que me genera guardo esos datos para poder usarlos (precargarlos
en cada formulario) posteriormente durante el proceso de creación de
nuevos registros.

Entonces tengo:
1.- Un nuevo modelo donde temporalmente guardo mis datos comunes a un
grupo de resgistros.
2.- Una precarga según la informacion guardada en el paso previo.
3.- Un botón que "continuar" para crear nuevos registros con los datos
precargados.
4.- Un botón Finalizar que lo que hace es limpiar el modelo donde
tenia mis datos precargados.

Ahora. La acción:

En el punto 3. lo que hago el llamar executeNew() de mi Formulario al
que se van a precargar todos los datos que fueron creados previamente.

En LibrosFrom.class.php tengo lo siguiente:
/********************************************************
Recuperar los datos PreCargados
********************************************************/
$pl = Doctrine::getTable('Preload')->getPreload(); /* este metodo
esta defindo en ProveedorTable respectivamente */
foreach ( $pl as $pl1):
$per = $pl1->getProveedorId();
...
...
...
endforeach;
/**********************************************************
Asignar los datos precargados a los campos de mi Formulario
**********************************************************/
$this->setDefaults(array(
'proveedor_list' => $per, /* Pertenece a una relación
m2m, acá tengo problemas con la precarga */
'procedencia' => $proc,
'estante_list' => $st, /* Pertenece a una
relación 1:n */
...
...
...
));

Ahora que pasa con la precarga: Todos los campos simples
(sfWidgetFormInputText) se actualizan sin problema, pero los que
representan una lista no lo hacen, Para solucionar esto lo que hice
fue lo siguiente:
/*********************************************
Si el método getPreload() devuelve algún dato
cambio el widget por defecto y lo convierte en
uno tipo Input para poder mostrar los datos, si
no devuelve nada deja su widget original y no ha
pasado nada porque muestra la lista para que el
usuario pueda escoger.
*********************************************/

if ($st != ''){
$this->widgetSchema['estante_list'] = new
sfWidgetFormInputText();
$this->validatorSchema['estante_list'] = new
sfValidatorString(array('max_length' => 255)); //Esto debe corregirse
}else{
$this->widgetSchema['taurus_personass_list'] = new
sfWidgetFormDoctrineChoice(array(
'expanded' => false, 'model' => 'TaurusPersonas',
'add_empty' => true
));
$this->validatorSchema['taurus_personass_list'] = new
sfValidatorDoctrineChoice(array(
'multiple' => true, 'model' => 'TaurusPersonas', 'required'
=> false
));
}
Esto funciona para las lista de relaciones 1:n, no para los de m2m

Con los campos que tienen sfWidgetFormDoctrineChoice (m2m), en mi
caso para proveedor_list, me cambia el formato del campo en el
formulario pero no me actualiza el valor de la variable donde tengo
asignado lo que devuelve getPreload(). Solo me pinta un InputText y la
palabra Array.

Si alguien sabe como resolverlo, pues le estare inmensamente
agradecido. Igual igo investigando a ver como doy con la solución.

Saludos nuevamente.
Reply all
Reply to author
Forward
0 new messages