SharePoint TimeJob使用笔记

来源:互联网 发布:阳台柜 知乎 编辑:程序博客网 时间:2024/06/09 16:12

PS:TimeJob里面的代码有更新之后 需要重新启用TimeJob的服务,要不然执行的还是之前的代码

 

1,主要代码,创建一个TimeJob类,里面继承他需要继承的类,都是一个模式。

using Microsoft.SharePoint;using Microsoft.SharePoint.Administration;using Microsoft.SharePoint.Utilities;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Web;namespace NuctechProject{    public class MyTimerJob : SPJobDefinition    {        // 该构造只用于序列化和反列化,因为timer job的Definition 初始化后成为instance需要保存在数据库中          public MyTimerJob(): base()        {        }        // 创建针对SPService application的timer job 是调用的构造          public MyTimerJob(string jobName, SPService service, SPServer server, SPJobLockType lockType)            : base(jobName, service, server, lockType)        {            this.Title = "PlanWarn Timer Job";//此处是TimeJob的名称
        }        // 创建针对web application的timer job 是调用的构造          public MyTimerJob(string jobName, SPWebApplication webapp)            : base(jobName, webapp, null, SPJobLockType.ContentDatabase)        {            this.Title = "PlanWarn Timer Job";//此处是TimeJob的名称
        }        // 每次执行到Timer Job时要执行的方法。跟据Timer Job 的Schedule          public override void Execute(Guid targetInstanceId)        {            SPWebApplication webapp = this.Parent as SPWebApplication;            SPContentDatabase contentDb = webapp.ContentDatabases[targetInstanceId];            // 取参数,通过Properties可以从外部传递参数,但要求参数可以被序列化和反列化              //需要执行的代码        }}

需要注意点:

1,this.Title = "PlanWarn Timer Job";//此处是TimeJob的名称

this.Title是设置你的TimeJob名字,到后面设置定时的时候需要找的

2,在public override void Execute(Guid targetInstanceId)里面写你的逻辑代码就好了

 

 

 

2,主要代码有了,现在创建一个Feature,以下代码均是自动生成。需要改的地方为

    1,const string JobName = "PlanWarn Timer Job";  此处的名字就是第一步的this.Title

    2,修改FeatureActivated方法里面的new SPSite(http://demo1); 构造参数改成你配置的地址

using System;using System.Runtime.InteropServices;using System.Security.Permissions;using Microsoft.SharePoint;using Microsoft.SharePoint.Administration;namespace NuctechProject.Features.Feature1{    /// <summary>    /// 此类用于处理在激活、停用、安装、卸载和升级功能的过程中引发的事件。    /// </summary>    /// <remarks>    /// 附加到此类的 GUID 可能会在打包期间使用,不应进行修改。    /// </remarks>    [Guid("673a25ed-2556-42e5-ac1c-155ef01ae7d7")]    public class Feature1EventReceiver : SPFeatureReceiver    {        // 取消对以下方法的注释,以便处理激活某个功能后引发的事件。        const string JobName = "PlanWarn Timer Job";        public override void FeatureActivated(SPFeatureReceiverProperties properties)        {            // 注意此处as 后面是SPSite还是SPWeb, SPFarm ...要根据Feature 的Scope              SPSite site = new SPSite("http://demo1");            DeleteJob(site); // Delete Job if already Exists              CreateJob(site); // Create new Job          }        private static void DeleteJob(SPSite site)        {            foreach (SPJobDefinition job in site.WebApplication.JobDefinitions)                if (job.Name == JobName)                    job.Delete();        }        private static void CreateJob(SPSite site)        {            // 初始化 SPJobDefinition              MyTimerJob job = new MyTimerJob(JobName, site.WebApplication);            // 传递参数              job.Properties.Add("SiteUrl", site.Url);            // 设置 schedule, 可选 SPDailySchedule, SPWeeklySchedule, SPYearlySchedule,SPMonthlyByDaySchedule,SPHourlySchedule,SPMinuteSchedule                        SPMinuteSchedule schedule = new SPMinuteSchedule();            schedule.BeginSecond = 0;            schedule.EndSecond = 5;            schedule.Interval = 5;            job.Schedule = schedule;            job.Update();        }        // 取消对以下方法的注释,以便处理在停用某个功能前引发的事件。        public override void FeatureDeactivating(SPFeatureReceiverProperties properties)        {            // 删除 Timer Job的实例              DeleteJob(properties.Feature.Parent as SPSite); // Delete the Job          }        // 取消对以下方法的注释,以便处理在安装某个功能后引发的事件。        //public override void FeatureInstalled(SPFeatureReceiverProperties properties)        //{        //}        // 取消对以下方法的注释,以便处理在卸载某个功能前引发的事件。        //public override void FeatureUninstalling(SPFeatureReceiverProperties properties)        //{        //}        // 取消对以下方法的注释,以便处理在升级某个功能时引发的事件。        //public override void FeatureUpgrading(SPFeatureReceiverProperties properties, string upgradeActionName, System.Collections.Generic.IDictionary<string, string> parameters)        //{        //}    }}

 

3,上面两步完成之后,就需要去作业定义里面设置,这个代码每隔多久执行一次了。

具体操作步骤请看这个

http://www.cnblogs.com/jianyus/p/3458535.html

 

我的是主要代码,上面的地址是每步骤,以及详细解释

2 0