Genial. Gracias a todos por las respuestas. La solución veo que viene por el
uso de funciones en la bd. Mil gracias!

 

________________________________________________________

Claudio M. E. Bastos Iorio

 <http://www.blumer.com.ar/> http://www.blumer.com.ar

 

 

From: [email protected] [mailto:[EMAIL PROTECTED] On Behalf Of Cristian
C. Bittel
Sent: Thursday, July 19, 2007 12:03 PM
To: [email protected]
Subject: [puntonet] mejor forma para hacer esto?

 

Claudio, creo que ya te dieron la solución por el lado de la base de datos.
El uso de “funciones”. La función se ejecuta cada vez que “consultas” los
datos, y siempre los vas a ver actualizados. Lo ideal es que todo se haga a
través de SP, es cierto que en la DB podrías tener algo “desactualizado”
pero cuando alguien consulta lo tenés recién calculado y podés
“actualizarlo” en ese momento.

 

Por otro lado, si queres tener actualizada la tabla, podés utilizar
“triggers” con los que mantenés siempre actualizados los datos, se ejecuta
automáticamente  cuando se realiza un cambio en la tabla.

 

Otra tercera opción en SQLServer tenés los “Jobs” con los que se programa la
ejecución en un momento o condición determinada. Son como las “tareas
programadas” del SO.

 

Consultá en la lista dbms, seguro te van a aconsejar cual de todas es la
mejor.

 

Cristian

 

  _____  

De: [email protected] [mailto:[EMAIL PROTECTED] En nombre de Claudio M.
E. Bastos Iorio
Enviado el: Jueves, 19 de Julio de 2007 11:25
Para: [email protected]
Asunto: [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] [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/> http://www.blumer.com.ar

 

 

 

No virus found in this incoming message.
Checked by AVG Free Edition.
Version: 7.5.476 / Virus Database: 269.10.9/907 - Release Date: 18/07/2007
15:30

 

No virus found in this outgoing message.
Checked by AVG Free Edition.
Version: 7.5.476 / Virus Database: 269.10.9/907 - Release Date: 18/07/2007
15:30

<<image001.gif>>

Responder a