using System; namespace SteamWare { /// /// classe gestione logging esteso di eventi e note utente (correlabili) /// public class log2note { #region area protected /// /// TableAdapter di accesso alla tabella anagrafica filtraggi /// protected DS_loggingTableAdapters.T_anagFiltroTableAdapter taAnagFilt; /// /// TableAdapter di accesso alla tabella anagrafica record /// protected DS_loggingTableAdapters.T_anagRecordTableAdapter taAnagRec; /// /// TableAdapter di accesso alla tabella logging record di eventi /// protected DS_loggingTableAdapters.T_logRecordsTableAdapter taLogRec; /// /// TableAdapter di accesso alla tabella logging utente /// protected DS_loggingTableAdapters.T_logUtenteTableAdapter taLogUt; /// /// TableAdapter di accesso alla vista logging eventi /// public DS_loggingTableAdapters.v_logRecordsTableAdapter ta_vLogRec; /// /// TableAdapter di accesso alla vista logging utente /// public DS_loggingTableAdapters.v_logUtenteTableAdapter ta_vLogUt; /// /// effettua setup dei connection strings da web.config delal singola applicazione /// protected void setupConnectionString() { // cambio le connString string _connectionString = memLayer.ML.confReadString("LoggingConnectionString"); taAnagFilt.Connection.ConnectionString = _connectionString; taAnagRec.Connection.ConnectionString = _connectionString; taLogRec.Connection.ConnectionString = _connectionString; taLogUt.Connection.ConnectionString = _connectionString; ta_vLogUt.Connection.ConnectionString = _connectionString; ta_vLogRec.Connection.ConnectionString = _connectionString; } /// /// avvio i tari tableAdapters /// private void setupTA() { taAnagFilt = new DS_loggingTableAdapters.T_anagFiltroTableAdapter(); taAnagRec = new DS_loggingTableAdapters.T_anagRecordTableAdapter(); taLogRec = new DS_loggingTableAdapters.T_logRecordsTableAdapter(); taLogUt = new DS_loggingTableAdapters.T_logUtenteTableAdapter(); ta_vLogRec = new DS_loggingTableAdapters.v_logRecordsTableAdapter(); ta_vLogUt = new DS_loggingTableAdapters.v_logUtenteTableAdapter(); } /// /// avvio della classe istanziando db e /// log2note() { setupTA(); setupConnectionString(); } #endregion #region area public /// /// oggetto statico di accesso ai metodi della classe... /// public static log2note l2n = new log2note(); #region area oggetti restituiti /// /// tabella eventi /// /// public DS_logging.v_logRecordsDataTable tabLogEventi() { return ta_vLogRec.GetData(); } /// /// tabella note /// /// public DS_logging.v_logUtenteDataTable tabLogNote() { return ta_vLogUt.GetData(); } /// /// tabella eventi secondo filtro /// /// filtro gestito come condizione "LIKE '%{0}%'" rispetto al filtro salvato con l'evento /// public DS_logging.v_logRecordsDataTable tabLogEventi(string filtro) { return ta_vLogRec.getByFiltro(filtro); } /// /// tabella note secondo filtro /// /// filtro gestito come condizione "LIKE '%{0}%'" rispetto al filtro salvato con l'evento /// public DS_logging.v_logUtenteDataTable tabLogNote(string filtro) { return ta_vLogUt.getByFiltro(filtro); } /// /// tabella eventi secondo filtro e condizione ulteriore WHERE esplicitata /// /// filtro gestito come condizione "LIKE '%{0}%'" rispetto al filtro salvato con l'evento /// ulteriore condizione WHERE per filtrare i dati (testo {0} della condizione "WHERE {0}" /// public DS_logging.v_logRecordsDataTable tabLogEventi(string filtro, string _where) { DS_logging.v_logRecordsDataTable _tab = new DS_logging.v_logRecordsDataTable(); foreach (DS_logging.v_logRecordsRow riga in ta_vLogRec.getByFiltro(filtro).Select(_where)) { _tab.Addv_logRecordsRow(riga); } return _tab; } /// /// tabella note secondo filtro e condizione ulteriore WHERE esplicitata /// /// filtro gestito come condizione "LIKE '%{0}%'" rispetto al filtro salvato con l'evento /// ulteriore condizione WHERE per filtrare i dati (testo {0} della condizione "WHERE {0}" /// public DS_logging.v_logUtenteDataTable tabLogNote(string filtro, string _where) { DS_logging.v_logUtenteDataTable _tab = new DS_logging.v_logUtenteDataTable(); foreach (DS_logging.v_logUtenteRow riga in ta_vLogUt.getByFiltro(filtro).Select(_where)) { _tab.Addv_logUtenteRow(riga); } return _tab; } /// /// tabella note secondo filtro /// /// filtro gestito come condizione "LIKE '%{0}%'" rispetto al filtro salvato con l'evento /// public DS_logging.T_logUtenteDataTable tabLogUt(string filtro) { return taLogUt.getByFiltro(filtro); } #endregion #region area insert valori /// /// inserisce l'evento indicato dai parametri /// /// user che ha generato l'evento /// pagina/form applicaizone in cui l'evento si è generato /// valore originale(se c'è) /// valore nuovo/modificato /// descrizione evento (poi gestita con anagrafica interna) /// filtro logico evento (poi gestita con anagrafica interna) public void insEvento(string _userEv, string _pagina, string _valOrig, string _valNew, string _evento, string _filtro) { taLogRec.sp_insRecFull(_userEv, _pagina, _valOrig, _valNew, _evento, _filtro); } /// /// inserisce la nota utente indicata dai parametri, restituisce idx della nota creata... /// /// user che ha inserito la nota /// testo della nota /// valore ulteriore da associare alla nota (es: label, codice, versione, ...) /// filtro logico evento (poi gestita con anagrafica interna) /// intero dell'idx della nota creata public int insNota(string _userNota, string _nota, string _val, string _filtro) { int? answ = 0; taLogUt.sp_insLogUtFull(_userNota, _nota, _val, _filtro, ref answ); return (int)answ; } #endregion #region area gestione eventi (cestina, delete, associazione a note,...) /// /// associa l'evento e la nota indicati /// /// idx del record da associare /// idx chiave della nota da associare public void associaEvento2Nota(int idxRecord, int _idxNota) { taLogRec.sp_setRec2nota(idxRecord, _idxNota); } /// /// associa l'ultimo evento del filtro indicato alla nota /// /// filtro associato all'ultimo evento... /// idx chiave della nota da associare public void associaLastEvento2Nota(string filtro, int _idxNota) { taLogRec.sp_setLastRec2nota(filtro, _idxNota); } /// /// segna come cestinati tutti gli eventi dell'utente indicato non ancora associati o cestinati /// /// utente generatore dell'evento public void cestinaEventiUser(string _userEv) { taLogRec.sp_cestinaLogRecUt(_userEv); } /// /// segna come cestinati tutti gli eventi dell'utente indicato non ancora associati o cestinati /// /// utente generatore dell'evento public void cestinaEventiFiltro(string _filtro) { taLogRec.sp_cestinaLogRecFiltro(_filtro); } /// /// Elimina gli eventi cestinati generati dall'utente indicato /// /// utente generatore dell'evento public void eliminaEventiDaUser(string _userEv) { taLogRec.sp_deleteLogUser(_userEv); } /// /// Elimina gli eventi cestinati anteriori alla data selezionata /// /// dataOra dell'evento public void associaEvento2Nota(DateTime _dataOra) { taLogRec.sp_deleteLogMaxData(_dataOra); } /// /// effettua la registrazione dell'evento in session /// public void registraEventi(string _userEv, string _pagina) { // controllo: loggin SOLO se la scheda ha logging abilitato nella riga del db... bool logEn = memLayer.ML.BoolSessionObj("logEn"); memLayer.ML.emptySessionVal("logEn"); if (logEn) { // leggo e svuoto info x logging string ev2log = memLayer.ML.StringSessionObj("ev2log"); memLayer.ML.emptySessionVal("ev2log"); string valOrig = memLayer.ML.StringSessionObj("valOrig"); memLayer.ML.emptySessionVal("valOrig"); string valNew = memLayer.ML.StringSessionObj("valNew"); memLayer.ML.emptySessionVal("valNew"); string filtEv = memLayer.ML.StringSessionObj("filtEv"); memLayer.ML.emptySessionVal("filtEv"); // effettuo logging evento l2n.insEvento(_userEv, _pagina, valOrig, valNew, ev2log, filtEv); } } #endregion #endregion } /// /// metodo di comportamento del controllo di logging /// public enum logControlMode { /// /// nasconde pannello log /// hideLog, /// /// memorizza log inserito /// recordLog, /// /// mostra pannello log /// showLog } /// /// metodo di comportamento del controllo di logging /// public enum tipoApprovazione { /// /// indica il primo step del doppio livello di approvazione (completamento) /// completamento, /// /// SOLO con incremento indice di revisione dell'oggetto approvato /// revisione, /// /// SOLO mantenendo indice di revisione corrente /// semplice, /// /// permette SIA con revisione che senza (e anche rev -1) /// tutto } }