using SteamWare; namespace BusinessLogic { /// /// macchina di gestione degli stati /// public class stateMachine { #if false protected DS_applicazioneTableAdapters.EventiTableAdapter taEv; private DS_applicazioneTableAdapters.TraEv2StatiTableAdapter taEv2St; private DS_applicazioneTableAdapters.IstObjTableAdapter taIstObj; #endif protected stateMachine() { avvioTA(); setupConnectionStringBase(); } /// /// avvia table adapters /// private void avvioTA() { #if false taEv = new DS_applicazioneTableAdapters.EventiTableAdapter(); taEv2St = new DS_applicazioneTableAdapters.TraEv2StatiTableAdapter(); taIstObj = new DS_applicazioneTableAdapters.IstObjTableAdapter(); #endif } /// /// effettua setup dei connection strings da web.config delal singola applicazione /// protected virtual void setupConnectionStringBase() { #if false string connString = memLayer.ML.confReadString("XPSConnectionString"); // connections strings del db taEv.Connection.ConnectionString = connString; taEv2St.Connection.ConnectionString = connString; taIstObj.Connection.ConnectionString = connString; #endif } public static stateMachine st = new stateMachine(); /// /// restituisce il tipo di comando associato... /// /// /// public tipoAzione azioneComando(inputComando comando) { tipoAzione _azione = tipoAzione.noAct; string toDo = ""; #if false try { toDo = taEv.getByCodEvento(comando.currCmdIn)[0].Action; } catch { } switch (toDo) { case "ok": _azione = tipoAzione.conferma; break; case "ko": _azione = tipoAzione.annulla; break; case "act": _azione = tipoAzione.esegui; break; default: _azione = tipoAzione.noAct; break; } #endif return _azione; } /// /// verifica se sia possibile, dagli input segnalati, eseguire un comando secondo la tab transizione stati e restituisce adeguato output su esecuzione/errore e eventuali messaggi /// /// mappa di riferimento /// oggetto di riferimento /// stato corrente /// evento /// oggetto di risposta x esito ok/ko public tipoEsito doAction(string codMappa, string idxObj, string codStato, string codEvento) { tipoEsito answ = tipoEsito.undef; string codTipoObj = ""; // di default pongo a vuoto... #if false try { codTipoObj = taIstObj.getByIdxObj(idxObj)[0].CodObj; } catch { } // controllo su tab se ci sia riga con transizione DS_applicazione.TraEv2StatiDataTable tabEv2St = taEv2St.getByKey(codMappa, codTipoObj, codStato, codEvento); if (tabEv2St.Rows.Count > 0) { switch (codTipoObj) { case "U": // aggiorno singolo obj XPS.obj.taObj.updateStato(tabEv2St[0].NextCodStato, user_std.UtSn.utente, DateTime.Now, idxObj); // chiamo update stato obj ancestors: XPS.obj.taSP.sp_updateAncestorState(string.Format("{0}%", idxObj.Substring(0, 8))); break; case "D": // sto scannando il DDT aggiorno tutto il tree... string codObjCommon = idxObj.Replace("D", "%"); XPS.obj.taObj.updateStatoTree(tabEv2St[0].NextCodStato, user_std.UtSn.utente, DateTime.Now, codObjCommon); break; } // salvo esito answ = tipoEsito.ok; } else { // non c'è, segnalo errore... answ = tipoEsito.error; } #endif return answ; } } public enum tipoAzione { annulla, conferma, esegui, noAct } public enum tipoEsito { error, ok, undef } }