/// <summary> /// Analisi del risultato e invio della risposta al client sotto forma di stringa /// </summary> /// <returns>Risultato che il client analizzerà e su cui baserà le sue azioni</returns> public string GetCallbackResult() { // Esito dell'azione eseguita SaveChangesToRoleReportResult result = SaveChangesToRoleReportResult.OK; try { // Se questa è la prima volta che viene chiamata la callback (il report // non conterrà righe), viene eseguita l'inizializzazione del report // altrimenti viene eseguita l'azione, viene analizzato il risultato e, // se è il caso, si procede con la predisposizione del sistema ad eseguire // la prossima fase if (Report.Count == 0) { this.InitializeReport(); } else { result = this.ExecuteCurrentPhase(); } // Se la fase è finish viene chiusa l'ultima riga if (SaveChangesRequest.Phase == SaveChangesToRolePhase.Finish) { this.CloseReportVoice(SaveChangesToRoleReportResult.OK, String.Empty); } } catch (Exception exception) { this.CloseReportForException(); } return(this.RenderReport(result)); }
/// <summary> /// Metodo per la chiusura di un fase di lavoro /// </summary> /// <param name="result">Risultato dell'azione precedente</param> /// <param name="details">Dettagli sul risultato precedente</param> private void CloseReportVoice(SaveChangesToRoleReportResult result, String details) { if (Report[Report.Count - 1].Result == SaveChangesToRoleReportResult.Waiting || Report[Report.Count - 1].Result != SaveChangesToRoleReportResult.KO) { Report[Report.Count - 1].Result = result; } Report[Report.Count - 1].Description += "<br />" + details; Report[Report.Count - 1].ImageUrl = Report[Report.Count - 1].Result == SaveChangesToRoleReportResult.OK ? "Images/completed.jpg" : "Images/failed.jpg"; // Se la fase è Finish o se il risultato dell'operazione è un errore, viene inizializzato il report if (SaveChangesRequest.Phase == SaveChangesToRolePhase.Finish || result == SaveChangesToRoleReportResult.KO) { ReportingUtils.PrintRequest = new PrintReportObjectTransformationRequest() { DataObject = Report.ToArray(), ContextName = "ModificaRuolo", ReportKey = "ModificaRuolo" } } ; //ABBATANGELI-PANICI LIBRO FIRMA if (SaveChangesRequest.Phase == SaveChangesToRolePhase.Finish) { SaveChangesToRoleRequest saveChangesRequest = CallContextStack.CurrentContext.ContextState["SaveChangesRequest"] as SaveChangesToRoleRequest; string idRuoloOld = saveChangesRequest.IdOldRole; bool interrompiProcessi = GetSessionInterrompiProcessi(); bool storicizzaProcessi = GetSessionStoricizzaProcessi(); if (interrompiProcessi) { AsyncCallback callback = new AsyncCallback(CallBack); invalidaPassiCorrelati = new InvalidaPassiCorrelatiDelegate(InvalidaPassiCorrelati); DocsPAWA.AdminTool.Manager.SessionManager sessionManager = new DocsPAWA.AdminTool.Manager.SessionManager(); invalidaPassiCorrelati.BeginInvoke("R", idRuoloOld, string.Empty, sessionManager.getUserAmmSession(), callback, null); } else if (storicizzaProcessi) { string idRuoloNew = SaveChangesRequest.ModifiedRole.IDGruppo; AsyncCallback callback = new AsyncCallback(CallBackStoricizza); storicizzaPassiCorrelati = new StoricizzaPassiCorrelatiDelegate(StoricizzaPassiCorrelati); storicizzaPassiCorrelati.BeginInvoke(idRuoloOld, idRuoloNew, callback, null); } } //FINE }
/// <summary> /// Metodo per la chiusura di un fase di lavoro /// </summary> /// <param name="result">Risultato dell'azione precedente</param> /// <param name="details">Dettagli sul risultato precedente</param> private void CloseReportVoice(SaveChangesToRoleReportResult result, String details) { if (Report[Report.Count - 1].Result == SaveChangesToRoleReportResult.Waiting || Report[Report.Count - 1].Result != SaveChangesToRoleReportResult.KO) { Report[Report.Count - 1].Result = result; } Report[Report.Count - 1].Description += "<br />" + details; Report[Report.Count - 1].ImageUrl = Report[Report.Count - 1].Result == SaveChangesToRoleReportResult.OK ? "Images/completed.jpg" : "Images/failed.jpg"; // Se la fase è Finish o se il risultato dell'operazione è un errore, viene inizializzato il report if (SaveChangesRequest.Phase == SaveChangesToRolePhase.Finish || result == SaveChangesToRoleReportResult.KO) { ReportingUtils.PrintRequest = new PrintReportObjectTransformationRequest() { DataObject = Report.ToArray(), ContextName = "ModificaRuolo", ReportKey = "ModificaRuolo" } } ; }
/// <summary> /// Metodo per la renderizzazione del report. Questa funzione aggiunge anche un eventuale messaggio di richiesta /// da mostrare all'amministratore /// </summary> /// <param name="result">Risultato dell'ultima azione eseguita. Viene utilizzato per decidere se chiudere o meno il report</param> /// <returns>Renderizzazione del datagrid cui è stato bindato il report</returns> private string RenderReport(SaveChangesToRoleReportResult result) { // Associazione della sorgente dati al datagrid this.dgReport.DataSource = Report; this.dgReport.DataBind(); // Response da restituire al client StringBuilder response; // Il primo carattere della response sarà un numero che assumerà il valore 0 se la fase corrente è Finish o // se result è KO altrimenti assumerà il valore 1 se l'operazione ancora deve continuare o 2 se bisogna // mostrare una richiesta all'amministratore. Questo valore sarà utilizzato dal client per decidere // se deve richiamare di nuovo il server o se l'operazione si è conclusa. if (result != SaveChangesToRoleReportResult.KO && !String.IsNullOrEmpty(MessageToShow)) { response = new StringBuilder("2"); response.AppendFormat("{0}||", MessageToShow); } else { response = new StringBuilder(result != SaveChangesToRoleReportResult.KO && SaveChangesRequest.Phase != SaveChangesToRolePhase.Finish ? "1" : "0"); } // Inizializzazione degli oggetti necessari alla creazione della stringa HTML da inviare al client StringWriter stringWriter = new StringWriter(); HtmlTextWriter writer = new HtmlTextWriter(stringWriter); // Renderizzazione del datagrid del report this.dgReport.RenderControl(writer); // Flushing del writer e finalizzazione del prodotto di renderizzazione stringWriter.Flush(); response.Append(stringWriter.GetStringBuilder()); stringWriter.Close(); // Restituzione del report renderizzato return(response.ToString()); }