SQLFORM.grid() control detect_record_change

39 views
Skip to first unread message

dome...@gmail.com

unread,
Feb 12, 2016, 8:14:55 AM2/12/16
to web2py-usuarios

Ante todo, un saludo al Sr. Massimo Di Pierro y toda la colectividad que lo secunda, por este excelente framework, que no deja de sorprenderme.

 

Contexto del problema:

   Versión de web2py: 2.13.4 para windows (EXE) (siempre voy al día ;-))

   Sistema operativo: windows XP SP3.

   Db: postgresql 9.4

 

Estoy usando como mecanismo general de tratamiento CRUD y funcionalidad asociada a los reg.de una tabla, el método SQLFORM(grid).

Pero me tope con un problema no menor: dos (o más) usuarios que acceden al mismo registro en un mismo lapso de tiempo -están mirando la misma información obviamente-, uno de ellos denominado “primero”, actualiza los datos -nada que objetar-, pero luego, un “segundo usuario”, que tiene todavía una "vista de datos viejos", al dar confirmar para actualizar los suyos, termina realizando cambios sobre datos no previamente refrescados  como correspondería, si no que, además, campos que “segundo” no actualizó y están con valores “de la vista vieja”…..¡¡ se terminan restaurando ¡!!, anulando los valores que  “primero” realizó…..

 

 No encontré un mecanismo para detectar este hecho, y proceder a advertir a los usuarios, que deben refrescar los datos para proceder nuevamente a realizar cambios si corresponde, similar al que si poseen los formularios individuales con SQLFORM(form), como es, la acción DETECT_RECORD_CHANGE para el evento PROCESS().

 

Aclaro que no me estoy refiriendo al mecanismo transaccional de web2py y la DB -uso POSTGRESQL-, que funciona correctamente.


La solución que busco -si alguien ya la descubrió- , sería un mecanismo general para SQLFORM(grid), no para uno en particular. Quiero evitar el crear y asignar FORMs individuales para SQLFORM(grid) dado que, obviamente, se dispararían los tiempos de desarrollo, incrementando innecesariamente, la cantidad de objetos de la aplicación.

Previamente, intenté solucionar esto en el evento ONVALIDATION, consultando el objeto form que recibe como parámetro, en sus atributos (record, latest, detect_changed, detect_record_change). Pero no obtuve resultados.

La idea, es que esto debiera ser un chequeo normal del GRID y cualquier otro tipo de  FORM. Inclusive, debiera estar siempre activado y poder devolver un error específico y/o realizar una acción a sus efectos.


Gracias de antemano desde Montevideo/Uruguay.

Message has been deleted

DenesL

unread,
Apr 1, 2016, 4:45:36 PM4/1/16
to web2py-usuarios
No hay forma de pasarle parametros al metodo process de la forma que se construye internamente en el codigo actual.

Habria que solicitar una modificacion del codigo en sqlhtml.py, tal vez adicionando un parametro processargs={} en la funcion grid de SQLFORM para que sea incluido en la linea donde se hace el llamado a process:
             update_form.process(
                formname
=formname,
                onvalidation
=onvalidation,
                onfailure
=onfailure,
                onsuccess
=onupdate,
               
next=referrer,
               
**processargs)

Denes

Reply all
Reply to author
Forward
0 new messages