public static ReportTaskState RunGenareteReport(ReportType reportType, ReportTimePeriod timePeriod, Guid[] managers) { var state = new ReportTaskState { Id = GetCacheKey(), Status = ReportTaskStatus.Queued, ReportType = reportType, Percentage = 0, IsCompleted = false, ErrorText = null, FileName = GetFileName(reportType), FileId = 0 }; SetCacheValue(state); var th = new Thread(StartGenareteReport); th.Start(new ReportTaskParameters { TaskState = state, TenantId = TenantProvider.CurrentTenantID, CurrentUser = SecurityContext.CurrentAccount.ID, ReportType = reportType, TimePeriod = timePeriod, Managers = managers, Url = HttpContext.Current != null ? HttpContext.Current.Request.GetUrlRewriter().ToString() : null }); return(state); }
private static void SaveReportFile(ReportTaskState state) { int tenantId; Guid userId; ParseCacheKey(state.Id, out tenantId, out userId); CoreContext.TenantManager.SetCurrentTenant(tenantId); SecurityContext.AuthenticateMe(userId); var daoFactory = Global.DaoFactory; var url = state.Response.GetFileUrl(TmpFileName); var data = new WebClient().DownloadData(url); using (var stream = new MemoryStream(data)) { var document = new ASC.Files.Core.File { Title = state.FileName, FolderID = daoFactory.GetFileDao().GetRoot(), ContentLength = stream.Length }; var file = daoFactory.GetFileDao().SaveFile(document, stream); daoFactory.GetReportDao().SaveFile((int)file.ID, (int)state.ReportType); state.Percentage = 100; state.IsCompleted = true; state.Status = ReportTaskStatus.Done; state.FileId = (int)file.ID; SetCacheValue(state); } }
private static void InsertItem(ReportTaskState value) { lock (Locker) { if (Queue.ContainsKey(value.Id)) { return; } Queue.Add(value.Id, value); RunTimer(0); } }
private static void SetCacheValue(ReportTaskState value) { Cache.Insert(value.Id, value, TimeSpan.FromMinutes(5)); }
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); }
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; } state.Response = DocumentService.DocbuilderRequest(FilesLinkUtility.DocServiceDocbuilderUrl, null, script, true, FileUtility.SignatureSecret); if (state.Response != null && state.Response.Error == 0) { state.Percentage = 80; } else { state.Percentage = 100; state.IsCompleted = true; state.ErrorText = state.Response == null ? CRMReportResource.ErrorNullDocbuilderResponse : state.Response.GetErrorText(); state.Status = ReportTaskStatus.Failed; } SetCacheValue(state); if (state.Status == ReportTaskStatus.Failed) { return; } InsertItem(state); }