Si, me parece que la mayor restriccion de Claudio pasa por ese lado.
 
Ahora ya tiene dos soluciones, usar funciones (si el motor las soporta) o
actualizacion diaria con un Job.
 
Saludos
 
Carlos


  _____  

From: [email protected] [mailto:[EMAIL PROTECTED] On Behalf Of Daniel
Calvin
Sent: Jueves, 19 de Julio de 2007 01:51 p.m.
To: [email protected]
Subject: [puntonet] mejor forma para hacer esto?


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/> http://www.blumer.com.ar 

 

 

From: [email protected] [mai  <mailto:lto:[email protected]>
lto:[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:  <mailto:[email protected]>
[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/> http://www.blumer.com.ar

 

 




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

Responder a