如何在 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 或您选择的任何内容上,但是我不完全确定这些设置会在 运行 安排作业而不是手动安排时解决。
我需要添加一个复选框,用于更改 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 或您选择的任何内容上,但是我不完全确定这些设置会在 运行 安排作业而不是手动安排时解决。