Bu makalemde Microsoft.SharePoint.Administration namespace inin altında bulunan SPJobDefiniton’dan bahsetmeye çalışacağım.

Belirlediğiniz zamanlara göre tasklar oluşturup arka planda onun yapılmasını sağlayabilirsiniz.Örnek vermek gerekirse her 1  dakikada gidip döviz kurlarının getirilmesi gibi.Genelde 2 tane constructors oluşturulur.Bunlardan biri parametresiz,diğeri de SPJob ın ismi ve webapplication veya istediğiniz değerler olarak söylenebilir.En önemlisi ise Execute metodunu override etmektir.Belirlenen zamanda çalışmasını istediğiniz kod parçaları buraya yazılır.

Örnek olarak bir listeye bişeyler yazalım.Öncelikle SPJob’tan kalıtılmış bir Job yazalım.

class BindList : SPJobDefinition
    {
        #region Constructors

        //You must implement all three constructors
        public BindList()
            : base()
        {

        }

        public BindList(string jobName, SPService service, SPServer server, SPJobLockType targetType)
            : base(jobName, service, server, targetType)
        {

        }

        public BindList(string jobName, SPWebApplication webApplication)
            : base(jobName, webApplication, null, SPJobLockType.ContentDatabase)
        {
            this.Title = jobName;
        }

        #endregion

        //Override the Execute method to run code.
        public override void Execute(Guid targetInstanceId)
        {
            //SpWebApplication alınması
            SPWebApplication webApp = this.Parent as SPWebApplication;
            //site collectionın alınması
            SPSiteCollection timerSiteCollection = webApp.ContentDatabases[targetInstanceId].Sites;
            //Listenin getirilmesi
            SPList timerJobList = null;
            foreach (SPSite site in timerSiteCollection)
            {
                timerJobList = site.RootWeb.Lists.TryGetList("Announcments");
                if (timerJobList != null)
                {
                    SPListItem newItem = timerJobList.Items.Add();
                    newItem["Title"] = "Çalışma saati "+ Datetime.Now.ToShortTimeString();
                    newItem.Update();
                }
            }
        }

Sonra bir tane Feature EventReceiver yazarak SPJob’ın hangi araklıklarla çalışcağını belirtmek.

 public class Feature1EventReceiver : SPFeatureReceiver
    {
        // Uncomment the method below to handle the event raised after a feature has been activated.

        const string TIMER_JOB_NAME = "AKTARMA2TimerJOB";
        // Uncomment the method below to handle the event raised after a feature has been activated.
        public override void FeatureActivated(SPFeatureReceiverProperties properties)
        {
            //In this event we create and install the timer job
            //Start by finding the SPSite.
            SPSite site = (SPSite)properties.Feature.Parent;
            //Make sure the timer job isn't already registered
            foreach (SPJobDefinition job in site.WebApplication.JobDefinitions)
            {
                if (job.Name == TIMER_JOB_NAME)
                {
                    job.Delete();
                }
            }

            BindList newTimerJob = new BindList(TIMER_JOB_NAME, site.WebApplication);

            SPMinuteSchedule jobSchedule = new SPMinuteSchedule();
            jobSchedule.BeginSecond = 0;
            jobSchedule.EndSecond = 59;
            jobSchedule.Interval = 1;
            newTimerJob.Schedule = jobSchedule;
            newTimerJob.Update();
        }

        public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
        {
            //In this event we must clean up by deleting the timer job
            SPSite site = properties.Feature.Parent as SPSite;
            //Locate the right timer job
            foreach (SPJobDefinition job in site.WebApplication.JobDefinitions)
            {
                if (job.Name == TIMER_JOB_NAME)
                {
                    //This one is the right job. Delete it.
                    job.Delete();
                }
            }

        }

İstenirse saatlik günlük haftalık ve aylık olarak task oluşturulabilir.

Artık her şey hazır sonra bizim yapmamız gereken yazzdığımız SPJobDefinition ‘ ı aktif hale getirmek.

SharePoint Central Administration’dan SIrasıyla Monitoring > Review Job Definiton a tıklayarak yazdığımız SPJob ı aktif edip artık çalışmasını sağlayabiliriz.