Hola Carlos

Me parrece y no estoy seguro que akguna de las aplicaciones usa esa tabla y
ese campo y el no puede tocarla. Por ese necesita el campo actualizado.
Eso entendi yo y por eso le recomende el campo calculado en la tabla y una
funcion que retorne el valor.

:)

Daniel

El día 19/07/07, Carlos Peix <[EMAIL PROTECTED]> escribió:

 Hola Claudio,

No estoy seguro si me haces las preugntas a mi, pero si este fuera el
caso, en la solucion que propongo no hay ningun flag que actualizar, la
condicion de aprobado o, esta no depende solo de la fecha de aprobacion y
del plazo de validez de la misma. En la solucion basada en el modelo yo
eliminaria el flag ya que solo duplica informacion.

Ahora entiendo que tu escenario es distinto. Lo que yo haria si estuviese
en tus zapatos es crear un SP que actualice el flag en funcion de la fecha
de aprobacion, de la fecha actual y del plazo de validez. Luego ejecutaria
ese SP a diario con una tarea del motor de BD (si soporta tareas).

Carlos

 ------------------------------
*From:* [email protected] [mailto:[EMAIL PROTECTED] *On Behalf Of *Claudio
M. E. Bastos Iorio
*Sent:* Jueves, 19 de Julio de 2007 11:25 a.m.
*To:* [email protected]
*Subject:* [puntonet] mejor forma para hacer esto?

 Gracias Carlos, Daniel y los que contestaron. Sigo insistiendo en que no
me exprese correctamente y por eso no me entendieron.

Tengo otras aplicaciones accediendo a la base de datos (MSSQL) también,
que creo que es lo que mas complica el panorama. Esta bien tu enfoque y
estoy (dentro de mis posibilidades) trabajando lo mas OOP que puedo.

Si tienen la voluntad de leer lo suficiente, vuelvo a explicar el
escenario. (GRACIAS)

Tengo una tabla con usuarios, que compran suscripciones (para explicarlo
simple), que duran digamos un año. Cuando se vence la suscripción, se pueden
loguear pero no acceder a ciertas funcionalidades. Tengo campos con la fecha
en que se registraron, fecha de aprobación, y fecha de vencimiento. Estos
valores DEBEN permitir su edición "manual".  La condición de aprobado se
establece manualmente via un CMS, que establece en ese momento el
vencimiento a un valor predeterminado o a lo que se quiera establecer.

Hasta ahí todo bien. Ahora lo que no se donde "disparar" es el chequeo de
que usuario esta aprobado a la fecha y cual no. Siguiendo tu ejemplo
(corregime si me equivoco), los datos en la bd se actualizarían al momento
en que se instanciara esa clase, ej: cuando el usuario se loguea, cuando
haga un listado de usuarios, cuando llame a un "actualizar estados" en el
CMS, etc. O sea, mis datos en este caso dependerían del modelo y podrían no
ser actuales, se entiende? (ej nadie se loguea o accede al cms en un mes).

Supongo que en este caso debería pensar la solución por el lado de la bd,
no? Puedo ejecutar un SP que chequee estados, cada "x" cada cantidad de
tiempo? O cada vez que se consulte la bd (sin importar desde donde). COMO?.

Me sugirieron también utilizar un timer que llame un SP. Aunque seguiría
atado al modelo…

Gracias desde ya!



________________________________________________________

Claudio M. E. Bastos Iorio

http://www.blumer.com.ar





*From:* [email protected] [mailto:[EMAIL PROTECTED] *On Behalf Of *Carlos
Peix
*Sent:* Thursday, July 19, 2007 10:32 AM
*To:* [email protected]
*Subject:* [puntonet] mejor forma para hacer esto?



Hola Claudio,



Veo que toda en la referencia que haces al tema en cuestion hablas de
tablas, columnas, etc, en otras palabras, lenguaje de base de datos. No
estoy seguro si tu consulta es como hacer una actualizacion sobre la tabla
(una cuestion de base de datos) o de como encontrar una solucion mas general
a este problema.



Asumiendo que estamos hablando de la segunda opcion y de que tenes una
clase Usuario en tu modelo, recomiendo lo siguiente (escrito de memoria):



class Usuario

{



    private DateTime approvalDate;

    public void ApproveOn( DateTime approvalDate )

    {

        if ( approvalDate > DateTime.Now )

            throw new ArgumentOutOfRangeException( "approvalDate",
approvalDate );

        this.approvalDate = approvalDate;

    }



    public bool IsApproved

    {

        get

        {

            return DateTime.Now.Substract( approvalDate ) <=
GetApprovalInterval();

        }

    }



}



Donde la funcion GetApprovalInterval() deberia buscar desde el lugar
conveniente el intervalo de aprobacion maximo, posiblemente desde un archivo
de configuracion o desde la base de datos.



En la base de datos solo grabas la fecha de la ultima aprobacion. Este
enfoque mueve la logica al modelo y la saca desde la  base de datos. esto
puede ser bueno o no, incluso puede ser posible o no.



Todo depende del contexto. Por un lado, te abstrae de la base de datos
(puede soportar funciones o no). Pero si otras aplicaciones acceden
directamente a la base de datos (sin pasar por el modelo) puede que no te
quede otra alternativa.



Saludos



Carlos


 ------------------------------

*From:* [email protected] [mailto:[EMAIL PROTECTED] *On Behalf Of *Claudio
M. E. Bastos Iorio
*Sent:* Miércoles, 18 de Julio de 2007 10:32 a.m.
*To:* [email protected]
*Subject:* [puntonet] mejor forma para hacer esto?

Tengo una tabla de usuarios con una columa [isapproved], que toma valores
0-1 en base a una aprobación manual via CMS. En base a [isapproved] el
usuario accede o no a ciertas funcionalidades. Hasta ahí todo ok.

Ahora necesito hacer expirar esa condición en "x" tiempo, digamos un año,
la fecha en que debe expirar es un valor en otra columna. Se que podría
chequear si hay un usuario "para expirar" ese día cada vez que me logueo en
el CMS, pero no lo veo muy "elegante". Que otras forma habría de hacer esto?
Sugerencias?

Desde ya muchas gracias.



________________________________________________________

Claudio M. E. Bastos Iorio

http://www.blumer.com.ar








--
Daniel A. Calvin
Cooperator Team Member
http://www.cooperator.com.ar
Microsoft Certified Professional

Responder a