Запланированное задание-экспорт .rpt в PDF-файл
Привет,
Я хочу создать запланированное задание, которое экспортирует отчет crystal в pdf. Я использую Quartz NuGet в качестве планировщика. Вот мой код:
using CrystalDecisions.CrystalReports.Engine; using CrystalDecisions.Shared; using Quartz; using System; using System.IO; using System.Net; using System.Web; namespace TestSchedule.App_code { public class LettersJob:IJob { public static string text; public void Execute(IJobExecutionContext context) { int appno = 2; int regNum = 1; PrintLetter(appno, regNum); } public void PrintLetter(int appno,int regNum) { text = text + "A"; System.IO.File.WriteAllText("C:\\temp\\WriteText.txt", text); ReportDocument cryRpt = new ReportDocument(); Random random = new Random(); int randomNumber = random.Next(0, 100000); try { if (regNum == 1) cryRpt.Load(System.Web.HttpContext.Current.Server.MapPath("~/ApproveLetterA.rpt")); else { cryRpt.Load(System.Web.HttpContext.Current.Server.MapPath("~/ApproveLetterB.rpt")); } cryRpt.SetParameterValue("@appno", appno); ExportOptions CrExportOptions; DiskFileDestinationOptions CrDiskFileDestinationOptions = new DiskFileDestinationOptions(); PdfRtfWordFormatOptions CrFormatTypeOptions = new PdfRtfWordFormatOptions(); CrDiskFileDestinationOptions.DiskFileName = "C:\\temp\\CertNo" + appno + randomNumber + ".pdf"; CrExportOptions = cryRpt.ExportOptions; { CrExportOptions.ExportDestinationType = ExportDestinationType.DiskFile; CrExportOptions.ExportFormatType = ExportFormatType.PortableDocFormat; CrExportOptions.DestinationOptions = CrDiskFileDestinationOptions; CrExportOptions.FormatOptions = CrFormatTypeOptions; } cryRpt.Export(); } catch (Exception ex) { Console.Write(ex.Message); } }
using Quartz; using Quartz.Impl; using System; namespace TestSchedule.App_code { public class JobScheduler { private IScheduler scheduler; public void Start() { scheduler = StdSchedulerFactory.GetDefaultScheduler(); scheduler.Start(); IJobDetail job = JobBuilder.Create<lettersjob>().Build(); ITrigger trigger = TriggerBuilder.Create() .WithIdentity("trigger1", "group1") .StartNow() .WithSimpleSchedule(x => x .WithIntervalInSeconds(10) .RepeatForever()) .Build(); scheduler.ScheduleJob(job, trigger); } } }
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Optimization; using System.Web.Routing; using System.Web.Security; using System.Web.SessionState; using TestSchedule.App_code; namespace TestSchedule { public class Global : HttpApplication { JobScheduler jobScheduler; void Application_Start(object sender, EventArgs e) { // Code that runs on application startup RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); jobScheduler = new JobScheduler(); jobScheduler.Start(); } } }
Проблема в том, что я не могу получить RPT, экспортированный в pdf, когда PrintLetter работает на планировщике.
Есть идеи, что я делаю не так? Есть ли другой способ реализовать планировщик?
Заранее спасибо.
Что я уже пробовал:
1. я запускаю PrintLetter при загрузке Default. aspx и получаю экспортированный файл, как и предполагалось.
2. я добавил команду write to file на PrintLetter и запустил планировщик, и текст записывается в файл, как и предполагалось.
3. Я бегу PrintLetter через планировщик я получаю только текст, записанный в текстовом файле.
4. я пытаюсь использовать службу Windows на основе этого примера (Повторяйте задачу каждые N интервалов с помощью службы Windows В C# и VB.Net[^]) но я получаю те же результаты, что и выше, запись в файл работает, но экспорт rpt в pdf не работает.