Как установить «Описание работы» для пользовательского задания таймера SharePoint - PullRequest
4 голосов
/ 27 февраля 2012

Интересно, как мне задать описание задания для пользовательского задания таймера 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 ]

10 голосов
/ 02 марта 2012

Обе ваши ссылки дают абсолютно правильный ответ.

Свойство Description SPJobDefinition реализовано следующим образом:

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

Таким образом, для создания пользовательского описания необходимо определитьВаше пользовательское определение работы выглядит следующим образом:

public class MyCustomJobDefinition : SPJobDefinition
{
    public override string Description
    {
        get
        {
            return "This is my custom description";
        }
    }
}
1 голос
/ 28 февраля 2012

Я написал свою работу по таймеру так:

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

В конце вы можете увидеть свою работу в центре администрирования -> Мониторинг -> Задания таймера - просмотреть определения заданий. Там вы можете сбросить определение расписания.

...