设为首页 收藏本站
查看: 710|回复: 0

[经验分享] Creating Custom SharePoint Timer Jobs

[复制链接]

尚未签到

发表于 2017-5-24 09:34:33 | 显示全部楼层 |阅读模式
原文链接

 
  A few weeks back I posted about how you can create custom timer jobs for use in the latest release of SharePoint to perform scheduled tasks. However, considering there have been almost 40 comments to the post in the last three weeks, I figured the post needed some clarification (duh, ya think?).
  The first thing you need to do is create a class that inherits from the Microsoft.SharePoint.Administration.SPJobDefinition class. To implement this class, you need to create a few constructors and override the Execute() method, like so:

   1:  namespace AndrewConnell.TaskLogger {
2:    public class TaskLoggerJob : SPJobDefinition{
3:   
4:      public TaskLoggerJob ()
5:        : base(){
6:      }
7:   
8:      public TaskLoggerJob (string jobName, SPService service, SPServer server, SPJobLockType targetType)
9:        : base (jobName, service, server, targetType) {
10:      }
11:   
12:      public TaskLoggerJob (string jobName, SPWebApplication webApplication)
13:        : base (jobName, webApplication, null, SPJobLockType.ContentDatabase) {
14:        this.Title = "Task Logger";
15:      }
16:   
17:      public override void Execute (Guid contentDbId) {
18:        // get a reference to the current site collection's content database
19:        SPWebApplication webApplication = this.Parent as SPWebApplication;
20:        SPContentDatabase contentDb = webApplication.ContentDatabases[contentDbId];
21:   
22:        // get a reference to the "Tasks" list in the RootWeb of the first site collection in the content database
23:        SPList taskList = contentDb.Sites[0].RootWeb.Lists["Tasks"];
24:   
25:        // create a new task, set the Title to the current day/time, and update the item
26:        SPListItem newTask = taskList.Items.Add();
27:        newTask["Title"] = DateTime.Now.ToString();
28:        newTask.Update();
29:      }
30:    }
31:  }

  As you can see, this job does nothing important but add a new item to a Task list every time it's executed. Now that you have the job built, you need to get it registered. Unfortunately the only way to do this is through code, but it sure would be one heck of a candidate for a custom STSADM command. Anyway, since we don't have that today, I like to use the feature activated & deactivated events to install/uninstall my custom jobs.
  To do this, you have to create another class that inherits from the Microsoft.SharePoint.SPFeatureReceiver class and implement the FeatureActivated & FeatureDeactivated event handlers like so:

   1:  namespace AndrewConnell.TaskLogger {
2:    class TaskLoggerJobInstaller : SPFeatureReceiver {
3:      const string TASK_LOGGER_JOB_NAME = "TaskLogger";
4:      public override void FeatureInstalled (SPFeatureReceiverProperties properties) {
5:      }
6:   
7:      public override void FeatureUninstalling (SPFeatureReceiverProperties properties) {
8:      }
9:   
10:      public override void FeatureActivated (SPFeatureReceiverProperties properties) {
11:        SPSite site = properties.Feature.Parent as SPSite;
12:   
13:        // make sure the job isn't already registered
14:        foreach (SPJobDefinition job in site.WebApplication.JobDefinitions) {
15:          if (job.Name == TASK_LOGGER_JOB_NAME)
16:            job.Delete();
17:        }
18:   
19:        // install the job
20:        TaskLoggerJob taskLoggerJob = new TaskLoggerJob(TASK_LOGGER_JOB_NAME, site.WebApplication);
21:   
22:        SPMinuteSchedule schedule = new SPMinuteSchedule();
23:        schedule.BeginSecond = 0;
24:        schedule.EndSecond = 59;
25:        schedule.Interval = 5;
26:        taskLoggerJob.Schedule = schedule;
27:   
28:        taskLoggerJob.Update();
29:      }
30:   
31:      public override void FeatureDeactivating (SPFeatureReceiverProperties properties) {
32:        SPSite site = properties.Feature.Parent as SPSite;
33:   
34:        // delete the job
35:        foreach (SPJobDefinition job in site.WebApplication.JobDefinitions) {
36:          if (job.Name == TASK_LOGGER_JOB_NAME)
37:            job.Delete();
38:        }
39:      }
40:    }
41:  }

  Now... to get it working, all you need to do is:


  • Deploy the strongly named assembly to the GAC.
  • Reset IIS (required for SharePoint to "see" the new timer job in the GAC).
  • Create a feature specifying the receiver class and assembly that contains the event receivers.
  • Install the feature.
  • Activate the feature.
  This sample timer job assumes it's running within the context of a WSS v3 site that has a list created with the Tasks list template in the root web within the site collection (or, just create a Team Site at the root of your site collection).
  Once you activate the feature, it should show up on the Timer Job Definitions page in Central Administration / Operations. It won't appear in the Timer Job Status page until it's executed at least one time. Wait for five minutes or so (the schedule this sample is using) to see if it's running. You should start to see items showing up in the Tasks list in the root site in your site collection.
  Here's a Visual Studio 2005 solution that includes everything you need to create a custom timer job. Note that I used the technique I described in this article to modify the Visual Studio project to create the WSP file for me:
  » TaskLogger_CustomTimerJob.zip
  Or, you can use this Windows SharePoint Solution Package (*.WSP) to deploy the prebuilt timer job used in this article (handles steps 1-4 above):
  » AndrewConnell.TaskLoggerJob.zip (unpack the ZIP to get the WSP)
  To deploy the WSP file, simply add it to the solution store using STSADM (using the following command) and then deploy it to the desired site:
  stsadm –o addsolution –filename AndrewConnell.TaskLoggerJob.wsp
  Note: if you plan to test the timer job attached in that article, please make sure you also uninstall it. I just realized I never uninstalled mine and my Tasks list had over 30,000 items in it from the last few weeks. Oops! :)
  [Update 7/2/2007 @ 11p] Make sure you don't use visible Features when deploying your custom timer jobs as explained here in this post. The two code downloads in this article have been updated to reflect as such.
  [Update 4/8/2008 @ 12a] A Visual How-To I created on the subject of creating custom timer jobs was recently posted on MSDN. You can get more info here.
  [Update 5/1/2008 @ 730a] There is now an in-depth article on MSDN about creating custom timer jobs. If you have trouble please check this out as there is a ton of additional info here. Post: More Help on Creating Custom Timer Jobs

posted on Thursday, February 01, 2007 10:47 PM

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-380310-1-1.html 上篇帖子: 配置SharePoint门户网站的基本思路 下篇帖子: The Book: Real World SharePoint 2007
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表