Scheduling API
Overview
Scheduled tasks in Sitefinity CMS are objects that can execute your custom logic at a specific time. It enables you to set and track the progress of the scheduled tasks. You can use scheduled task in conjunction with other Sitefinity CMS mechanism such as the event system to postpone the execution of heavy operations.
For example, you can subscribe for the ICommentCreatedEvent for comments, to receive an email each time a new comment is created. Instead of executing the fired event handler logic immediately you can create a scheduled task that is going to perform this operation at a more convenient time, for example during the weekend.
The system automatically handles the NLB case, and the code is executed only on one node.
Create a scheduled task class
- Create a class that inherits from
Telerik.Sitefinity.Scheduling.ScheduledTask. - Create default constructor.
- Override the
ExecuteTaskmethod. - To return the full name of your class, override the
TaskName. - To set a custom data and use it when the task is executed, override the
GetCustomDataandSetCustomDatamethods.GetCustomData– in this method you return your custom data as a string and that string is stored in the database when the task is persisted.SetCustomData– the custom data is retrieved from the database when the task is executed and you can use it to populate the required properties of your class.
EXAMPLE: Use the following code:
C#using System.Runtime.Serialization; using Telerik.Sitefinity.Scheduling; using Telerik.Sitefinity.Utilities.Json; namespace SitefinityWebApp { public class MyScheduledTask : ScheduledTask { public MyScheduledTask() { } public override void SetCustomData(string customData) { var data = JsonUtility.FromJson<MyCustomData>(customData); this.CustomData = data; } public override string GetCustomData() { return this.CustomData.ToJson(); } public override void ExecuteTask() { // Do your scheduled logic here // If your code throws, Sitefinity CMS will handle the exception and will re-schedule your task for anotehr execution. } public override string TaskName { get { return "SitefinityWebApp.MyScheduledTask"; } } public MyCustomData CustomData { get; set; } [DataContract] public class MyCustomData { [DataMember] public string MyStringData { get; set; } [DataMember] public int MyIntData { get; set; } // Any other serializable data } } }
The sample above also demonstrates how to persist custom data between executions of your task. To do this, override the GetCustomData() and SetCustomData() functions. In these functions implement conversions of the data you want to use in your scheduled task to and from string.