/// <summary> /// Modifica dei dati di un folder in docspa e OCS /// </summary> /// <param name="folder"></param> /// <returns></returns> public bool ModifyFolder(DocsPaVO.fascicolazione.Folder folder) { if (this.ProjectManagerETDOCS.ModifyFolder(folder)) { return(this.ProjectManagerOCS.ModifyFolder(folder)); } else { return(false); } }
/// <summary> /// Rimozione di un fascicolo da docspa e documentum /// </summary> /// <param name="idProject"></param> /// <returns></returns> public bool DeleteFolder(DocsPaVO.fascicolazione.Folder folder) { if (this.ProjectManagerETDOCS.DeleteFolder(folder)) { return(this.ProjectManagerDocumentum.DeleteFolder(folder)); } else { return(false); } }
/// <summary> /// /// </summary> /// <param name="folder"></param> /// <param name="ruolo"></param> /// <param name="result"></param> /// <param name="ruoliSuperiori"></param> /// <returns></returns> public bool CreateFolder(DocsPaVO.fascicolazione.Folder folder, DocsPaVO.utente.Ruolo ruolo, out DocsPaVO.fascicolazione.ResultCreazioneFolder result, out DocsPaVO.utente.Ruolo[] ruoliSuperiori) { bool retValue = false; result = ResultCreazioneFolder.GENERIC_ERROR; ruoliSuperiori = null; try { string idPeopleDelegato = string.Empty; if (this.UserInfo.delegato != null && this.UserInfo.delegato.idPeople != null) { idPeopleDelegato = this.UserInfo.delegato.idPeople; } folder.systemID = this.CreateProject(folder.descrizione, idPeopleDelegato); if (folder.systemID == null) { throw new Exception(); } DocsPaDB.Query_DocsPAWS.Fascicoli fascicoli = new DocsPaDB.Query_DocsPAWS.Fascicoli(); fascicoli.NewFolder(this.UserInfo.idAmministrazione, folder); //Set project trustees bool isFolder = (folder.idParent != folder.idFascicolo); if (ruolo != null) { // sottofascicoli: si da la visibilità ad essi a tutti coloro che vedono il fascicolo a cui essi appartengono // caso di rootFolder, segue la visibilità del fascicolo a cui fa riferimento (calcolata in fase di creazione del fascicolo) System.Collections.ArrayList listRuoliSuperiori; fascicoli.SetProjectTrustees(this.UserInfo.idPeople, folder.systemID, ruolo, folder.idFascicolo, isFolder, out listRuoliSuperiori, this.UserInfo.delegato); ruoliSuperiori = (Ruolo[])listRuoliSuperiori.ToArray(typeof(Ruolo)); } string valorechiave = DocsPaUtils.Configuration.InitConfigurationKeys.GetValue("0", "BE_PROJECT_LEVEL"); if (!string.IsNullOrEmpty(valorechiave) && valorechiave.Equals("1") && isFolder) { fascicoli.UpdateFolderLevels(UserInfo.idPeople, UserInfo.idGruppo, UserInfo.idAmministrazione, folder); } retValue = true; result = ResultCreazioneFolder.OK; } catch (Exception ex) { logger.Error(ex); retValue = false; result = ResultCreazioneFolder.GENERIC_ERROR; } return(retValue); }
/// <summary> /// Modifica dei dati di un folder /// </summary> /// <param name="folder"></param> /// <returns></returns> public virtual bool ModifyFolder(DocsPaVO.fascicolazione.Folder folder) { bool retValue = false; using (DocsPaDB.Query_DocsPAWS.Fascicoli fascicoli = new DocsPaDB.Query_DocsPAWS.Fascicoli()) { DocsPaVO.fascicolazione.Folder savedFolder = fascicoli.ModifyFolder(folder); retValue = (savedFolder != null); if (retValue) { folder = savedFolder; } } return(retValue); }
/// <summary> /// Rimozione di un documento dal fascicolo (in generale, da tutti i folder presenti nel fascicolo) /// </summary> /// <param name="idProfile"></param> /// <param name="folder"></param> /// <returns></returns> public bool RemoveDocumentFromProject(string idProfile, DocsPaVO.fascicolazione.Folder folder) { //Performance.PerformanceLogWriter.CreatePerformanceLogWriter(@"c:\temp\ProjectManager.txt"); //Performance.PerformanceLogWriter log = new Performance.PerformanceLogWriter(); //log.StartLogEntry("RemoveDocumentFromProject_ETDOCS"); bool retValue = this.ProjectManagerETDOCS.RemoveDocumentFromProject(idProfile, folder); //log.EndLogEntry(); //Performance.PerformanceLogWriter.FlushPerformanceLogWriter(); return(retValue); }
/// <summary> /// Verifica se il nome del folder è già presente in docspa /// </summary> /// <param name="folder"></param> /// <returns></returns> protected bool ExistFolderName(DocsPaVO.fascicolazione.Folder folder) { bool retValue = false; using (DocsPaDB.DBProvider dbProvider = new DocsPaDB.DBProvider()) { string commandText = string.Format("SELECT count(description) FROM project WHERE id_parent = {0} AND cha_tipo_proj = 'C' AND description = '{1}'", folder.idParent, folder.descrizione); logger.Debug(commandText); string field; if (dbProvider.ExecuteScalar(out field, commandText)) { retValue = (field != "0"); } } return(retValue); }
/// <summary> /// Creazione nuovo sottofascicolo /// </summary> /// <param name="folder"></param> /// <param name="ruolo"></param> /// <param name="result"></param> /// <param name="ruoliSuperiori"> /// Ruoli superiori cui è impostata la visibilità del sottofascicolo /// </param> /// <returns></returns> public bool CreateFolder(DocsPaVO.fascicolazione.Folder folder, DocsPaVO.utente.Ruolo ruolo, out DocsPaVO.fascicolazione.ResultCreazioneFolder result, out DocsPaVO.utente.Ruolo[] ruoliSuperiori) { bool retValue = false; ruoliSuperiori = null; result = ResultCreazioneFolder.GENERIC_ERROR; // Verifica l'univocità del folder: in documentum // non possono essere inseriti sottofascicoli // dello stesso livello aventi lo stesso nome if (!this.ExistFolderName(folder)) { retValue = this.ProjectManagerETDOCS.CreateFolder(folder, ruolo, out result, out ruoliSuperiori); } else { result = ResultCreazioneFolder.FOLDER_EXIST; } return(retValue); }
/// <summary> /// Rimozione di un documento dal fascicolo (in generale, da tutti i folder presenti nel fascicolo) /// </summary> /// <param name="idProfile"></param> /// <param name="folder"></param> /// <returns></returns> public bool RemoveDocumentFromProject(string idProfile, DocsPaVO.fascicolazione.Folder folder) { bool retValue = this.ProjectManagerETDOCS.RemoveDocumentFromProject(idProfile, folder); return(retValue); }
/// <summary> /// Creazione di un nuovo folder in un fascicolo in docspa e documentum /// </summary> /// <param name="folder"></param> /// <param name="ruolo"></param> /// <returns></returns> public bool CreateFolder(DocsPaVO.fascicolazione.Folder folder, DocsPaVO.utente.Ruolo ruolo, out DocsPaVO.fascicolazione.ResultCreazioneFolder result) { Ruolo[] ruoliSuperiori; return(this.CreateFolder(folder, ruolo, out result, out ruoliSuperiori)); }
/// <summary> /// /// </summary> /// <param name="classificazione"></param> /// <param name="fascicolo"></param> /// <param name="infoUtente"></param> /// <param name="ruolo"></param> /// <param name="enableUffRef"></param> /// <param name="folder"></param> /// <param name="codiceFasc"></param> /// <param name="dbProvider"></param> /// <returns></returns> private bool CreazioneFascicoloConTransazione(DocsPaVO.fascicolazione.Classificazione classificazione, DocsPaVO.fascicolazione.Fascicolo fascicolo, DocsPaVO.utente.InfoUtente infoUtente, DocsPaVO.utente.Ruolo ruolo, bool enableUffRef, DocsPaVO.fascicolazione.Folder folder, string codiceFasc, DocsPaDB.DBProvider dbProvider, out Ruolo[] ruoliSuperiori) { logger.Info("BEGIN"); bool result = true; ruoliSuperiori = null; DocsPaDB.Query_DocsPAWS.AmministrazioneXml objAX = new DocsPaDB.Query_DocsPAWS.AmministrazioneXml(); DocsPaDB.Query_DocsPAWS.Fascicoli fascicoli = new DocsPaDB.Query_DocsPAWS.Fascicoli(); string msgError = "errore nel metodo: creazioneFascicoloConTransazione - errore durante la creazione del fascicolo"; try { // 3 - Si calcola il formato del codice del fascicolo fascicolo.codice = codiceFasc; string chiaveFascicolo = this.CalcolaChiaveFascicolo(fascicolo.idClassificazione, DateTime.Today.Year.ToString(), fascicolo.codUltimo, fascicolo.idRegistro); if (string.IsNullOrEmpty(chiaveFascicolo)) { logger.Debug("errore nella calcolo del VAR_CHIAVE_FASCICOLO - DATI MANCANTI "); throw new Exception(); } // 5 - Si aggiorna il record relativo al fascicolo con i nuovi dati fascicolo = this.NewFascicolo(infoUtente.idAmministrazione, classificazione.registro, fascicolo, enableUffRef, chiaveFascicolo); if (fascicolo != null) { //6 - Si crea la folder associata al fascicolo folder.descrizione = fascicolo.codice; folder.idFascicolo = fascicolo.systemID; folder.idParent = fascicolo.systemID; string idPeopleDelegato = string.Empty; if (infoUtente.delegato != null && infoUtente.delegato.idPeople != null) { idPeopleDelegato = infoUtente.delegato.idPeople; } folder.systemID = this.CreateProject(folder.descrizione, idPeopleDelegato); if (!string.IsNullOrEmpty(folder.systemID)) { //7 - La creazione è andata a buon fine, quindi si aggiorna il record relativo alla folder con i dati del fascicolo if (fascicoli.NewFolder(infoUtente.idAmministrazione, folder, dbProvider)) { //8 - Imposto ID_TITOLARIO, cioe' il titolario di appartenenza sia per il fascicolo che per il folder DocsPaDB.Query_DocsPAWS.Amministrazione amm = new DocsPaDB.Query_DocsPAWS.Amministrazione(); DocsPaVO.amministrazione.OrgNodoTitolario nodoTit = amm.getNodoTitolario(fascicolo.idClassificazione); if (!string.IsNullOrEmpty(nodoTit.ID_Titolario)) { if (!fascicoli.updateIdTitolario(nodoTit.ID_Titolario, fascicolo.systemID, folder.systemID, dbProvider)) { msgError = "errore nel metodo: creazioneFascicoloConTransazione - errore durante l'aggiornamento dell'ID_TITOLARIO per il Fascicolo e il Folder"; throw new Exception(); } } } else { msgError = "errore nel metodo: creazioneFascicoloConTransazione - errore durante l'aggiornamento della Root Folder"; throw new Exception(); } //creazione dei sottofascicoli relativi alla tipologia con gara e senza gara fascicolo.folderSelezionato = folder; CreateFolderHermes(fascicolo, ruolo); } else { msgError = "errore nel metodo: creazioneFascicoloConTransazione - errore durante la creazione della Root Folder"; throw new Exception(); } } else { //Se il fascicolo è NULL viene lanciata una eccezione e viene eseguita la Rollback dell'operazione msgError = "errore nel metodo: creazioneFascicoloConTransazione - errore durante l'Update sulla Project"; throw new Exception(); } bool isPrivato = true; if (fascicolo.privato.Equals("0")) { isPrivato = false; } if (ruolo != null) { System.Collections.ArrayList listRuoliSuperiori; // 9 - Si estende la visibilità sul fascicolo creato if (fascicoli.SetProjectTrustees(infoUtente.idPeople, fascicolo.systemID, ruolo, fascicolo.idClassificazione, fascicolo.idRegistro, isPrivato, out listRuoliSuperiori, infoUtente.delegato)) { // 10 - Si estende la visibilità sulla folder creata bool isSottofascicolo = (folder.idParent != folder.idFascicolo); System.Collections.ArrayList tmp; // Variabile temporanea: i ruoli superiori sono già stati reperiti //10.1 - sottofascicoli: si da la visibilità ad essi a tutti coloro che vedono il fascicolo a cui essi appartengono //10.2 caso di rootFolder, segue la visibilità del fascicolo a cui fa riferimento (calcolata in fase di creazione del fascicolo) if (!fascicoli.SetProjectTrustees(infoUtente.idPeople, folder.systemID, ruolo, folder.idFascicolo, isSottofascicolo, fascicolo.idRegistro, isPrivato, out tmp, infoUtente.delegato)) { msgError = "errore durante estensione della visibilità della Folder"; throw new Exception(); } } else { msgError = "errore durante estenzione della visibilità sul Fascicolo"; throw new Exception(); } ruoliSuperiori = (Ruolo[])listRuoliSuperiori.ToArray(typeof(Ruolo)); } } catch { logger.Debug("*** ESEGUITA ROLLBACK DELLA TRANSAZIONE CREAZIONE FASCICOLO: " + msgError + "***"); result = false; } logger.Info("END"); return(result); }
/// <summary> /// Rimozione di un documento dal fascicolo (in generale, da tutti i folder presenti nel fascicolo) /// </summary> /// <param name="idProfile"></param> /// <param name="folder"></param> /// <returns></returns> public virtual bool RemoveDocumentFromProject(string idProfile, DocsPaVO.fascicolazione.Folder folder) { DocsPaDB.Query_DocsPAWS.Fascicoli fascicoli = new DocsPaDB.Query_DocsPAWS.Fascicoli(); return(fascicoli.DeleteDoc(this.UserInfo, folder, idProfile, string.Empty)); }
/// <summary> /// /// </summary> /// <param name="classifica"></param> /// <param name="fascicolo"></param> /// <param name="ruolo"></param> /// <param name="enableUfficioReferente"></param> /// <param name="result"></param> /// <param name="ruoliSuperiori"></param> /// <returns></returns> public bool CreateProject(Classificazione classifica, Fascicolo fascicolo, Ruolo ruolo, bool enableUfficioReferente, out ResultCreazioneFascicolo result, out DocsPaVO.utente.Ruolo[] ruoliSuperiori) { logger.Info("BEGIN"); bool retValue = false; ruoliSuperiori = null; using (DocsPaDB.DBProvider dbProvider = new DocsPaDB.DBProvider()) { using (System.Data.IDataReader reader = dbProvider.ExecuteReader("select a.CHA_STATO from project a where a.SYSTEM_ID in (select b.ID_TITOLARIO from project b where b.SYSTEM_ID =" + classifica.systemID + ")")) { if (reader.FieldCount > 0) { while (reader.Read()) { string valorechiave = DocsPaUtils.Configuration.InitConfigurationKeys.GetValue("0", "BE_FASC_TUTTI_TIT"); if (string.IsNullOrEmpty(valorechiave) || !valorechiave.Equals("1")) { if (reader.GetString(reader.GetOrdinal("CHA_STATO")).ToUpper().Equals("C")) { logger.Debug("sottofascilo chiuso"); throw new Exception("sottofascilo chiuso"); } } } } } logger.Debug(" *** INIZIO TRANSAZIONE CREAZIONE FASCICOLO ***"); dbProvider.BeginTransaction(); fascicolo.idClassificazione = classifica.systemID; result = DocsPaVO.fascicolazione.ResultCreazioneFascicolo.OK; DocsPaVO.fascicolazione.Folder folder = new DocsPaVO.fascicolazione.Folder(); DocsPaDB.Query_DocsPAWS.AmministrazioneXml objAX = new DocsPaDB.Query_DocsPAWS.AmministrazioneXml(); DocsPaDB.Query_DocsPAWS.Fascicoli fascicoli = new DocsPaDB.Query_DocsPAWS.Fascicoli(); try { fascicolo.stato = "A"; fascicolo.tipo = "P"; // 6 - Si aggiorna il codUltimo relativo al fascicolo (solo per ora perchè andrà tolta questa gestione) if (!fascicoli.aggiornaDpaRegFasc(ref fascicolo.codUltimo, fascicolo.idClassificazione, fascicolo.idRegistro, dbProvider)) { throw new Exception("Errore nell'aggiornamento della tabella dpa_reg_fasc"); } //prova per verifica codice univoco string format = DocsPaDB.Utils.Personalization.getInstance(this.UserInfo.idAmministrazione).FormatoFascicolatura; if (format == null || format.Equals("")) { //in alcuni casi, l'oggetto Personalization non è not null, ma il formato segnatura è null!! //per evitare il blocco della protocollazione a meno di un iisreset inserisco questo codice. logger.Debug("Ricalcolo Personalization"); DocsPaDB.Utils.Personalization.Reset(); format = DocsPaDB.Utils.Personalization.getInstance(this.UserInfo.idAmministrazione).FormatoFascicolatura; if (format == null || format.Equals("")) { throw new FormatoFascicolaturaException(); } } //string codiceFasc = this.CalcolaCodiceFascicolo(this.UserInfo.idAmministrazione, classifica.codice, fascicolo.apertura, classifica.systemID, ref fascicolo.codUltimo, true, dbProvider); string codiceFasc = this.CalcolaCodiceFascicolo(this.UserInfo.idAmministrazione, classifica, fascicolo.apertura, ref fascicolo.codUltimo, true, dbProvider); string idReg = fascicolo.idRegistro; if (idReg != null && idReg == "") { idReg = classifica.registro.systemId; } // 4 - Si verifica che il codice sia univoco if (!objAX.CheckUniqueCode("PROJECT", "VAR_CODICE", codiceFasc, "AND ((ID_REGISTRO IS NULL OR ID_REGISTRO=" + idReg + " ) ) AND ID_AMM =" + this.UserInfo.idAmministrazione + " AND ID_PARENT = " + classifica.systemID + "", dbProvider)) { // 4 - Si verifica se il codice è già presente vienelanciata una eccezione //codiceFascNew = calcolaCodiceFascicolo(infoUtente.idAmministrazione,classificazione.codice, fascicolo.apertura, classificazione.systemID, ref fascicolo.codUltimo, false, dbProvider); throw new FascicoloPresenteException(); } // Creazione fascicolo string idPeopleDelegato = string.Empty; if (fascicolo.creatoreFascicolo != null && fascicolo.creatoreFascicolo.idPeopleDelegato != null) { idPeopleDelegato = fascicolo.creatoreFascicolo.idPeopleDelegato; } string systemIdFasc = this.CreateProject(fascicolo.descrizione, idPeopleDelegato); if (systemIdFasc != null && systemIdFasc != "") { fascicolo.systemID = systemIdFasc; /* 2 - VIENE INVOCATO IL METODO PER LA CREAZIONE DEL FASCICOLO * e della ROOT FOLDER */ bool resultNewFasc = this.CreazioneFascicoloConTransazione(classifica, fascicolo, this.UserInfo, ruolo, enableUfficioReferente, folder, codiceFasc, dbProvider, out ruoliSuperiori); //3 - SE LA CREAZIONE DEL FASCICOLO è ANDATA A BUON FINE SI EFFETTUA IL COMMIT //DELLA TRANSAZIONE if (resultNewFasc) { result = DocsPaVO.fascicolazione.ResultCreazioneFascicolo.OK; } else { throw new Exception("Errore nella gestione dei fascicoli (newFascicolo)"); } } else { throw new Exception("Errore nella gestione dei fascicoli (newFascicolo)"); } //Profilazione dinamica fascicoli if (fascicolo.template != null) { DocsPaDB.Query_DocsPAWS.ModelFasc modelFasc = new DocsPaDB.Query_DocsPAWS.ModelFasc(); modelFasc.salvaInserimentoUtenteProfDimFasc(fascicolo.template, fascicolo.systemID); } //Fine profilazione dinamica fascicoli logger.Debug("Fascicolo creato: idFascicolo = " + fascicolo.systemID); logger.Debug("Folder creata: = " + folder.systemID); if (result == ResultCreazioneFascicolo.OK) { retValue = true; } } catch (FascicoloPresenteException e) { retValue = false; fascicolo = null; result = DocsPaVO.fascicolazione.ResultCreazioneFascicolo.FASCICOLO_GIA_PRESENTE; logger.Debug(e.Message); } catch (FormatoFascicolaturaException e) { retValue = false; fascicolo = null; result = DocsPaVO.fascicolazione.ResultCreazioneFascicolo.FORMATO_FASCICOLATURA_NON_PRESENTE; logger.Debug(e.Message); } catch (Exception e) { //SE LA CREAZIONE DEL FASCICOLO GENERA ERRORE, //SI RILASCIANO RISORSE ALLOCATE E SI EFFETTUA IL ROLLBACK DELLA TRANSAZIONE retValue = false; fascicolo = null; result = DocsPaVO.fascicolazione.ResultCreazioneFascicolo.GENERIC_ERROR; logger.Debug(e.Message); } if (retValue) { dbProvider.CommitTransaction(); } else { dbProvider.RollbackTransaction(); } } logger.Info("END"); return(retValue); }
/// <summary> /// /// </summary> /// <param name="classificazione"></param> /// <param name="fascicolo"></param> /// <param name="infoUtente"></param> /// <param name="ruolo"></param> /// <param name="enableUffRef"></param> /// <param name="folder"></param> /// <param name="codiceFasc"></param> /// <param name="dbProvider"></param> /// <returns></returns> private bool CreazioneFascicoloConTransazione(DocsPaVO.fascicolazione.Classificazione classificazione, DocsPaVO.fascicolazione.Fascicolo fascicolo, DocsPaVO.utente.InfoUtente infoUtente, DocsPaVO.utente.Ruolo ruolo, bool enableUffRef, DocsPaVO.fascicolazione.Folder folder, string codiceFasc, DocsPaDB.DBProvider dbProvider, out Ruolo[] ruoliSuperiori) { logger.Info("BEGIN"); bool result = true; ruoliSuperiori = null; DocsPaDB.Query_DocsPAWS.AmministrazioneXml objAX = new DocsPaDB.Query_DocsPAWS.AmministrazioneXml(); DocsPaDB.Query_DocsPAWS.Fascicoli fascicoli = new DocsPaDB.Query_DocsPAWS.Fascicoli(); string systemIdRoot; try { // 3 - Si calcola il formato del codice del fascicolo fascicolo.codice = codiceFasc; string chiaveFascicolo = CalcolaChiaveFascicolo(fascicolo.idClassificazione, DateTime.Today.Year.ToString(), fascicolo.codUltimo, fascicolo.idRegistro); if (string.IsNullOrEmpty(chiaveFascicolo)) { throw new Exception("errore nel calcolo del VAR_CHIAVE_FASCICOLO - DATI MANCANTI"); } // 5 - Si aggiorna il record relativo al fascicolo con i nuovi dati fascicolo = NewFascicolo(infoUtente.idAmministrazione, classificazione.registro, fascicolo, enableUffRef, chiaveFascicolo); if (fascicoli == null) { throw new Exception("errore durante l'Update sulla Project"); } // 6 - Si crea la folder associata al fascicolo folder.descrizione = fascicolo.codice; folder.idFascicolo = fascicolo.systemID; folder.idParent = fascicolo.systemID; string idPeopleDelegato = string.Empty; if (infoUtente.delegato != null && infoUtente.delegato.idPeople != null) { idPeopleDelegato = infoUtente.delegato.idPeople; } systemIdRoot = CreateProject(folder.descrizione, idPeopleDelegato); if (string.IsNullOrEmpty(systemIdRoot)) { throw new Exception("errore durante la creazione della Root Folder"); } // 7 - La creazione è andata a buon fine, quindi si aggiorna il record relativo alla folder con i dati del fascicolo folder.systemID = systemIdRoot; if (!fascicoli.NewFolder(infoUtente.idAmministrazione, folder, dbProvider)) { throw new Exception("errore durante l'aggiornamento della Root Folder"); } // 8 - Imposto ID_TITOLARIO, cioe' il titolario di appartenenza sia per il fascicolo che per il folder DocsPaDB.Query_DocsPAWS.Amministrazione amm = new DocsPaDB.Query_DocsPAWS.Amministrazione(); DocsPaVO.amministrazione.OrgNodoTitolario nodoTit = amm.getNodoTitolario(fascicolo.idClassificazione); if (nodoTit.ID_Titolario != null && nodoTit.ID_Titolario != "") { if (!fascicoli.updateIdTitolario(nodoTit.ID_Titolario, fascicolo.systemID, folder.systemID, dbProvider)) { throw new Exception("errore durante l'aggiornamento dell'ID_TITOLARIO per il Fascicolo e il Folder"); } } bool isPrivato = fascicolo.privato != "0"; if (ruolo != null) { System.Collections.ArrayList listRuoliSuperiori; // 9 - Si estende la visibilità sul fascicolo creato if (!fascicoli.SetProjectTrustees(infoUtente.idPeople, fascicolo.systemID, ruolo, fascicolo.idClassificazione, fascicolo.idRegistro, isPrivato, out listRuoliSuperiori, infoUtente.delegato, fascicolo.pubblico)) { throw new Exception("errore durante estensione della visibilità sul Fascicolo"); } // 10 - Si estende la visibilità sulla folder creata bool isSottofascicolo = (folder.idParent != folder.idFascicolo); System.Collections.ArrayList tmp; // Variabile temporanea: i ruoli superiori sono già stati reperiti //10.1 - sottofascicoli: si da la visibilità ad essi a tutti coloro che vedono il fascicolo a cui essi appartengono //10.2 caso di rootFolder, segue la visibilità del fascicolo a cui fa riferimento (calcolata in fase di creazione del fascicolo) if (!fascicoli.SetProjectTrustees(infoUtente.idPeople, folder.systemID, ruolo, folder.idFascicolo, isSottofascicolo, fascicolo.idRegistro, isPrivato, out tmp, infoUtente.delegato, fascicolo.pubblico)) { throw new Exception("errore durante estensione della visibilità della Folder"); } ruoliSuperiori = (Ruolo[])listRuoliSuperiori.ToArray(typeof(Ruolo)); } string key_beprojectlevel = DocsPaUtils.Configuration.InitConfigurationKeys.GetValue("0", "BE_PROJECT_LEVEL"); if (!string.IsNullOrEmpty(key_beprojectlevel) && key_beprojectlevel.Equals("1")) { folder.codicelivello = string.Format("{0:0000}", Convert.ToInt32(fascicolo.codUltimo)); UpdateFolderCodLivello(folder, infoUtente); } string key_beprojectstructure = DocsPaUtils.Configuration.InitConfigurationKeys.GetValue("0", "BE_PROJECT_STRUCTURE"); if (!string.IsNullOrEmpty(key_beprojectstructure) && key_beprojectstructure.Equals("1")) { CreateStrutturaFascicolo(fascicolo, infoUtente, ruolo); } } catch (Exception ex) { logger.Debug("*** ESEGUITA ROLLBACK DELLA TRANSAZIONE CREAZIONE FASCICOLO: ***"); logger.DebugFormat("errore nel metodo: creazioneFascicoloConTransazione - {0}", ex.Message); logger.DebugFormat("StackTrace : {0}", ex.StackTrace); result = false; } logger.Info("END"); return(result); }
/// <summary> /// </summary> /// <param name="idProject"></param> /// <param name="infoUtente"></param> /// <param name="debug"></param> public virtual bool DeleteFolder(DocsPaVO.fascicolazione.Folder folder) { DocsPaDB.Query_DocsPAWS.Documentale documentale = new DocsPaDB.Query_DocsPAWS.Documentale(); return(documentale.DeleteProject(folder.systemID)); }
/// <summary> /// Creazione nuovo sottofascicolo /// </summary> /// <param name="folder"></param> /// <param name="ruolo"></param> /// <param name="result"></param> /// <param name="ruoliSuperiori"> /// Ruoli superiori cui è impostata la visibilità del sottofascicolo /// </param> /// <returns></returns> public bool CreateFolder(DocsPaVO.fascicolazione.Folder folder, DocsPaVO.utente.Ruolo ruolo, out DocsPaVO.fascicolazione.ResultCreazioneFolder result, out DocsPaVO.utente.Ruolo[] ruoliSuperiori) { result = ResultCreazioneFolder.OK; ruoliSuperiori = null; return(true); }
/// <summary> /// Creazione nuovo sottofascicolo /// </summary> /// <param name="folder"></param> /// <param name="ruolo"></param> /// <param name="result"></param> /// <param name="ruoliSuperiori"> /// Ruoli superiori cui è impostata la visibilità del sottofascicolo /// </param> /// <returns></returns> public bool CreateFolder(DocsPaVO.fascicolazione.Folder folder, DocsPaVO.utente.Ruolo ruolo, out DocsPaVO.fascicolazione.ResultCreazioneFolder result, out DocsPaVO.utente.Ruolo[] ruoliSuperiori) { bool retValue = false; result = ResultCreazioneFolder.GENERIC_ERROR; ruoliSuperiori = null; try { // Recuperare l'ID del padre del folder: dato che la modalità è diversa se il padre // è Fascicolo o Sottofascicolo, è necessario verificare la casistica // Caso in cui il parent del sottofascicolo è un sottofascicolo stesso Qualification qualSottoFascicoloParent = Dfs4DocsPa.getSottofascicoloQualificationById(folder.idParent); string parentId = DfsHelper.getDctmObjectId(this.GetServiceInstance <IQueryService>(false), qualSottoFascicoloParent); if (string.IsNullOrEmpty(parentId)) { // Caso in cui il parent del sottofascicolo è un fascicolo stesso qualSottoFascicoloParent = Dfs4DocsPa.getFascicoloQualificationById(folder.idFascicolo); parentId = DfsHelper.getDctmObjectId(this.GetServiceInstance <IQueryService>(false), qualSottoFascicoloParent); } if (!string.IsNullOrEmpty(parentId)) { ObjectIdentity parentIdentity = new ObjectIdentity(new ObjectId(parentId), DctmConfigurations.GetRepositoryName()); ObjectIdentity identity = new ObjectIdentity(DctmConfigurations.GetRepositoryName()); DataObject dataObject = new DataObject(identity, ObjectTypes.SOTTOFASCICOLO); dataObject.Properties.Properties.AddRange(Dfs4DocsPa.getSottoFascicoloProperties(folder)); dataObject.Relationships.Add(DfsHelper.createParentFolderRelationship(parentIdentity)); // Reperimento ACL del fascicolo di appartenenza e associazione al sottofascicolo CustomServices.AclDefinition aclDefinition = this.GetAclDefinitionSottoFascicolo(folder); AclHelper.setAclObjectProperties(dataObject.Properties, aclDefinition); DataPackage dataPackage = new DataPackage(dataObject); dataPackage = this.GetServiceInstance <IObjectService>(false).Create(dataPackage, null); retValue = (dataPackage.DataObjects.Count == 1); if (retValue) { result = ResultCreazioneFolder.OK; logger.Debug(string.Format("Documentum.CreateFolder: creato sottofascicolo con id {0}", folder.systemID)); } } else { throw new ApplicationException(string.Format("Non è stato possibile reperire l'oggetto parent per il folder con id '{0}'", folder.systemID)); } } catch (Exception ex) { retValue = false; logger.Debug(string.Format("Errore in Documentum.CreateFolder:\n{0}", ex.ToString())); } return(retValue); }
/// <summary> /// Rimozione di un documento da un folder /// </summary> /// <param name="idProfile"></param> /// <param name="folder"></param> /// <returns></returns> public bool RemoveDocumentFromFolder(string idProfile, DocsPaVO.fascicolazione.Folder folder) { bool retValue = false; // Reperimento docNumber da idProfile logger.Debug("Reperimento docNumber da idProfile"); string docNumber = DocsPaQueryHelper.getDocNumber(idProfile); bool isStampaRegistro = DocsPaQueryHelper.isStampaRegistroRepertorio(docNumber); try { logger.Debug("getDocumentoIdentityByDocNumber"); ObjectIdentity documentIdentity = Dfs4DocsPa.getDocumentoIdentityByDocNumber(docNumber); if (isStampaRegistro) { documentIdentity = Dfs4DocsPa.getDocumentoStampaRegistroIdentityByDocNumber(docNumber); } ObjectIdentity folderIdentity = null; // Verifica se l'id è relativo ad un fascicolo o a un sottofascicolo logger.Debug("Verifica se l'id è relativo ad un fascicolo o a un sottofascicolo"); if (!DocsPaQueryHelper.isSottofascicolo(folder.systemID)) { folderIdentity = Dfs4DocsPa.getFascicoloIdentityBySystemId(folder.idFascicolo); } else { folderIdentity = DctmServices.Dfs4DocsPa.getSottofascicoloIdentityById(folder.systemID); } logger.Debug("createRemoveParentFolder"); ReferenceRelationship removeRelationship = DctmServices.DfsHelper.createRemoveParentFolder(folderIdentity); logger.Debug("updatedDoc.Relationships"); DataObject updatedDoc = new DataObject(documentIdentity); updatedDoc.Relationships.Add(removeRelationship); DataPackage dp = new DataPackage(updatedDoc); logger.Debug("update"); IObjectService objSrvc = DctmServiceFactory.GetServiceInstance <IObjectService>(UserManager.ImpersonateSuperUser()); DataPackage retDp = objSrvc.Update(dp, null); retValue = (retDp.DataObjects.Count > 0); if (retValue) { logger.Debug(string.Format("Documentum.RemoveDocumentFromFolder: rimosso documento con docnumber {0} dal sottofascicolo con id {0}", idProfile, folder.systemID)); } } catch (Exception ex) { retValue = false; logger.Debug(string.Format("Errore in Documentum.RemoveDocumentFromFolder:\n{0}", ex.ToString())); } return(retValue); }
/// <summary> /// Rimozione di un fascicolo da docspa e documentum /// </summary> /// <param name="idProject"></param> /// <returns></returns> public bool DeleteFolder(DocsPaVO.fascicolazione.Folder folder) { return(this.ProjectManagerETDOCS.DeleteFolder(folder)); }
/// <summary> /// Reperimento ACL associate al sottofascicolo /// </summary> /// <param name="folder"></param> /// <returns></returns> protected virtual CustomServices.AclDefinition GetAclDefinitionSottoFascicolo(DocsPaVO.fascicolazione.Folder folder) { // Reperimento ACL del fascicolo di appartenenza e associazione al sottofascicolo CustomServices.AclDefinition aclDefinition = null; if (DocsPaQueryHelper.isFascicoloGenerale(folder.idFascicolo)) { // Determina se il fascicolo in cui si sta inserendo il folder è un fascicolo generale; // in tal caso l'acl da assegnare è la stessa del nodo titolario di appartenenza string idNodoTitolario = DocsPaQueryHelper.getIdNodoTitolario(folder.idFascicolo); aclDefinition = Dfs4DocsPa.getAclDefinition(idNodoTitolario, ObjectTypes.NODO_TITOLARIO, this.InfoUtente); } else { // Nel caso di inserimento di un folder in un fascicolo procedimentale, // l'acl del folder sarà quella del fascicolo di appartenenza aclDefinition = Dfs4DocsPa.getAclDefinition(folder.idFascicolo, ObjectTypes.FASCICOLO, this.InfoUtente); } return(aclDefinition); }
/// <summary> /// Rimozione di un documento dal fascicolo (in generale, da tutti i folder presenti nel fascicolo) /// </summary> /// <param name="idProfile"></param> /// <param name="folder"></param> /// <returns></returns> public bool RemoveDocumentFromProject(string idProfile, DocsPaVO.fascicolazione.Folder folder) { logger.Debug(string.Format("RemoveDocumentFromProject - IdProfile: {0} - IdFolder: {1} - IdFascicolo: {2}", idProfile, folder.systemID, folder.idFascicolo)); // 1. recuperare tutti link del documento // 2. identificare quelli da rimuovere (tutti quelli sotto il folder in input) // 3. aggiungere eventualmente il link a documenti non classificati // (se non c'è neanche più un link residuo) bool retValue = false; IObjectService objSrvc = null; // Reperimento docNumber da idProfile string docNumber = DocsPaQueryHelper.getDocNumber(idProfile); bool isStampaRegistro = DocsPaQueryHelper.isStampaRegistroRepertorio(docNumber); try { string repositoryName = DctmConfigurations.GetRepositoryName(); //objSrvc = this.GetObjectServiceInstance(); objSrvc = DctmServiceFactory.GetServiceInstance <IObjectService>(UserManager.ImpersonateSuperUser()); List <Relationship> removeRelationships = new List <Relationship>(); // 1. recuperare tutti link del documento: ObjectIdentity documentIdentity = Dfs4DocsPa.getDocumentoIdentityByDocNumber(docNumber); if (isStampaRegistro) { documentIdentity = Dfs4DocsPa.getDocumentoStampaRegistroIdentityByDocNumber(docNumber); } logger.Debug("RemoveDocumentFromProject: 1.recuperare tutti link del documento"); List <string> filters = new List <string>(); filters.Add("r_object_id"); DataObject documentData = DfsHelper.getAllPropsAndFolders(objSrvc, documentIdentity, filters, true); // 2. identificare quelli da rimuovere (tutti quelli sotto il folder in input): if (documentData.Relationships != null && documentData.Relationships.Count > 0) { logger.Debug("RemoveDocumentFromProject: 2. identificare quelli da rimuovere (tutti quelli sotto il folder in input)"); // 2a. recuperiamo la root del nodo associato a Folder: ObjectIdentity folderIdentity = Dfs4DocsPa.getFascicoloIdentityBySystemId(folder.idFascicolo); if (folderIdentity.ValueType == ObjectIdentityType.QUALIFICATION) { logger.Debug(((Qualification)folderIdentity.Value).GetValueAsString()); } filters = new List <string>(); filters.Add("r_folder_path"); DataObject folderData = DfsHelper.getAllPropsAndFolders(objSrvc, folderIdentity, filters, false); Property p = folderData.Properties.Get("r_folder_path"); if (p == null) { throw new Exception("Impossibile leggere r_folder_path"); } string rootPath = p.GetValueAsString(); logger.Debug(string.Format("RemoveDocumentFromProject: RootPath: {0}", rootPath)); foreach (ReferenceRelationship r in documentData.Relationships) { // 2b. recuperiamo il path del folder in esame // qui contiamo sul fatto che gli objectIdentity dei folder a cui è linkato vengano istanziati // come OBJECT_ID string targetDctmId = ((ObjectId)r.Target.Value).Id; logger.Error(string.Format("LOG-DEBUG: RemoveDocumentFromProject: targetDctmId: {0}", targetDctmId)); ObjectIdentity targetIdentity = new ObjectIdentity(new ObjectId(targetDctmId), repositoryName); DataObject targetData = DfsHelper.getAllPropsAndFolders(objSrvc, targetIdentity, filters, false); Property prop = targetData.Properties.Properties.Find(e => e.Name == "r_folder_path"); if (prop != null) { string targetPath = targetData.Properties.Get("r_folder_path").GetValueAsString(); logger.Debug(string.Format("RemoveDocumentFromProject: targetPath: {0}", targetPath)); //se il target è sotto la root allora è da rimuovere if (targetPath.StartsWith(rootPath)) { removeRelationships.Add(DfsHelper.createRemoveParentFolder(targetIdentity)); } } } } // 3. committare il tutto DataObject updatedDoc = new DataObject(documentIdentity); updatedDoc.Relationships = removeRelationships; DataPackage dp = new DataPackage(updatedDoc); DataPackage retDp = objSrvc.Update(dp, null); logger.Debug("RemoveDocumentFromProject: 3. committare il tutto"); if (retDp.DataObjects.Count > 0) { retValue = true; logger.Debug(string.Format("Documentum.RemoveDocumentFromProject: rimosso documento con docnumber {0} dal fascicolo con id {0}", idProfile, folder.systemID)); } } catch (Exception e) { retValue = false; logger.Debug(string.Format("Errore in Documentum.RemoveDocumentFromProject:\n{0}", e.ToString())); } return(retValue); }