Come individuare il cambiamento di un field specifico in una tabella?

lunedì 25 gennaio 2010 - 17.20

paquito_ita Profilo | Senior Member

Ciao,

ho sviluppato un'applicazione web che regolarmente notifica tramite email se un task (associato alla tabella "Task" e assegnato al relativo utente) viene modificato.
Ora e' stato richiesto di inoltrare la notifica solamente se alcuni campi vengono modificati e non altri. Ad esempio se il titolo o il responsabile del task viene modificato --> notifica, ma se lo "stato" del task viene cambiato da "in progresso" a "terminato" --> NON notificare.

Attualmente la business logic era semplice perché confrontavo la data dell'ultima notifica con quella della modifica del task (field Task.ModifiedOn) e nel caso il task fosse risultato modificato inviavo la notifica.

Ora tuttavia come posso riconoscere che la modifica fatta riguarda un campo o un altro?
Grazie

alx_81 Profilo | Guru

>Ciao,
Ciao

>Ora tuttavia come posso riconoscere che la modifica fatta riguarda un campo o un altro?
l'unica che mi viene è che quando vai ad inserire il task controlli se è cambiato rispetto alla versione sul database.
Che RDBMS utilizzi?

>Grazie
di nulla!
--

Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

paquito_ita Profilo | Senior Member

Ciao Alx,

>>Ora tuttavia come posso riconoscere che la modifica fatta riguarda un campo o un altro? l'unica che mi viene è che quando vai ad inserire il task controlli
>se è cambiato rispetto alla versione sul database.
Quella era anche la mia. Prima di fare l'update sul server, verifico quali campi interessa la modifica e inizializzo un nuovo campo booleano nella tabella Task. Questo perchè la notifica avviene ogni giorno alle 17:30 in base alle modifiche e non real time. Senza questo campo, una volta aggiornato il record, non saprei piu' se inviare o meno la notifica al momento opportuno.
Oppure tu vedi un modo alternativo?

>Che RDBMS utilizzi?
SQL server 2008

Grazie di nuovo

lbenaglia Profilo | Guru

>Oppure tu vedi un modo alternativo?
Io vedo un trigger DML di UPDATE che tramite una IF UPDATE() va a verificare quale colonna è stata modificata, scrivendo una riga in una tabella di appoggio.
In modo asincrono prevederei un job che spazzoli la coda inviando se è il caso l'e-mail di notifica.

>Grazie di nuovo
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

alx_81 Profilo | Guru

>Io vedo un trigger DML di UPDATE che tramite una IF UPDATE()
>va a verificare quale colonna è stata modificata, scrivendo una
>riga in una tabella di appoggio.
>In modo asincrono prevederei un job che spazzoli la coda inviando
>se è il caso l'e-mail di notifica.
Purtroppo non sopporto i trigger, e quindi li evito molto spesso . Preferisco legarmi ad una stored procedure che implementi la stessa logica.
In effetti però, questa soluzione è più indolore di quelle precedentemente descritte..
paquito_ita, a te la scelta
--

Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

paquito_ita Profilo | Senior Member

Grazie mille per i consigli!

Ora ne discutero' meglio con il project leader e il DB manager.
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5