如何在 Episerver 中添加计划作业的设置

How to add settings for a scheduled job in Episerver

我需要添加一个复选框,用于更改 Episerver 中计划作业的行为:

 public class ImportAlarms : ScheduledJobBase
    {
        /*I want the editor to set this*/
        public bool CheckBox { get; set; }

        public override string Execute()
        {
            OnStatusChanged("Starting execution of import alarms");

            var status = Import();

            return status;
        }

        private static string Import()
        {
            /*Do something with CheckBox value here*/

            var repository = ServiceLocator.Current.GetInstance<IContentRepository>();

            var alarms = ImportAlarmsProvider.Import(DateTime.Now.AddDays(-1), DateTime.Now.AddDays(1));

            var createdCount = new AlarmRepository(repository).ImportAlarms(alarms.OrderBy(x => x.Date));

            return createdCount == -1 ? "No alarm container page set" : string.Format("Import completed, {0} pages imported", createdCount);
        }
    }

我想要一个复选框,例如默认情况下存在的 Active 复选框。

您的问题没有简单的解决方案,但请查看此博客 post:https://blog.mathiaskunto.com/2012/02/13/supplying-episerver-scheduled-jobs-with-parameters-through-admin-mode/

这应该可以解决您的问题

我喜欢 andreasnico 提出的解决方案,但更简单的方法可能是使用 插件设置 (尽管它们是分开管理的来自 UI) 中的预定作业。

来自 https://www.epinova.no/en/blog/configuration-options-for-episerver-sites/ 的插件设置示例:

 using EPiServer.PlugIn;

 [GuiPlugIn(Area = PlugInArea.None, DisplayName = "My Plugin Settings")]
 public class MyPluginSettings
 {
    private static MyPluginSettings _instance;

    [PlugInProperty(Description = "Some setting", AdminControl = typeof(CheckBox), AdminControlValue = "Checked")]   
    public bool SomeSetting { get; set; }

    public MyPluginSettings()
    {
       PlugInSettings.SettingsChanged += new EventHandler(PlugInSettings_SettingsChanged);
    }

    private static void PlugInSettings_SettingsChanged(object sender, EventArgs e)
    {
         _instance = null;
    }

    public static MyPluginSettings Instance
    {
        get
        {
            if (_instance == null)
            {
                _instance = new MyPluginSettings();
            }

            PlugInSettings.AutoPopulate(_instance);

            return _instance;
        }
    }
 }

您可以在预定的工作代码中检索值,例如:

bool setting = MyPluginSettings.Instance.SomeSetting;

这可能是 Episervers 计划作业的最大限制...缺少配置选项。例如,不能向它们发送任何参数,也不能在一天内 select 不同时间 运行 一项工作。

最简单的选择是从 appSettings.config 或数据库中设置作业中需要的值。

否则我会构建一个 GuiPlugin。这些通常显示在管理中工具下的计划作业上方(如果您选择将其放置在该区域)。您的设置可以按照 Ted 描述的方式保存,或者您可以将它们保存在数据库中或使用 Episervers DDS (http://world.episerver.com/documentation/Items/Developers-Guide/Episerver-Framework/7/Dynamic-Data-Store/Dynamic-Data-Store/)。

您还可以将设置存储在 StartPage 或 SettingsPage 或您选择的任何内容上,但是我不完全确定这些设置会在 运行 安排作业而不是手动安排时解决。