MOSS中的计时器作业

简介:

这方面的文章园子里有几篇了,不过大家基本上都是参考了http://www.andrewconnell.com/blog/articles/CreatingCustomSharePointTimerJobs.aspx这篇文章,在此我也推荐大家仔细看下本文及文中涉及到的相关文章。工作中也遇到了类似的需求,在此也做个总结。

1.MOSS中已经提供了定时器的功能,我们要开发自己的定时器需要继承自SPJobDefinition类,在重写的Execute方法写自己的业务逻辑。我的需求是找出列表中符合条件的item,并做mail通知,代码如下:

using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.SharePoint.Administration;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Utilities;
namespace CaryTimer
{
    public class ListRemindEvent : SPJobDefinition
    {
        public ListRemindEvent() : base() { }

        public ListRemindEvent(string _timername, SPWebApplication _wp)
            : base(_timername, _wp, null, SPJobLockType.ContentDatabase)
        {
            this.Title = "TestTimer";
        }

        public override void Execute(Guid targetInstanceId)
        {    
                SPWebApplication webApp = this.Parent as SPWebApplication;
                SPContentDatabase contentDB = webApp.ContentDatabases[targetInstanceId];
                SPWeb web = contentDB.Sites[0].AllWebs[0];
                string sendTo = "";
                string mailTitle = "";
                string mailBody = "";
			 //实现自己业务逻辑,找出复合条件的并发mail做相关通知。
                SPUtility.SendEmail(web, false, false, sendTo, mailTitle, mailBody);                  
        }
     }
}

2.该类完成后我们使用Feature来部署该功能,我们写一个自己的安装类,如下:

using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Administration;

namespace CaryTimer
{
    public class ListRemindEventInstaller : SPFeatureReceiver
    {
        const string caryTimerName = "Testtimer";
        public override void FeatureInstalled(SPFeatureReceiverProperties properties)
        { }
        public override void FeatureUninstalling(SPFeatureReceiverProperties properties)
        { }
        public override void FeatureActivated(SPFeatureReceiverProperties properties)
        {
           SPSite site = properties.Feature.Parent as SPSite;
            foreach (SPJobDefinition job in site.WebApplication.JobDefinitions)
            {
	      //判断是否已存在
                if (job.Name == caryTimerName)
                {
                    job.Delete();
                }
            }
            ListRemindEvent timer = new ListRemindEvent(caryTimerName, site.WebApplication);
	    /下边是设置定时器的执行计划部分。
              SPMinuteSchedule schedule = new SPMinuteSchedule();
            schedule.BeginSecond = 0;
            schedule.EndSecond = 59;
            schedule.Interval = 1;
            timer.Schedule = schedule;
            timer.Update();
        }

        public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
        {
            SPSite site = properties.Feature.Parent as SPSite;
            foreach (SPJobDefinition job in site.WebApplication.JobDefinitions)
            {
                if (job.Name == caryTimerName)
                {
                    job.Delete();
                }
            }
        }
    }
}

3.需要在"c:\program files\common files\microsoft shared\web server extensions\12\Template\features"文件夹下建立CaryTimer文件夹,在该文件夹下建一个Feature.xml,代码如下:

<Feature 
  Id="6283ADA0-B882-47fe-8507-D8CC763DC320" 
  Title="CaryTimer" 
  Description=" CaryTimer  des" 
  Scope="Site" 
  Hidden="FALSE"   
  ReceiverAssembly="HelloWorld, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b38a04419cc857d9"
  ReceiverClass="HelloWorld.ListRemindEventInstaller"
  xmlns="http://schemas.microsoft.com/sharepoint/"> 
</Feature>

4.然后我们使用一个批处理来安装Feature,批处理代码如下:

@SET TEMPLATEDIR="c:\program files\common files\microsoft shared\web server extensions\12\Template"

@SET STSADM="c:\program files\common files\microsoft shared\web server extensions\12\bin\stsadm"

@SET GACUTIL="d:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\gacutil.exe"

Echo Installing HelloWorld.dll in GAC

%GACUTIL% -if bin\debug\HelloWorld.dll

Echo Copying files to TEMPLATE directory

xcopy /e /y TEMPLATE\* %TEMPLATEDIR%

Echo Installing feature

%STSADM% -o installfeature -filename HelloWorld\feature.xml -force

IISRESET

REM cscript c:\windows\system32\iisapp.vbs /a "SharePointDefaultAppPool" /r

5.项目完成后,我们要添加强命名密钥。部署成功后就可以在网站集功能中看见该Feature,激活该Feature后,在管理中心—操作—计时器作业定义中可以看见该定时器的相关信息,并且可以禁用和启用该定时器,在管理中心—操作—计时器作业状态中可以该定时器最后一次运行的情况。

6.如果我们要调试该定时器我们需要附加OwsTimer.exe进程,每次更改后需走以下步骤: 
6.1.使用批处理从新部署Feature 
6.2.先Deactivate feature, 然后activate feature. 
6.3.命令行:net stop SPTimerV3 
6.4.命令行:net start SPTimerV3 
6.5.Visual Studio: Attach to process: OWSTIMER.EXE

7.如果你在ListRemindEvent类中需要读取外部文件的配置,直接读web.config是读不到的,我们需要在c:/program files/common files/microsoft shared/…/12/bin目录里新建一个文件OwsTimer.exe.config,并做相关配置如下:

<configuration>
  <appSettings>
   <add key="key" value="value" />
  </appSettings>
</configuration>
然后用ConfigurationManager.AppSettings.Get("key"); 来取得这个值。
本文转自生鱼片博客园博客,原文链接:http://www.cnblogs.com/carysun/archive/2008/11/05/MOSSTimer.html,如需转载请自行联系原作者
相关文章
|
6天前
|
云安全 人工智能 安全
AI被攻击怎么办?
阿里云提供 AI 全栈安全能力,其中对网络攻击的主动识别、智能阻断与快速响应构成其核心防线,依托原生安全防护为客户筑牢免疫屏障。
|
15天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
10天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
617 215
|
存储 人工智能 监控
从代码生成到自主决策:打造一个Coding驱动的“自我编程”Agent
本文介绍了一种基于LLM的“自我编程”Agent系统,通过代码驱动实现复杂逻辑。该Agent以Python为执行引擎,结合Py4j实现Java与Python交互,支持多工具调用、记忆分层与上下文工程,具备感知、认知、表达、自我评估等能力模块,目标是打造可进化的“1.5线”智能助手。
859 61
|
8天前
|
人工智能 移动开发 自然语言处理
2025最新HTML静态网页制作工具推荐:10款免费在线生成器小白也能5分钟上手
晓猛团队精选2025年10款真正免费、无需编程的在线HTML建站工具,涵盖AI生成、拖拽编辑、设计稿转代码等多种类型,均支持浏览器直接使用、快速出图与文件导出,特别适合零基础用户快速搭建个人网站、落地页或企业官网。
1303 157
|
5天前
|
编解码 Linux 数据安全/隐私保护
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
244 138
|
7天前
|
存储 安全 固态存储
四款WIN PE工具,都可以实现U盘安装教程
Windows PE是基于NT内核的轻量系统,用于系统安装、分区管理及故障修复。本文推荐多款PE制作工具,支持U盘启动,兼容UEFI/Legacy模式,具备备份还原、驱动识别等功能,操作简便,适合新旧电脑维护使用。
539 109