Esempio n. 1
0
        /// <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;
            }
        }
Esempio n. 2
0
        /// <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));
                    }
                }
            }
        }
Esempio n. 3
0
        /// <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);
            }
        }