private static void TimerCallback(object obj) { lock (Locker) { var keys = Queue.Keys.ToList(); foreach (var key in keys) { try { Dictionary <string, string> urls; var builderKey = DocumentServiceConnector.DocbuilderRequest(Queue[key].BuilderKey, null, true, out urls); if (builderKey == null) { throw new Exception(CRMReportResource.ErrorNullDocbuilderResponse); } Queue[key].BuilderKey = builderKey; SetCacheValue(Queue[key]); if (urls != null && urls.ContainsKey(TmpFileName)) { SaveReportFile(Queue[key], urls[TmpFileName]); Queue.Remove(key); } } catch (Exception ex) { Queue[key].IsCompleted = true; Queue[key].Percentage = 100; Queue[key].Status = ReportTaskStatus.Failed; Queue[key].ErrorText = ex.Message; SetCacheValue(Queue[key]); Queue.Remove(key); } } if (Queue.Any()) { RunTimer(1000); } } }
private static void GenareteReport(ReportTaskState state, ReportType reportType, ReportTimePeriod timePeriod, Guid[] managers) { state.Status = ReportTaskStatus.Started; state.Percentage = 10; SetCacheValue(state); var reportData = GetReportData(reportType, timePeriod, managers); if (reportData != null) { state.Percentage = 50; } else { state.Percentage = 100; state.IsCompleted = true; state.ErrorText = CRMReportResource.ErrorNullReportData; state.Status = ReportTaskStatus.Failed; } SetCacheValue(state); if (state.Status == ReportTaskStatus.Failed) { return; } var script = GetReportScript(reportData, reportType); if (!string.IsNullOrEmpty(script)) { state.Percentage = 60; } else { state.Percentage = 100; state.IsCompleted = true; state.ErrorText = CRMReportResource.ErrorNullReportScript; state.Status = ReportTaskStatus.Failed; } SetCacheValue(state); if (state.Status == ReportTaskStatus.Failed) { return; } try { Dictionary <string, string> urls; state.BuilderKey = DocumentServiceConnector.DocbuilderRequest(null, script, true, out urls); state.Percentage = 80; } catch (Exception ex) { state.Percentage = 100; state.IsCompleted = true; state.ErrorText = ex.Message; state.Status = ReportTaskStatus.Failed; } SetCacheValue(state); if (state.Status == ReportTaskStatus.Failed) { return; } InsertItem(state); }