如何设置自定义 SharePoint 计时器作业的"Job Description"



我想知道,如何设置自定义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-6aaf4bb119a

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

如果有人遇到了熟悉的问题并解决了,请分享决定。我将感谢任何帮助。

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

SPJobDefinition的Description属性实现为:

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

因此,为了有一个自定义的描述,你需要定义你的自定义工作定义如下:

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

我这样写我的计时器作业:

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

最后,您可以在管理中心->监控->定时作业-查看作业定义中看到您的作业。在那里,您可以重置时间表定义。

相关内容

  • 没有找到相关文章

最新更新