如何在Episerver中添加预定作业的设置

时间:2016-09-28 08:07:23

标签: 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);
        }
    }

I want one more checkbox like the Active checkbox that is there by default.

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

3 个答案:

答案 0 :(得分:2)

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

这应该可以解决您的问题

答案 1 :(得分:1)

我喜欢 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;

答案 2 :(得分:1)

这可能是Episervers预定工作的最大限制......缺乏配置选项。一个人无法向他们发送任何参数,例如,他们无法选择不同的时间来在一天内完成一项工作。

最简单的选择是从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或您选择的任何内容上,但是我并不完全确定这些设置在运行预定作业时会解决,而不是手动解决。