public void Temporary_task_should_not_contains_triggers() { var service = ScheduleHelper.GetService(); var folder = ScheduleHelper.GetReportsFolder(service); ScheduleHelper.DeleteTask(folder, 100, "GR"); ScheduleHelper.DeleteTask(folder, 1, "temp"); var task = ScheduleHelper.GetTaskOrCreate(service, folder, 100, "", "GR"); ScheduleHelper.SetTaskEnableStatus(100, true, "GR"); var definition = task.Definition; var trigger = new WeeklyTrigger { DaysOfWeek = DaysOfTheWeek.Friday, WeeksInterval = 1, StartBoundary = DateTime.Now }; definition.Triggers.Add(trigger); ScheduleHelper.UpdateTaskDefinition(service, folder, Convert.ToUInt64(100), definition, "GR"); task = ScheduleHelper.FindTask(service, folder, 100, "GR"); Assert.That(task.Definition.Triggers.Count, Is.EqualTo(1)); var temp = Report.CreateTemporaryTaskForRunFromInterface(service, folder, task, "cmd /c echo"); Assert.That(temp.Definition.Triggers.Count, Is.EqualTo(0)); }
protected void btnFinish_Click(object sender, EventArgs e) { if (_currentTask != null) { _currentTask.Dispose(); _currentTask = null; } ScheduleHelper.DeleteTask(ScheduleHelper.GetReportsFolder(_taskService), _generalReport.Id, "GR"); //Закончили работу с задачами if (_taskService != null) { _taskService.Dispose(); _taskService = null; } //Удаляем отчет using (new TransactionScope()) { _generalReport.Delete(); } Response.Redirect("base.aspx"); }
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); } }