当前位置: 首页 > 知识库问答 >
问题:

使用ChoNacha调用quartz调度器创建ACH文件的方法给出了例外

容远
2023-03-14
    //scheduler job
    Task IJob.Execute(IJobExecutionContext context)
    {
        SchedularMethodsController obj = new SchedularMethodsController();
        var T = Task.Run(() => obj.AchFileGenerator(DateTime.Now));\
        T.Wait();
        return T;
    }
public void AchFileGenerator(DateTime Dt)
        {
            ChoNACHAConfiguration config = new ChoNACHAConfiguration();
            config.DestinationBankRoutingNumber = "999999999";
            config.OriginatingCompanyId = "7999999999";
            config.DestinationBankName = ("PNC Bank").ToUpper();
            config.OriginatingCompanyName = ("automatecondominium").ToUpper();
            config.ReferenceCode = ("mgmt").ToUpper();
            config.BlockingFactor = 10;
            var unitowners = Achbll.GetUnitOwnerPaymentList(Dt).ToList();
            var FileName = "ACH_" + ((DateTime.Now.ToString()).Replace(" ", "_").Replace(":", "_")) + ".txt";
            var backpath = "CondoDocuments\\DocumentLibrary\\" + FileName;
            var path = HttpRuntime.AppDomainAppPath + backpath;

            using (var fs = System.IO.File.Create(path))
            {
                fs.Close();
                fs.Dispose();
            }

            try
            {
                using (var nachaWriter = new ChoNACHAWriter(path, config))
                { 

                    using (var bw2 = nachaWriter.CreateBatch(200, "PPD", "DIR DEBIT", DateTime.Now, DateTime.Now.AddDays(1), null, null, '1', null, null))
                    {
                        foreach (var owner in unitowners)
                        {
                            if (!string.IsNullOrEmpty(owner.AccountNo) && !string.IsNullOrEmpty(owner.BankRoutingCode))
                            {

                                var UA = Cipher.decrypt(owner.AccountNo);
                                var BR = Cipher.decrypt(owner.BankRoutingCode);
                                var Name = owner.UnitOwnerName.Split(' ');
                                if (Name.Length > 1)
                                {
                                    using (var entry = bw2.CreateDebitEntryDetail(27, BR.ToString(), UA.ToString(), 779, " 18H00A " + owner.UnitNo.ToString(), (Name[1] + ", " + Name[0]).ToUpper().ToString()))
                                    {
                                        //entry.CheckDigit = '0';

                                    }
                                }
                                else
                                {
                                    using (var entry = bw2.CreateDebitEntryDetail(27, BR.ToString(), UA.ToString(), 779, " 18H00B " + owner.UnitNo.ToString(), (Name[0]).ToUpper().ToString()))
                                    {
                                        //entry.CheckDigit = '0';

                                    }
                                }

                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
            }

        }
   protected void Application_Start()
        {
            Invoker ob = new Invoker();
            ob.StartScheduling();

            AreaRegistration.RegisterAllAreas();
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);

        }
 public async void StartScheduling()
        {
            // construct a scheduler factory
            NameValueCollection props = new NameValueCollection
            {
                { "quartz.serializer.type", "binary" }
            };

            StdSchedulerFactory factory = new StdSchedulerFactory(props);
            IScheduler scheduler = await factory.GetScheduler();
            await scheduler.Start();

            IJobDetail job = JobBuilder.Create<ExecutableJobs>()
                            .WithIdentity("myJob", "group1") // name "myJob", group "group1"
                            .Build();

            var start = DateTime.Now.AddMinutes(1);
            ITrigger trigger = TriggerBuilder.Create()
                        .WithIdentity("trigger3", "group1")
                        //.StartAt(start) // if a start time is not given (if this line were omitted), "now" is implied
                        .WithSimpleSchedule(x => x
                            .WithIntervalInMinutes(1).
                            RepeatForever())
                        .ForJob(job)
                        .Build();

            await scheduler.ScheduleJob(job, trigger);
        }

我得到的例外是:-

1)异常信息**************************************************************************************************异常类型:System.TypeInitializationException类型名称:ChoETL.choappSettings消息:“ChoETL.choappSettings”的类型初始化程序引发异常。数据:system.collections.listdictionaryinternal targetsite:

StackTrace信息***************************************************************************在choetl.choappSettings.getValue(字符串键,字符串defaultValue,Boolean saveDefaultValue)在choetl.choetl.choetl.choetl.choetlframework.getConfigValue(字符串键,字符串defaultValue)在

2)异常信息

StackTrace Information*********************************************************************************************在system.configurationmanager.openexeconfigurationimpl(ConfigurationFileMap,Boolean isMachine,ConfigurationUserLevel,String exePath,Boolean预加载)在system.configuration.configurationmanager

共有1个答案

阎扬
2023-03-14

似乎是ChoETL库中的bug。将修复并在下一个版本上发布。

同时,请按照以下方式解决此问题

public void AchFileGenerator(DateTime Dt)
{
    //Set this flag to fix the issue
    ChoETLFrxBootstrap.IsSandboxEnvironment = true;


    ChoNACHAConfiguration config = new ChoNACHAConfiguration();
    config.DestinationBankRoutingNumber = "999999999";
    config.OriginatingCompanyId = "7999999999";

.....

}

更新:

 类似资料:
  • 我希望使用Quartz调度器,以便应用程序的服务器部分使用调度器创建一个作业并将其存储在JDBCStore中,而UI部分(前端)使用调度器的另一个实例(指向相同的数据库模式)为该作业添加触发器。我以为UI知道作业和组的名称就足够了,因为添加触发器类似于: 不幸的是,这会为job类抛出异常。如有任何帮助,我们将不胜感激。谢谢你。

  • 这是我第一次存储作业,并使用crontrigger使用下面的代码对作业进行调度。 详细信息存储在表中--、&

  • 24.2. 使用OpenSymphony Quartz 调度器 Quartz使用Trigger, Job以及JobDetail等对象来进行各种类型的任务调度。关于Quartz的基本概念,请参阅http://www.opensymphony.com/quartz。为了让基于Spring的应用程序方便使用,Spring提供了一些类来简化uartz的用法。 24.2.1. 使用JobDetailBean

  • 我们有一个.NET项目,它检查远程计算机上是否存在一个文件。我们需要对一个部门内的多台远程计算机(数千台)执行此操作,每台计算机每天都在预定义的时间执行。执行时间是在数据库中指定的,它经常变化,每台远程计算机的执行时间都是不同的(有些可能是相同的)。为了实现这一点,我们计划使用Quartz调度器。由于我们是石英的新手,我们想知道如何实现这一点。在高层,我们需要这些- 调度程序应该在每天的特定时间启

  • 我使用CalendarTriggerImpl每3天触发我的作业。我的开始时间是2012-12-10 15:00:00,结束时间是2013-12-10。但是当我在2012-12-11 11:00:00执行我的计划程序时,作业会执行。如何解决这个问题。我没有使用cron触发器,因为它会在每个月重置。所以请帮助我在2012-12-10 15:00:00、2012-12-13 15:00:00、2012-

  • 我正在寻找最好的解决方案,以创建一个java web应用程序,以生成Excel/PDF格式的报告。类似于Google Adwords的东西,用户可以创建日程报告,并在以后生成报告时下载。 我正在考虑开发一个java应用程序,在其中用户记录,选择一个预先定义的报告,并提供输入参数(如报告日期等),这个请求将被排队或保存为Quarts作业(首选持久队列)。一个作业将监视队列/作业并执行该作业,生成报告