/// <summary> /// /// </summary> /// <param name="fascicolo"></param> public void SetFascicoloMigrazione(InfoFascicoloMigrazione fascicolo) { fascicolo.DataMigrazione = DateTime.Now.ToString(); int indexOf = this.FascicoliMigrazione.IndexOf(fascicolo); if (indexOf == -1) { this.FascicoliMigrazione.Insert(0, fascicolo); } else { this.FascicoliMigrazione[indexOf] = fascicolo; } }
/// <summary> /// Import dei sottofascicoli per un fascicolo /// </summary> /// <param name="infoUtente"></param> /// <param name="amministrazione"></param> /// <param name="fascicolo"></param> /// <param name="ruolo"></param> /// <param name="statoMigrazione"></param> /// <param name="folders"></param> private static void ImportaSottofascicoli(InfoUtente infoUtente, InfoAmministrazione amministrazione, DocsPaVO.fascicolazione.Fascicolo fascicolo, DocsPaVO.fascicolazione.Folder[] folders, DocsPaVO.utente.Ruolo ruolo, InfoStatoMigrazione statoMigrazione) { DocsPaDocumentale_DOCUMENTUM.Documentale.ProjectManager projectManager = new DocsPaDocumentale_DOCUMENTUM.Documentale.ProjectManager(infoUtente); // Fascicolo precedentementei importato DocsPaVO.fascicolazione.Folder previousFolder = null; int countRenamed = 0; if (folders == null) { folders = GetFolders(infoUtente, fascicolo); } // 1. Reperimento sottofascicoli contenuti nel fascicolo foreach (DocsPaVO.fascicolazione.Folder folder in folders) { if (projectManager.ContainsSottofascicolo(folder.systemID)) { // Inserimento dei metadati di migrazione per il folder InfoFascicoloMigrazione infoFascicolo = new InfoFascicoloMigrazione(fascicolo, folder); // Sottofascicolo è già esistente, save dei dati infoFascicolo.EsitoMigrazione = projectManager.ModifyFolder(folder); if (!infoFascicolo.EsitoMigrazione) { infoFascicolo.ErroreMigrazione = string.Format("Errore nella modifica del sottofascicolo: '{0}'", folder.descrizione); } statoMigrazione.SetFascicoloMigrazione(infoFascicolo); if (folder.childs.Count > 0) { // Import dei sottofascicoli figli ImportaSottofascicoli(infoUtente, amministrazione, fascicolo, (DocsPaVO.fascicolazione.Folder[])folder.childs.ToArray(typeof(DocsPaVO.fascicolazione.Folder)), ruolo, statoMigrazione); } // Sottofascicolo già esistente Log.GetInstance(amministrazione).Write(string.Format("Sottofascicolo con codice {0} già esistente. Aggiornamento.", folder.descrizione), false); } else { // Il sottofascicolo non ha descrizione, viene impostata la system_id if (string.IsNullOrEmpty(folder.descrizione)) { folder.descrizione = folder.systemID; } string oldDescription = folder.descrizione; // Verifica se, nell'ambito dello stesso fascicolo, esistono sottofascicoli con descrizione duplicata // if (DocsPaDocumentale_DOCUMENTUM.DctmServices.Dfs4DocsPa.containsSottofascicoloByDescription(folder.idFascicolo, folder.descrizione)) // { folder.descrizione = string.Format("{0} ({1})", folder.descrizione, folder.systemID); // Log.GetInstance(amministrazione).Write(string.Format("Migrazione sottofascicolo. Rinominato sottofascicolo duplicato '{0}' in '{1}'", oldDescription, folder.descrizione), false); // } DocsPaVO.fascicolazione.ResultCreazioneFolder resultCreazioneFolder; // 3. Creazione oggetto Folder if (projectManager.CreateFolder(folder, ruolo, out resultCreazioneFolder)) { // Inserimento dei metadati di migrazione per il folder InfoFascicoloMigrazione infoFascicolo = new InfoFascicoloMigrazione(fascicolo, folder); infoFascicolo.EsitoMigrazione = true; statoMigrazione.SetFascicoloMigrazione(infoFascicolo); Log.GetInstance(amministrazione).Write(string.Format("Migrazione sottofascicolo. Descrizione sottofascicolo: '{0}' - Codice: '{1}' - Descrizione: '{2}'", folder.descrizione, fascicolo.codice, fascicolo.descrizione), false); folder.descrizione = oldDescription; previousFolder = folder; if (folder.childs.Count > 0) { // Import dei sottofascicoli figli ImportaSottofascicoli(infoUtente, amministrazione, fascicolo, (DocsPaVO.fascicolazione.Folder[])folder.childs.ToArray(typeof(DocsPaVO.fascicolazione.Folder)), ruolo, statoMigrazione); } } else { // 2a. Errore nell'inserimento del folder throw new ApplicationException( string.Format("Si è verificato un errore nell'inserimento del sottofascicolo '{0}' per il fascicolo '{1}' per l'amministrazione '{2}'", folder.descrizione, fascicolo.codice, amministrazione.Codice)); } } } }
/// <summary> /// Migrazione di un singolo fascicolo /// </summary> /// <param name="fascicolo"></param> /// <param name="infoUtente"></param> /// <param name="amministrazione"></param> /// <param name="statoMigrazione"></param> private static void ImportaFascicolo(DocsPaVO.fascicolazione.Fascicolo fascicolo, InfoUtente infoUtente, InfoAmministrazione amministrazione, InfoStatoMigrazione statoMigrazione) { DocsPaDocumentale_DOCUMENTUM.Documentale.ProjectManager projectManager = new DocsPaDocumentale_DOCUMENTUM.Documentale.ProjectManager(infoUtente); DocsPaDocumentale.Interfaces.IAclEventListener aclEventListener = new DocsPaDocumentale_DOCUMENTUM.Documentale.AclEventListener(infoUtente); // 1. Reperimento del ruolo creatore del fascicolo DocsPaVO.utente.Ruolo ruolo = DocsPaDocumentale_DOCUMENTUM.DocsPaServices.DocsPaQueryHelper.getRuoloCreatore(fascicolo.systemID); // NB: il reperimento dei fascicoli generali serve solo per migrare // gli eventuali sottofascicoli, non per migrare il fascicolo stesso, // che è già stato creato in sede di creazione del nodo di titolario if (fascicolo.tipo == "G") { // 2. Migrazione dei sottofascicoli, in caso di fascicolo generale (già creato in sede di creazione del titolario) ImportaSottofascicoli(infoUtente, amministrazione, fascicolo, null, ruolo, statoMigrazione); } else { InfoFascicoloMigrazione fascicoloMigrazione = new InfoFascicoloMigrazione(fascicolo); // Calcolo dell'hash del fascicolo fascicoloMigrazione.HashFascicolo = GetHashFascicolo(fascicolo, true); // 2. Creazione del corrispondente fascicolo in documentum DocsPaVO.fascicolazione.ResultCreazioneFascicolo result; DocsPaVO.utente.Ruolo[] ruoliSuperiori; if (projectManager.ContainsFascicoloProcedimentale(fascicolo.systemID)) { // Fascicolo è già esistente, save dei dati con refresh delle entries dell'acl associata fascicoloMigrazione.EsitoMigrazione = projectManager.ModifyProject(fascicolo, true); if (!fascicoloMigrazione.EsitoMigrazione) { fascicoloMigrazione.ErroreMigrazione = string.Format("Si è verificato un errore nella modifica del fascicolo '{0}' per l'amministrazione '{1}'", fascicolo.codice, amministrazione.Codice); } else { // Migrazione dei sottofascicoli ImportaSottofascicoli(infoUtente, amministrazione, fascicolo, null, ruolo, statoMigrazione); } Log.GetInstance(amministrazione).Write(string.Format("Migrazione fascicolo. Codice: '{0}' - Descrizione: '{1}'. Aggiornamento.", fascicolo.codice, fascicolo.descrizione), false); } else if (projectManager.CreateProject(null, fascicolo, ruolo, false, out result, out ruoliSuperiori)) { if (result == DocsPaVO.fascicolazione.ResultCreazioneFascicolo.OK) { fascicoloMigrazione.EsitoMigrazione = true; Log.GetInstance(amministrazione).Write(string.Format("Migrazione fascicolo. Codice: '{0}' - Descrizione: '{1}'", fascicolo.codice, fascicolo.descrizione), false); // 3. Notifica evento di creazione fascicolo completato aclEventListener.FascicoloCreatoEventHandler(null, fascicolo, ruolo, ruoliSuperiori); try { // 4. Migrazione dei sottofascicoli ImportaSottofascicoli(infoUtente, amministrazione, fascicolo, null, ruolo, statoMigrazione); } catch (Exception ex) { //4a. Errore nella migrazione dei sottofascicoli, viene rimosso il fascicolo creato ((DocsPaDocumentale_DOCUMENTUM.Documentale.ProjectManager)projectManager).DeleteProject(fascicolo); fascicoloMigrazione.EsitoMigrazione = false; fascicoloMigrazione.ErroreMigrazione = ex.Message; } // 5. Impostazione ownership del fascicolo string utenteCreatore = DocsPaDocumentale_DOCUMENTUM.DocsPaObjectTypes.TypeUtente.NormalizeUserName(DocsPaDocumentale_DOCUMENTUM.DocsPaServices.DocsPaQueryHelper.getUtenteCreatore(fascicolo.systemID).userId); ((DocsPaDocumentale_DOCUMENTUM.Documentale.ProjectManager)projectManager).SetOwnershipFascicolo(fascicolo.systemID, utenteCreatore); } else { // 3a. Errore nella creazione del fascicolo fascicoloMigrazione.EsitoMigrazione = false; fascicoloMigrazione.ErroreMigrazione = string.Format("Si è verificato un errore nella creazione del fascicolo '{0}' per l'amministrazione '{1}'", fascicolo.codice, amministrazione.Codice); } } fascicoloMigrazione.DataMigrazione = DateTime.Now.ToString(); statoMigrazione.SetFascicoloMigrazione(fascicoloMigrazione); } }