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
}
}