/// <summary> /// Implementazione della logica del task di migrazione dati /// per tutti i fascicoli di un'amministrazione /// </summary> /// <param name="infoUtente"></param> /// <param name="amministrazione"></param> /// <param name="opzioniMigrazione"></param> private static void ImportaFascicoli(InfoUtente infoUtente, InfoAmministrazione amministrazione, OpzioniMigrazioneFascicolo opzioniMigrazione) { InfoStatoMigrazione statoMigrazione = StatoMigrazione.Get(amministrazione); try { using (DocsPaDB.DBProvider dbProvider = new DocsPaDB.DBProvider()) { // Viene assegnato all'infoutente l'id dell'amministrazione fornita come parametro // per fare in modo che l'utente che esegue la migrazione si impersonifichi // come utente dell'amministrazione string idAmm = infoUtente.idAmministrazione; infoUtente.idAmministrazione = amministrazione.IDAmm; using (DataSet ds = new DataSet()) { // 1. Reperimento fascicoli per il titolario if (dbProvider.ExecuteQuery(ds, GetQueryFascicoli(infoUtente, opzioniMigrazione.Filtro))) { Log.GetInstance(amministrazione).Write("Reperimento fascicoli in amministrazione.", false); int index = 1; foreach (DataRow row in ds.Tables[0].Rows) { if (_interrompiMigrazione) { _interrompiMigrazione = false; Log.GetInstance(amministrazione).Write(string.Format("Migrazione fascicoli interrotta al fascicolo {0} di {1}", index.ToString(), ds.Tables[0].Rows.Count), false); break; } // 2. Migrazione dei singoli fascicoli ImportaFascicolo(row, infoUtente, amministrazione, statoMigrazione); index++; } } else { // 1a. Errore nel reperimento dei fascicoli throw new ApplicationException( string.Format("Si è verificato un errore nel reperimento dei fascicolo per l'amministrazione '{0}'", amministrazione.Codice)); } } infoUtente.idAmministrazione = idAmm; } } catch (Exception ex) { throw ex; } finally { // Save dello stato migrazione StatoMigrazione.Save(statoMigrazione, amministrazione); } }
/// <summary> /// Aggiornamento di un'amministrazione /// </summary> /// <param name="infoUtente"></param> /// <param name="amministrazione"></param> /// <param name="tipiOggetti"></param> /// <returns></returns> internal static void AggiornaAmministrazione(InfoUtenteAmministratore infoUtente, DocsPaVO.amministrazione.InfoAmministrazione amministrazione, TipiOggettiAmministrazione tipiOggetti) { InfoStatoMigrazione statoMigrazione = StatoMigrazione.Get(amministrazione); AmministrazioneManager amministraManager = new AmministrazioneManager(infoUtente); // 1. Verifica amministrazione esistente in DCTM if (amministraManager.ContainsAmministrazione(amministrazione.Codice)) { List <string> ruoliImportati = null; try { // 2. Creazione delle utenze dell'amministrazione if (tipiOggetti.Organigramma) { Organigramma.ImportaUtenti(infoUtente, amministrazione); // 3. Creazione dei ruoli dell'amministrazione Organigramma.ImportaRuoli(infoUtente, amministrazione, out ruoliImportati); // 4. Associazione degli utenti ai ruoli dell'amministrazione Organigramma.ImportaAssociazioniUtentiRuoli(infoUtente, amministrazione); } if (tipiOggetti.Titolario) { // 5. Creazione dei titolari dell'amministrazione Titolario.ImportaTitolari(infoUtente, amministrazione); } // Imposta lo stato dell'amministrazione come migrata correttamente statoMigrazione.DatiAmministrazioneMigrati = true; // Salva stato della migrazione StatoMigrazione.Save(statoMigrazione, amministrazione); } catch (Exception ex) { // Rollback: in caso di errore, viene rimossa l'amministrazione appena inserita // per mantenere i dati consistenti Log.GetInstance(amministrazione).Write(string.Format("Si è verificato un errore nella procedura di migrazione l'amministrazione '{0}'.", amministrazione.Codice), false); throw ex; } } else { // 1a. Errore nella migrazione dell'amministrazione (migrazione interrotta) throw new ApplicationException(string.Format("Si è verificato un errore nell'aggiornamento dell'amministrazione. Amministrazione con codice {0} non esistente", amministrazione.Codice)); } }
/// <summary> /// /// </summary> /// <param name="infoUtente"></param> /// <param name="amministrazione"></param> /// <param name="fascicoli"></param> private static void ImportaFascicoliSelezionati(InfoUtente infoUtente, DocsPaVO.amministrazione.InfoAmministrazione amministrazione, Migrazione.InfoFascicoloMigrazione[] fascicoli) { InfoStatoMigrazione statoMigrazione = StatoMigrazione.Get(amministrazione); try { // Viene assegnato all'infoutente l'id dell'amministrazione fornita come parametro // per fare in modo che l'utente che esegue la migrazione si impersonifichi // come utente dell'amministrazione string idAmm = infoUtente.idAmministrazione; infoUtente.idAmministrazione = amministrazione.IDAmm; int index = 1; foreach (Migrazione.InfoFascicoloMigrazione infoFascicolo in fascicoli) { if (_interrompiMigrazione) { _interrompiMigrazione = false; Log.GetInstance(amministrazione).Write(string.Format("Migrazione fascicoli interrotta al fascicolo {0} di {1}", index.ToString(), fascicoli.Length), false); break; } // 1. Reperimento oggetto fascicolo infoUtente.idGruppo = DocsPaDocumentale_DOCUMENTUM.DocsPaServices.DocsPaQueryHelper.getRuoloCreatore(infoFascicolo.Id).idGruppo; DocsPaVO.fascicolazione.Fascicolo fascicolo = GetFascicolo(infoFascicolo.Id, infoUtente); // 2. Migrazione dei singoli fascicoli ImportaFascicolo(fascicolo, infoUtente, amministrazione, statoMigrazione); index++; } infoUtente.idAmministrazione = idAmm; } catch (Exception ex) { throw ex; } finally { // Save dello stato migrazione StatoMigrazione.Save(statoMigrazione, amministrazione); } }
/// <summary> /// Implementazione della logica del task di migrazione dati /// per una singola amministrazione DocsPa /// </summary> /// <param name="infoUtente"></param> /// <param name="amministrazione"></param> private static void ImportaAmministrazione(InfoUtenteAmministratore infoUtente, InfoAmministrazione amministrazione) { InfoStatoMigrazione statoMigrazione = StatoMigrazione.Get(amministrazione); AmministrazioneManager amministraManager = new AmministrazioneManager(infoUtente); // 1. Creazione dell'amministrazione in DCTM EsitoOperazione result = amministraManager.Insert(amministrazione); if (result.Codice == RESULT_CODE_OK) { Log.GetInstance(amministrazione).Write(string.Format("Creata amministrazione con codice '{0}'", amministrazione.Codice), false); List <string> ruoliImportati = null; try { // 2. Creazione delle utenze dell'amministrazione Organigramma.ImportaUtenti(infoUtente, amministrazione); // 3. Creazione dei ruoli dell'amministrazione Organigramma.ImportaRuoli(infoUtente, amministrazione, out ruoliImportati); // 4. Associazione degli utenti ai ruoli dell'amministrazione Organigramma.ImportaAssociazioniUtentiRuoli(infoUtente, amministrazione); // 5. Creazione dei titolari dell'amministrazione Titolario.ImportaTitolari(infoUtente, amministrazione); // Imposta lo stato dell'amministrazione come migrata correttamente statoMigrazione.DatiAmministrazioneMigrati = true; // Salva stato della migrazione StatoMigrazione.Save(statoMigrazione, amministrazione); } catch (Exception ex) { // Rollback: in caso di errore, viene rimossa l'amministrazione appena inserita // per mantenere i dati consistenti EsitoOperazione rollback = null; /* Deletami sto cazzo figlio di Troia ... * if (ruoliImportati != null) * rollback = amministraManager.Delete(amministrazione, ruoliImportati.ToArray()); * else * rollback = amministraManager.Delete(amministrazione); */ // if (rollback.Codice != RESULT_CODE_OK) // Log.GetInstance(amministrazione).Write(string.Format("Errore nel Rollback: {0}", rollback.Descrizione), false); //else Log.GetInstance(amministrazione).Write(string.Format("Si è verificato un errore nella procedura di migrazione l'amministrazione '{0}'. Le operazioni finora effettuate sono state annullate.", amministrazione.Codice), false); throw ex; } } else { // 1a. Errore nella migrazione dell'amministrazione (migrazione interrotta) throw new ApplicationException(string.Format("Si è verificato un errore nell'inserimento dell'amministrazione. Codice: {0} - Descrizione: {1}", result.Codice, result.Descrizione)); } }