Add more scheduled job settings from the Optimizely CMS 12 admin UI -- with OptiScheduledJob.ExtraParameters
How to install
dotnet nuget add source https://api.nuget.optimizely.com/v3/index.json -n optimizelydotnet add package OptiScheduledJob.ExtraParametersusing OptiScheduledJob.ExtraParameters.Infrastructure.Configuration;public void ConfigureServices(IServiceCollection services){ services.AddCms(); // ... services.AddScheduledJobExtraParameters();}Create a class deriving from ScheduledJobExtraParametersBase and decorate each property with
using OptiScheduledJob.ExtraParameters.Attributes;using OptiScheduledJob.ExtraParameters.Models;
public class CleanupJobParameters : ScheduledJobExtraParametersBase{ [ExtraParametersPropertyDisplay(DisplayName = "Source folder", Description = "Path to scan")] public string SourceFolder { get; set; } [ExtraParametersPropertyDisplay(DisplayName = "Batch size", Description = "Items per run")] public int BatchSize { get; set; } [ExtraParametersPropertyDisplay(DisplayName = "Threshold", Description = "Minimum match score")] public decimal Threshold { get; set; } [ExtraParametersPropertyDisplay(DisplayName = "Send notifications")] public bool SendNotifications { get; set; } [ExtraParametersPropertyDisplay(DisplayName = "Run after")] public DateTime RunAfter { get; set; } // A string[] of options renders a dropdown. [ExtraParametersPropertyDisplay(DisplayName = "Priority", Options = new[] { "Low", "Medium", "High" })] public string Priority { get; set; }}
using EPiServer.Scheduler;using OptiScheduledJob.ExtraParameters.Attributes;[ScheduledPlugInWithExtraParameters( DisplayName = "Unused Image Removal", ExtraParameterDefinition = typeof(CleanupJobParameters))]public class UnusedImageRemovalJob : ScheduledJobBase{ // ...}using OptiScheduledJob.ExtraParameters.Services;public class UnusedImageRemovalJob : ScheduledJobBase{ private readonly IScheduledJobExtraParametersDataService _extraParameters; public UnusedImageRemovalJob(IScheduledJobExtraParametersDataService extraParameters) { _extraParameters = extraParameters; } public override string Execute() { var settings = _extraParameters.Get<CleanupJobParameters>(this.ScheduledJobId); var batchSize = settings?.BatchSize ?? 100; // ... use the settings return "Done"; }}How it looks in the admin


Compatibility
Wow, such a nice addition! Thanks!