void checkExecutions(ExecutionLogInterface log, string folder, Repository repository, ref int count, ref int errorCount, StringBuilder errorSummary)
{
log.Log("Checking folder '{0}'", folder);
foreach (string reportPath in Directory.GetFiles(folder, "*." + Repository.SealReportFileExtension))
{
try
{
if (log.IsJobCancelled()) return;
log.Log("Checking report '{0}'", reportPath);
count++;
Report report = Report.LoadFromFile(reportPath, repository);
if (!string.IsNullOrEmpty(report.LoadErrors)) throw new Exception(string.Format("Error loading the report: {0}", report.LoadErrors));
report.CheckingExecution = true;
if (report.Tasks.Count > 0) log.Log("Warning: Report Task executions are skipped.");
foreach (ReportView view in report.Views)
{
if (log.IsJobCancelled()) return;
log.Log("Running report with view '{0}'", view.Name);
try
{
report.CurrentViewGUID = view.GUID;
ReportExecution reportExecution = new ReportExecution() { Report = report };
reportExecution.Execute();
int cnt = 120;
while (--cnt > 0 && report.IsExecuting && !log.IsJobCancelled())
{
Thread.Sleep(1000);
}
if (report.IsExecuting)
{
if (cnt == 0) log.Log("Warning: Report is running for more than 2 minutes. Cancelling the execution...");
report.CancelExecution();
}
if (!string.IsNullOrEmpty(report.ExecutionErrors)) throw new Exception(report.ExecutionErrors);
if (!string.IsNullOrEmpty(report.ExecutionView.Error)) throw new Exception(report.ExecutionView.Error);
report.RenderOnly = true;
}
catch (Exception ex)
{
errorCount++;
log.LogRaw("ERROR\r\n");
log.Log(ex.Message);
errorSummary.AppendFormat("\r\nReport '{0}' View '{1}': {2}\r\n", reportPath, view.Name, ex.Message);
}
}
}
catch (Exception ex)
{
errorCount++;
log.LogRaw("ERROR\r\n");
log.Log(ex.Message);
errorSummary.AppendFormat("\r\nReport '{0}': {1}\r\n", reportPath, ex.Message);
}
}
log.LogRaw("\r\n");
foreach (string subFolder in Directory.GetDirectories(folder))
{
if (log.IsJobCancelled()) return;
checkExecutions(log, subFolder, repository, ref count, ref errorCount, errorSummary);
}
}