Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to set "Job Description" of a custom SharePoint Timer Job

I wonder, how can I set the job description of a custom SharePoint Timer Job. When we are looking at the job definition properties through the central administration, there is the line 'Job Description'. But it's always empty in the custom timer job. I have found some articles, which have to solve the problem.

http://thedotnetter.wordpress.com/2011/09/07/setting-the-job-description-of-a-custom-sharepoint-timer-job/

http://social.technet.microsoft.com/Forums/en-US/sharepoint2010programming/thread/77da488a-b218-4922-b79b-f7b08f68fb3c#345fdac3-25cd-4a1e-b6e2-6aaf4bbb119a

But they both didn't bring any help.

If, anyone had the familiar problem and resolved it, please, share the decision. I will appreciate any help.

like image 239
Deniplane Avatar asked Dec 22 '22 01:12

Deniplane


2 Answers

Both of your links give exactly the right answer.

The Description property of SPJobDefinition is implemented as:

public virtual string Description
{
    get
    {
        return string.Empty;
    }
}

So, in order to have a custom description, you need to define your custom job definition as follows:

public class MyCustomJobDefinition : SPJobDefinition
{
    public override string Description
    {
        get
        {
            return "This is my custom description";
        }
    }
}
like image 200
Rich Bennema Avatar answered Mar 03 '23 09:03

Rich Bennema


I wrote my timer job like this:

public class YourJob : SPJobDefinition
{
    private static string JOB_NAME = "YourJobName";
    public override string Description
    {
        get
        {
            return "YourDescription";
        }
    }
    public YourJob() : base() { }

    public YourJob(SPWebApplication webApp)
        : base(JOB_NAME, webApp, null, SPJobLockType.None)
    {
        this.Title = JOB_NAME;
        this.Schedule = GetSchedule();
    }
    //This job start to run every day between 00:00 to 00:30
    //There are several options
    private SPSchedule GetSchedule()
    {
        SPDailySchedule myDailySchedule = new SPDailySchedule();
        myDailySchedule.BeginHour = 00;
        myDailySchedule.BeginMinute = 00;
        myDailySchedule.BeginSecond = 0;
        myDailySchedule.EndHour = 00;
        myDailySchedule.EndMinute = 30;
        myDailySchedule.EndSecond = 0;

        return myDailySchedule;
    }

    public override void Execute(Guid targetInstanceId)
    {
        //Write here your code.
        //In this example we get value from SP (in every zone) web config to do something with it.
        foreach (SPUrlZone urlZone in Enum.GetValues(typeof(SPUrlZone)))
        {
            if (((SPWebApplication)this.Parent).IisSettings.ContainsKey(urlZone))
            {
                var zone = ((SPWebApplication)this.Parent).IisSettings[urlZone];
                var appName = zone.ServerComment;

                var WebConfigKey = GetAppSettings(appName, "WebConfigKey");
            }
        }
    }

    private string GetAppSettings(string appName, string Key)
    {
        string result = String.Empty;
        SPWebApplication webApplication = this.Parent as SPWebApplication;
        Configuration config = WebConfigurationManager.OpenWebConfiguration("/", appName);
        if (config.HasFile && config.AppSettings.Settings[Key] != null)
        {
            result = config.AppSettings.Settings[Key].Value;
        }
        return result;
    }
}

After it you need to add your job to feature event receiver

[Guid("46b3a9b4-793e-4ab9-99ba-b003a3601e3a")]
public class MainEventReceiver : SPFeatureReceiver
{
    public static string JOB_NAME = "YourJobName";

    public override void FeatureActivated(SPFeatureReceiverProperties properties)
    {
        SPSite site = properties.Feature.Parent as SPSite;

        // Make sure the job isn't already registered.
        foreach (SPJobDefinition job in site.WebApplication.JobDefinitions)
        {
            if (job.Name == JOB_NAME)
                job.Delete();
        }

        YourJob job = new YourJob(site.WebApplication);
        job.Update();
    }

    public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
    {
        SPSite site = properties.Feature.Parent as SPSite;

        // Delete the job.
        foreach (SPJobDefinition job in site.WebApplication.JobDefinitions)
        {
            if (job.Name == JOB_NAME)
                job.Delete();
        }
    }
}

In the end you can see your job in Central Administration -> Monitoring -> Timer Jobs - Review job definitions. There you can reset your schedule definition.

like image 21
Zoli Avatar answered Mar 03 '23 10:03

Zoli