예제 #1
0
        /// <summary>
        /// Funzione richiamata dal Thread per l'esecuzione dell'importazione
        /// </summary>
        /// <param name="prameters">Un array di oggetti. Sono attesi 4 elementi:
        ///     - Il primo deve essere una lista di oggetti di tipo ProjectRowData
        ///     - Il secondo deve essere un oggetto di tipo string
        ///     - Il terzo deve essere un oggetto di tipo InfoUtente
        ///     - Il quarto deve essere un oggetto di tipo Ruolo
        /// </param>
        public void ExecuteImport(object parameters)
        {
            #region Dichiarazione variabili

            // L'array dei parametri
            object[] param;

            // L'oggetto con le informazioni sui fascicoli da importare
            ProjectRowData[] prds;

            // L'url del frontend
            string url;

            // Le informazioni sull'utente che ha lanciato la procedura
            InfoUtente userInfo;

            // Il ruolo con cui è stata lanciata la procedura
            Ruolo role;

            #endregion

            // Casting dell'oggetto a array di oggetti
            param = parameters as object[];

            // Se l'array non contiene quattro elementi, fine esecuzione
            if (param.Length != 4)
            {
                return;
            }

            // Prelevamento delle informazioni sui fascicoli da creare
            prds = param[0] as ProjectRowData[];

            // Prelevamento dell'url del Fontend
            url = param[1] as string;

            // Prelevamento delle informazioni sull'utente
            userInfo = param[2] as InfoUtente;

            // Prelevamento del ruolo
            role = param[3] as Ruolo;

            // Calcolo del numero totale di fascicoli da importare
            this.totalNumberOfProjectToImport =
                prds.Length;

            #region Importazione fascicoli

            // Inizializzazione della lista da utilizzare per
            // memorizzare il report sull'importazione dei
            // fascicoli
            this.report = new List <ImportResult>();

            // Importazione dei fascicoli
            foreach (ProjectRowData rowData in prds)
            {
                try
                {
                    this.report.Add(ImportProjectsUtils.ImportProject(
                                        rowData,
                                        userInfo,
                                        role,
                                        url));
                }
                catch (Exception e)
                {
                    // In caso di eccezione viene aggiunto un risultato negativo
                    this.report.Add(new ImportResult()
                    {
                        Outcome = OutcomeEnumeration.KO,
                        Ordinal = rowData.OrdinalNumber,
                        Message = e.Message
                    });
                }

                // Un documenti è stato analizzato
                this.totalNumberOfAnalyzedProjects += 1;
            }

            // Aggiunta di una voce di report con il totale dei fascicoli
            // importati e non importati
            this.report.Add(this.GetSummaryElement(this.report));

            #endregion

            // Sospensione del thread fino a quando non viene letto
            // il report o non passano 1 minuto
            //waitReading.WaitOne(new TimeSpan(0,1,0));
        }
