コード例 #1
0
        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);
        }
コード例 #2
0
        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);
            }
        }
コード例 #3
0
        private static void InsertItem(ReportTaskState value)
        {
            lock (Locker)
            {
                if (Queue.ContainsKey(value.Id))
                {
                    return;
                }

                Queue.Add(value.Id, value);

                RunTimer(0);
            }
        }
コード例 #4
0
 private static void SetCacheValue(ReportTaskState value)
 {
     Cache.Insert(value.Id, value, TimeSpan.FromMinutes(5));
 }
コード例 #5
0
        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);
        }
コード例 #6
0
        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);
        }