protected void Page_Load(object sender, EventArgs e) { // Visualizzazione del tab dei protocolli interni a seconda // del valore impostato this.tpInterni.Visible = ImportRDEUtils.IsEnabledOwnerProto(); this.upReport.Update(); // Impostazione delle informazioni sull'amministrazione this.ltlAdministrationInfo.Text = String.Format("Amministrazione: {0}, Codice: {1}", UserManager.getInfoAmmCorrente(UserManager.getInfoUtente(this).idAmministrazione).Descrizione, UserManager.getInfoAmmCorrente(UserManager.getInfoUtente(this).idAmministrazione).Codice); // Impostazione del link per il download del modellO in base alla versione RDE if (ImportRDEUtils.IsEnabledOwnerProto()) { // Versione 2 this.hlLink.NavigateUrl = "ImportRDE.xls"; } else { // Versione 1 this.hlLink.NavigateUrl = "ModelloRDE_v01.xls"; } }
/// <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 un oggetto di tipo DocumentRowDataContainer /// - 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 documenti da importare DocumentRowDataContainer drdc; // 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; // Lista in cui depositare temporaneamente il report // di importazione relativo ad una tipologia di documento List <ImportResult> tempReport; #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 documenti da creare drdc = param[0] as DocumentRowDataContainer; // 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 documenti da importare this.totalNumberOfDocumentToImport = drdc.InDocument.Length + drdc.OutDocument.Length + drdc.OwnDocument.Length; #region Importazione documenti in arrivo // Inizializzazione della lista da utulizzare per // memorizzare temporaneamente il report sull'importazione dei // documenti in ingresso tempReport = new List <ImportResult>(); // Importazione dei documenti in ingresso foreach (DocumentRowData rowData in drdc.InDocument) { try { tempReport.Add(ImportRDEUtils.ImportRDEDocument( rowData, userInfo, role, userInfo.urlWA, ProtoType.A)); } catch (Exception e) { // In caso di eccezione viene aggiunto un risultato negativo tempReport.Add(new ImportResult() { Outcome = OutcomeEnumeration.KO, Ordinal = rowData.OrdinalNumber, Message = e.Message }); } // Un documenti è stato analizzato totalNumberOfAnalyzedDocuments += 1; } // Aggiunta di una voce di report con il totale dei documenti // importati e non importati tempReport.Add(this.GetSummaryElement(tempReport)); // Salvataggio del report per i documenti in ingresso report.InDocument = tempReport.ToArray(); #endregion #region Importazione documenti in partenza // Inizializzazione della lista da utilizzare per // memorizzare temporaneamente il report sull'importazione dei // documenti in partenza tempReport = new List <ImportResult>(); // Importazione dei documenti in partenza foreach (DocumentRowData rowData in drdc.OutDocument) { try { tempReport.Add(ImportRDEUtils.ImportRDEDocument( rowData, userInfo, role, userInfo.urlWA, ProtoType.P)); } catch (Exception e) { // In caso di eccezione viene aggiunto un risultato negativo tempReport.Add(new ImportResult() { Outcome = OutcomeEnumeration.KO, Ordinal = rowData.OrdinalNumber, Message = e.Message }); } // Un documenti è stato analizzato totalNumberOfAnalyzedDocuments += 1; } // Aggiunta di una voce di report con il totale dei documenti // importati e non importati tempReport.Add(this.GetSummaryElement(tempReport)); // Salvataggio del report per i documenti in partenza report.OutDocument = tempReport.ToArray(); #endregion #region Importazione documenti interni // Inizializzazione della lista da utilizzare per // memorizzare temporaneamente il report sull'importazione dei // documenti interni tempReport = new List <ImportResult>(); // Se non è abilitata l'importazione dei documenti interni, viene // cancellata la lista dei documenti interni if (!ImportRDEUtils.IsEnabledOwnerProto()) { drdc.OwnDocument = new DocumentRowData[0]; } // Importazione dei documenti interni foreach (DocumentRowData rowData in drdc.OwnDocument) { try { tempReport.Add(ImportRDEUtils.ImportRDEDocument( rowData, userInfo, role, userInfo.urlWA, ProtoType.I)); } catch (Exception e) { // In caso di eccezione viene aggiunto un risultato negativo tempReport.Add(new ImportResult() { Outcome = OutcomeEnumeration.KO, Ordinal = rowData.OrdinalNumber, Message = e.Message }); } // Un documenti è stato analizzato totalNumberOfAnalyzedDocuments += 1; } // Aggiunta di una voce di report con il totale dei documenti // importati e non importati tempReport.Add(this.GetSummaryElement(tempReport)); // Salvataggio del report per i documenti interni report.OwnDocument = tempReport.ToArray(); #endregion // Sospensione del thread fino a quando non viene letto // il report o non passano 1 minuto //waitReading.WaitOne(new TimeSpan(0,1,0)); }
protected void btnCreaRDE_Click(object sender, EventArgs e) { #region Definizione variabili // Un booleano utilizzato per determinare la validità del // file excel bool canImport; // 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'eventuale errore avvenuto durante la lettura dei dati dal foglio string error; // L'oggetto con le informazioni sui documenti da importare DocumentRowDataContainer drdc; // L'oggetto cui delegare l'esecuzione dell'importazione AsyncImportRDEExecutor importExecutor; // Oggetto per specificare un thread con parametri ParameterizedThreadStart entry; // Thread Thread thread; // Oggetto in cui memorizzare i parametri object[] parameters; // Il report dell'esecuzione ResultsContainer report; #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}.xls", Guid.NewGuid().ToString()); // Prelevamento del serverPath serverPath = Utils.getHttpFullPath(); try { // Pulizia del call context CallContextStack.CurrentContext.ContextState["rdeImporter"] = null; CallContextStack.CurrentContext.ContextState["reportImport"] = null; // Reset del campo nascosto con il valore da raggiungere. //this.hfTargetPerc.Value = "0"; // Disassociazione delle sorgenti dati this.grdArrivo.DataSource = null; this.grdGenerale.DataSource = null; this.grdInterni.DataSource = null; this.grdPartenza.DataSource = null; this.grdArrivo.DataBind(); this.grdGenerale.DataBind(); this.grdInterni.DataBind(); this.grdPartenza.DataBind(); // Reperimento delle informazioni sui documenti da importare drdc = ImportRDEUtils.ReadRDEDataFromExcel( content, temporaryFileName); // Creazione di un nuovo oggetto cui delegare l'importazione dei documenti importExecutor = new AsyncImportRDEExecutor(); // Salvataggio dell'oggetto esecutore nel CallContext CallContextStack.CurrentContext.ContextState["rdeImporter"] = 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; importExecutor.ExecuteImport( new object[] { drdc, 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(); // Se il report Generale non contiene elementi, viene // controllato se gli altri tab non contengono risultagti // //if (report.General == null || report.General.Length == 0) //{ // report.General = new ImportResult[1]; // report.General[0] = new ImportResult() // { // Outcome = OutcomeEnumeration.OK, // Message = "Nessun messaggio generale da mostrare" // }; //} // Associazione degli array dei risultati alle varie griglia this.grdGenerale.DataSource = report.General; this.grdArrivo.DataSource = report.InDocument; this.grdPartenza.DataSource = report.OutDocument; this.grdInterni.DataSource = report.OwnDocument; // Binding delle sorgenti dati this.grdGenerale.DataBind(); this.grdArrivo.DataBind(); this.grdPartenza.DataBind(); this.grdInterni.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 ResultsContainer(); report.General = new ImportResult[1]; report.General[0] = new ImportResult { Outcome = OutcomeEnumeration.KO, Message = ex.Message, }; this.grdGenerale.DataSource = report.General; this.grdGenerale.DataBind(); } } // Si nasconde il popup this.mdlPopupWait.Hide(); }