예제 #2
0
        protected void btnCreaFascicoli_Click(object sender, EventArgs e)
        {
            #region Definizione variabili
            // Un booleano utilizzato per determinare la validità del
            // file excel
            bool canImport;

            // Il risultato della chiamata al webservice
            List <ImportResult> report = null;

            // Il file postato
            HttpPostedFile postedFile;

            // Il content del documento
            byte[] content;

            // Il nome da attribuire al file temporaneo
            string temporaryFileName;

            // Il server path
            string serverPath;

            // L'array con le informazioni sui fascicoli da importare
            ProjectRowData[] prds;

            // L'oggetto con la definizione della funzione da far eseguire al thread
            AsyncImportProjectExecutor importExecutor;

            // Il numero massimo di fascicoli che è possibile importare
            int maxNumber;

            #endregion

            // Prelevamento del file postato
            postedFile = this.fileUploader.PostedFile;

            // Verifica del content type e dell'estensione del file al fine
            // di verificarne la validità
            canImport = (postedFile.ContentType == "application/vnd.ms-excel") &&
                        postedFile.FileName.ToLower().EndsWith("xls");

            // Se la verifica ha avuto esito positivo...
            if (canImport)
            {
                // Prelevamento del contenuto del file
                content = this.GetContent();

                // Creazione del nome per il file temporaneo
                temporaryFileName = String.Format("{0}.{1}",
                                                  Guid.NewGuid().ToString(), Path.GetExtension(this.fileUploader.FileName));

                // Prelevamento del serverPath
                serverPath = Utils.getHttpFullPath();

                // Pulizia del call context
                CallContextStack.CurrentContext.ContextState["projectExporter"] = null;
                CallContextStack.CurrentContext.ContextState["reportImport"]    = null;

                // Reset del campo nascosto con il valore da raggiungere.
                //this.hfTargetPerc.Value = "0";

                // Disassociazione della sorgente dati
                this.grdReport.DataSource = null;
                this.grdReport.DataBind();

                try
                {
                    // Reperimento delle informazioni sui fascicoli da importare
                    prds = ImportProjectsUtils.ReadDataFromExcel(
                        content,
                        Guid.NewGuid().ToString() + Path.GetExtension(this.fileUploader.FileName),
                        UserManager.getInfoUtente(this),
                        UserManager.getRuolo(this));
                }
                catch (Exception ex)
                {
                    report = new List <ImportResult>()
                    {
                        new ImportResult()
                        {
                            Message = DocsPaUtils.Exceptions.SoapExceptionParser.GetOriginalException(ex).Message,
                            Outcome = OutcomeEnumeration.KO
                        }
                    };

                    this.grdReport.DataSource = report;
                    this.grdReport.DataBind();

                    // Hiding del popup
                    this.mdlPopupWait.Hide();

                    return;
                }

                try
                {
                    // Reperimento del numero massimo di documenti importabili
                    maxNumber = ImportProjectsUtils.GetMaxProjectsNumber(UserManager.getInfoUtente());

                    // Se maxNumber è più minore del numero di documenti estratti dal foglio excel
                    if (maxNumber < prds.Length)
                    {
                        throw new Exception(String.Format(
                                                "E' possibile importare al massimo {0} fascicoli per volta.", maxNumber));
                    }
                }
                catch (Exception ex)
                {
                    report = new List <ImportResult>()
                    {
                        new ImportResult()
                        {
                            Message = ex.Message,
                            Outcome = OutcomeEnumeration.KO
                        }
                    };

                    this.grdReport.DataSource = report;
                    this.grdReport.DataBind();

                    // Hiding del popup
                    this.mdlPopupWait.Hide();

                    return;
                }

                // Creazione di un nuovo oggetto cui delegare l'importazione dei fascicoli
                importExecutor = new AsyncImportProjectExecutor();

                // Salvataggio dell'oggetto esecutore nel CallContext
                CallContextStack.CurrentContext.ContextState["projectExporter"] = importExecutor;

                // Creazione del thread con parametri
                //entry = new ParameterizedThreadStart(importExecutor.ExecuteImport);

                // Creazione del thread
                //thread = new Thread(entry);

                // Creazione dell'array dei parametri
                //parameters = new object[] {
                //    drdc,
                //    Utils.getHttpFullPath(),
                //    UserManager.getInfoUtente(),
                //    UserManager.getRuolo()
                //};

                // Partenza del thread
                //thread.Start(parameters);

                // Avvio del timer
                //this.tmrUpdateInfo.Enabled = true;

                try
                {
                    importExecutor.ExecuteImport(
                        new object[] {
                        prds,
                        Utils.getHttpFullPath(),
                        UserManager.getInfoUtente(),
                        UserManager.getRuolo()
                    });

                    int analyzedDocument, totalDocument;
                    // Si richiedono le statistiche
                    importExecutor.GetStatistics(out analyzedDocument, out totalDocument);

                    // Viene prelevato il report
                    report = importExecutor.GetReport();

                    // Associazione degli array dei risultati alla griglia
                    this.grdReport.DataSource = report;

                    // Binding della sorgente dati
                    this.grdReport.DataBind();

                    // Creazione del data set per l'esportazione del report di importazione
                    DataSet dataSet = this.GenerateDataSet(report);

                    // Path e nome file del template
                    string templateFilePath = Server.MapPath("formatPdfExport.xml");

                    // Aggiunta nell call context del file documento  con le informazioni
                    // da scivere nel report
                    CallContextStack.CurrentContext.ContextState["reportImport"] =
                        global::ProspettiRiepilogativi.Frontend.PdfReport.do_MakePdfReport(
                            global::ProspettiRiepilogativi.Frontend.ReportDisponibili.ReportLogMassiveImport,
                            templateFilePath,
                            dataSet,
                            null);

                    // Abilitazione pulsante esportazione
                    this.btnEsportaReport.Enabled = true;

                    // Aggiornamento pannello bottoniera
                    this.upButtons.Update();
                }
                catch (Exception ex)
                {
                    // Creazione di un array di result con un solo elemento
                    // che conterrà il dettaglio dell'eccezione
                    report = new List <ImportResult>()
                    {
                        new ImportResult()
                        {
                            Outcome = OutcomeEnumeration.KO,
                            Message = ex.Message,
                        }
                    };

                    this.grdReport.DataSource = report;
                    this.grdReport.DataBind();
                }
            }

            // Si nasconde il popup
            this.mdlPopupWait.Hide();
        }