public static bool TryCreateReportFromTemplate(ReportTemplate template, Action <ReportState, string> callback, object obj, out ReportState state, bool auto = false) { var report = CreateNewReport(template.ReportType, template.Filter); template.Name = report.FileName; var data = report.GetDocbuilderData(template.Id); var dataJson = JsonConvert.SerializeObject(data); var columnsJson = JsonConvert.SerializeObject(report.ExtendedReportType.ColumnsName); var filterJson = JsonConvert.SerializeObject(template.Filter); var userCulture = CoreContext.UserManager.GetUsers(template.CreateBy).GetCulture(); var timeInterval = GetIntervarl(template.Filter); var reportInfoJson = JsonConvert.SerializeObject(new Dictionary <string, object> { { "Title", report.ReportInfo.Title }, { "CreatedText", ReportResource.ReportCreated }, { "CreatedAt", TenantUtil.DateTimeNow().ToString("M/d/yyyy", CultureInfo.InvariantCulture) }, { "CreatedBy", ProjectsFilterResource.By + " " + CoreContext.UserManager.GetUsers(template.CreateBy).DisplayUserName(false) }, { "DateFormat", userCulture.DateTimeFormat.ShortDatePattern }, { "TimeInterval", timeInterval } }); var tmpFileName = DocbuilderReportsUtility.TmpFileName; var script = GetDocbuilderMasterTemplate .Replace("${outputFilePath}", tmpFileName) .Replace("${reportData}", dataJson) .Replace("${reportColumn}", columnsJson) .Replace("${reportFilter}", filterJson) .Replace("${reportInfo}", reportInfoJson.Replace("\"", "\\\"")) .Replace("${templateBody}", GetDocbuilderTemplate(report.ReportType.ToString(), report.Filter.ViewType)); state = new ReportState(report.FileName, tmpFileName, script, (int)template.ReportType, auto ? ReportOrigin.ProjectsAuto : ReportOrigin.Projects, callback, obj); if (data.Count == 0) { state.Exception = ReportResource.ErrorEmptyData; state.Status = ReportStatus.Failed; return(false); } DocbuilderReportsUtility.Enqueue(state); return(true); }
public static ReportState RunGenareteReport(ReportType reportType, ReportTimePeriod timePeriod, Guid[] managers) { var reportData = GetReportData(reportType, timePeriod, managers); if (reportData == null) { throw new Exception(CRMReportResource.ErrorNullReportData); } var tmpFileName = DocbuilderReportsUtility.TmpFileName; var script = GetReportScript(reportData, reportType, tmpFileName); if (string.IsNullOrEmpty(script)) { throw new Exception(CRMReportResource.ErrorNullReportScript); } var state = new ReportState(GetFileName(reportType), tmpFileName, script, (int)reportType, ReportOrigin.CRM, SaveReportFile, null); DocbuilderReportsUtility.Enqueue(state); return(state); }