2016-09-28 3 views
2

мне нужно добавить флажок, который может использоваться, чтобы изменить поведение запланированного задания в 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.

Я хочу еще один checkbox как Активный флажок, который есть по умолчанию.

ответ

1

Мне нравится решение, предложенное andreasnico, но более простой подход может быть использовать настройки плагина (хотя они управляются отдельно от запланированного задания в пользовательском интерфейсе).

Пример настройки плагина от 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; 
+1

Спасибо Теду, но это было не то, что искал, однако я вижу много хороших обычаев с этим, и я фактически реализовал его для чего-то еще :) – Dujskan

1

Это, вероятно, самое большое ограничение, когда речь идет о Episervers запланированного рабочих мест ... Отсутствие вариантов конфигурации. Невозможно отправить им какие-либо параметры, и нельзя выбрать разные времена для запуска задания за один день, например.

Ваш самый простой вариант - установить значения, необходимые в задании, из appSettings.config или из базы данных.

В противном случае я бы построил GuiPlugin. Обычно они отображаются выше запланированных заданий в Admin под инструментами (если вы решили поместить их в эту область). Ваши настройки могут быть сохранены, как описывает Тед, или вы можете сохранить их в своей базе данных или использовать Episervers DDS (http://world.episerver.com/documentation/Items/Developers-Guide/Episerver-Framework/7/Dynamic-Data-Store/Dynamic-Data-Store/).

Вы также можете сохранить настройки на StartPage или SettingsPage или независимо от того, что вы выберете, но я не совсем уверен, что они разрешат при запуске запланированного задания вместо ручного.

+0

Я сохраню это в виду до следующего раза :) – Dujskan

Смежные вопросы