如何设置自定义SharePoint计时器作业的“作业说明”

时间:2012-02-27 09:47:26

标签: sharepoint sharepoint-2010 timer-jobs

我想知道,如何设置自定义SharePoint计时器作业的作业说明。当我们通过集中管理查看作业定义属性时,会出现“作业描述”行。但它在自定义计时器作业中始终为空。 我找到了一些必须解决问题的文章。

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

但他们都没有带来任何帮助。

如果有人有熟悉的问题并解决了,请分享决定。 我将不胜感激。

2 个答案:

答案 0 :(得分:10)

您的两个链接都给出了正确答案。

DescriptionSPJobDefinition属性实现为:

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

因此,为了获得自定义描述,您需要按如下方式定义自定义作业定义:

public class MyCustomJobDefinition : SPJobDefinition
{
    public override string Description
    {
        get
        {
            return "This is my custom description";
        }
    }
}

答案 1 :(得分:1)

我写了这样的计时器工作:

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;
    }
}

之后,您需要将作业添加到功能事件接收器

[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();
        }
    }
}

最后,您可以在管理中心看到您的工作 - >监控 - >计时器作业 - 检查作业定义。在那里,您可以重置您的日程安排定义。