//Сообщение об ошибке, возникшей в результате построения общего отчета public static void MailGeneralReportErr(GeneralReport report, Exception ex) { if (report != null) { var subject = "Ошибка при запуске отчетa для "; if (report.Payer != null) { subject += report.Payer.Name; } Mail(Settings.Default.ErrorFrom, Settings.Default.ErrorReportMail, subject, $"Код отчета : {report.Id}\r\nОшибка : {ex}"); } else { MailGlobalErr(ex); } }
public static bool ProcessReport(int generalReportId, bool manual, bool interval, DateTime dtFrom, DateTime dtTo) { var result = false; var reportLog = new ReportExecuteLog(); GeneralReport report = null; using (var session = GeneralReport.Factory.OpenSession()) using (var mc = new MySqlConnection(ConnectionHelper.GetConnectionString())) { mc.Open(); try { var timeout = ConfigurationManager.AppSettings["MySqlTimeout"]; if (!String.IsNullOrEmpty(timeout)) { mc.Execute($"set interactive_timeout={timeout};set wait_timeout={timeout};"); } using (var trx = session.BeginTransaction()) { reportLog.GeneralReportCode = generalReportId; reportLog.StartTime = DateTime.Now; session.Save(reportLog); trx.Commit(); } report = session.Get <GeneralReport>((uint)generalReportId); if (report == null) { throw new Exception($"Отчет с кодом {generalReportId} не существует."); } if (!report.Enabled && !manual) { throw new ReportException("Невозможно выполнить отчет, т.к. отчет выключен."); } _log.DebugFormat("Запуск отчета {0}", report.Id); report.ProcessReports(reportLog, mc, interval, dtFrom, dtTo); _log.DebugFormat("Отчет {0} выполнился успешно", report.Id); using (var trx = session.BeginTransaction()) { reportLog.EndTime = DateTime.Now; trx.Commit(); } result = true; } catch (Exception e) { if (e is ReportException) { _log.Warn($"Ошибка при выполнении отчета {report}", e); } else { _log.Error($"Ошибка при выполнении отчета {report}", e); } try { using (var trx = session.BeginTransaction()) { reportLog.EndError = true; session.Save(reportLog); trx.Commit(); } } catch (Exception ex) { _log.Error("Не удалось запротоколировать ошибку", ex); } var reportEx = e as ReportException; if (reportEx != null) { Mailer.MailReportErr(reportEx.ToString(), reportEx.Payer, report.Id, reportEx.SubreportCode, reportEx.ReportCaption); result = true; } else { Mailer.MailGeneralReportErr(report, e); } } finally { //не уверен почему так но восстанавливаем состояние задачи только если отчет не выключен //этого требует тест ProgramTest но логика мне не понятна //подозрительно тк раньше это работало тк переменная была null и блок валился с исключением if (report != null && report.Enabled) { ScheduleHelper.SetTaskAction(report.Id, "/gr:" + report.Id); ScheduleHelper.SetTaskEnableStatus(report.Id, report.Enabled, "GR"); var taskService = ScheduleHelper.GetService(); var reportsFolder = ScheduleHelper.GetReportsFolder(taskService); ScheduleHelper.DeleteTask(reportsFolder, report.Id, "temp_"); } } return(result); } }
public static void MailReportNotify(GeneralReport report, BaseReport page, string msg) { Mail(Settings.Default.ErrorFrom, Settings.Default.ErrorReportMail, "Уведомление о событии при формировании отчета для " + report.Payer?.Name, $"Код отчета : {report.Id}\r\nКод подотчета: {page.ReportCode}\r\nУведомление : {msg}"); }