SharePoint 开发TimerJob 介绍

       项目需要写TimerJob,以前也大概知道原理,不过,开发过程中,还是遇到一些问题,网上看了好多博客,也有写的灰常好的,不过,自己还是想再写一下,也算是给自己一个总结,也算给大家多一个参考吧。

       TimerJob项目结构,主要有两个Class,一个是用来定义TimerJob功能的,一个是用来部署开发好的TimerJob的,分别继承两个不同的类。如下图,先建一个如下结构的项目:

clip_image001

 

文件描述:

TimerJob定义类:ModifyTitle.cs(继承自SPJobDefinition)

TimerJob安装类:ModifyTitleInstall.cs(继承自SPFeatureReceiver)

激活TimerJob的Feature.xml

添加强命名,因为将来生成的dll是要放到GAC里面去的

 

添加引用:

引用Microsoft.SharePoint.dll文件,两个Class都需要添加下面命名空间

using Microsoft.SharePoint;

using Microsoft.SharePoint.Administration;

 

ModifyTitleInstall

public class ModifyTitleInstall : SPFeatureReceiver

{

const string TimerJobName = "ModifyTitleTimerJob";//TimerJob的标题

//激活TimerJob的方法

public override void FeatureActivated(SPFeatureReceiverProperties properties)

{

SPSite site = properties.Feature.Parent as SPSite;

foreach (SPJobDefinition job in site.WebApplication.JobDefinitions)

{

//如果有相同的TimerJob,先删除

if (job.Title == TimerJobName)

{

job.Delete();

}

}

ModifyTitle modifyTitle = new ModifyTitle(TimerJobName, site.WebApplication);

SPMinuteSchedule minuteSchedule = new SPMinuteSchedule();//计时器对象

minuteSchedule.BeginSecond = 0;

minuteSchedule.EndSecond = 59;

minuteSchedule.Interval = 1;

modifyTitle.Schedule = minuteSchedule;

modifyTitle.Update();

//throw new NotImplementedException();

}

public override void FeatureDeactivating(SPFeatureReceiverProperties properties)

{

SPSite site = properties.Feature.Parent as SPSite;

foreach (SPJobDefinition job in site.WebApplication.JobDefinitions)

{

if (job.Title == TimerJobName)

{

job.Delete();

}

}

//throw new NotImplementedException();

}

public override void FeatureInstalled(SPFeatureReceiverProperties properties)

{

//throw new NotImplementedException();

}

public override void FeatureUninstalling(SPFeatureReceiverProperties properties)

{

//throw new NotImplementedException();

}

 

ModifyTitle

public class ModifyTitle : SPJobDefinition

{

public ModifyTitle():base(){}

public ModifyTitle(string TimerName, SPWebApplication webapp) : base(TimerName, webapp, null, SPJobLockType.ContentDatabase)

{

//TimerJob的标题

this.Title = "定期修改Title的TimerJob";

}

public override void Execute(Guid targetInstanceId)

{

SPWebApplication webapp = this.Parent as SPWebApplication;

SPContentDatabase contentDB=webapp.ContentDatabases[targetInstanceId];

foreach (SPItem item in contentDB.Sites[0].RootWeb.Lists["TimerJob"].Items)

{

DateTime dt = Convert.ToDateTime(item["创建时间"].ToString());

item["标题"] = "今天是这个月的第" + dt.Day.ToString() + "天";

item.Update();

}

//base.Execute(targetInstanceId);

}

}

 

Feature.xml(Id是需要重新生成的Guid)

<?xml version="1.0" encoding="utf-8" ?>

<Feature xmlns="http://schemas.microsoft.com/sharepoint/"

Id="f0c813e8-68e0-4ad2-82cd-292b1b7222cd"

Title="Modify Title Timer Job"

Description="Modify Title Timer Job"

Scope="Site"

Hidden="TRUE"

Version="1.0.0.0"

ReceiverAssembly="TimerJob, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f7436af6afb9480b"

ReceiverClass="TimerJob.ModifyTitleInstall">

</Feature>

 

添加结果:

clip_image003

 

运行结果:无论标题是什么,都改成今天是这个月的第N天。

clip_image005

 

添加配置文件:

<?xml version="1.0" encoding="utf-8" ?>

<configuration>

<appSettings>

<add key="AAString" value="http://localhost"/>

</appSettings>

</configuration>

 

获取配置文件:

string AAString = ConfigurationManager.AppSettings.Get("AAString");

注:配置文件格式不对的话,可能造成Timer服务启动错误,所以,可以拷一个控制台程序debug下面的Consoleapp.exe.config文件,然后改成OWSTIMER.exe.config,然后放到12/bin(C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\BIN)下就可以了

 

部署TimerJob脚本:

@echo off

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

Echo Copying files to TEMPLATES directory

xcopy /e /y 12\TEMPLATE\* %TEMPLATE%

Echo Copying TimerJob.dll to GAC

"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\gacutil.exe" -if bin\TimerJob.dll

iisreset

"C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\bin\stsadm" -o installfeature -filename TimerJob\feature.xml -force

"C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\bin\stsadm" -o deactivatefeature -filename TimerJob\feature.xml -url http://localhost -force

"C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\bin\stsadm" -o activatefeature -filename TimerJob\feature.xml -url http://localhost -force

net stop SPTimerV3

net start SPTimerV3

PAUSE

注:新的TimerJob运行一定要重启SPTimerV3服务,在windows服务里面,如下图:

clip_image007

调试:TimerJob程序和WebPart等SharePoint程序,运行的进程不一样,如果需要调试,需要重新安装TimerJob,然后附加到SharePoint计时器进程(下图),进行调试!

clip_image008

体会:

       开发完TimerJob感觉,和SharePoint的东西有一样的特点,就是代码开发比较简单,但是杂七杂八的事情很多,部署、调试起来比较麻烦,而且非常需要细心,如果其间遇到各种bug,可以建议重启下机器(我就是头天晚上,各种报错,转天就好了)。

       还有就是,我的代码是SharePoint2007环境开发的,如果在2010或者更高版本,代码基本是类似的,注意目录即可,部署方式可能需要PowerShell,可以网上查一下。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/438802.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【转】如何写出让同事无法维护的代码

译者&#xff1a;陈皓 &#xff08;左耳朵耗子&#xff09; 译文&#xff1a;http://coolshell.cn/articles/4758.html 对&#xff0c;你没看错&#xff0c;本文就是教你怎么写出让同事无法维护的代码。 一、程序命名 容易输入的变量名。比如&#xff1a;Fred&#xff0c;as…

linux php环境搭建 图文教程,linux php环境搭建教程

1) 安装依赖包yum -y install wget vim pcre pcre-devel openssl openssl-devel \libicu-devel gcc gcc-c autoconf libjpeg libjpeg-devel libpng \libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib \zlib-devel glibc glibc-devel glib2 glib2-devel ncurse…

【转】The password supplied with the username Domain\UserName was not correct. AD密码定期更换

起因 今天想进入SharePoint 2013 Central Administration创建一个WebApplication&#xff0c;尽然发生了错误&#xff1a; The password supplied with the username Domain\UserName was not correct. Verify that it was entered correctly and try again 具体如下图&#x…

XHR简介

在XHR诞生前&#xff0c;网页要获取客户端和服务器的任何状态更新&#xff0c;都需要刷新一次&#xff0c;在XHR诞生后就可以完全通过JS代码异步实现这一过程。XHR的诞生也使最初的网页制作转换为开发交互应用&#xff0c;拉开了WEB2.0的序幕。 XHR是一种浏览器API&#xff0…

织梦php echo 调用金币,dedecms实现任意页面调用当前会员信息的方法

文实例讲述了dedecms实现任意页面调用当前会员信息的方法。分享给大家供大家参考。具体实现方法如下&#xff1a;1、在你需要调用的页面里面之间加入代码如下:function CheckInfo(){var taget_obj document.getElementByIdx_x(_userinfo);myajax new DedeAjax(taget_obj,fals…

第一节: Timer的定时任务的复习、Quartz.Net的入门使用、Aop思想的体现

一. 前奏-Timer类实现定时任务 在没有引入第三方开源的定时调度框架之前&#xff0c;我们处理一些简单的定时任务同时都是使用Timer类&#xff0c; DotNet中的Timer类有三个&#xff0c;分别位于不同的命名空间下&#xff0c;分别是&#xff1a; ①.位于System.Windows.Forms里…

php 自动验证类,Thinkphp实现自动验证和自动完成

这篇文章主要介绍了Thinkphp实现自动验证和自动完成的相关资料,需要的朋友可以参考下Thinkphp的自动验证和自动完成都是根所表单提交的内容来的&#xff0c;对部分数据进行规则验证和处理后插入到数据库。1、自动验证格式&#xff1a;array(array(验证字段1,验证规则,错误提示,…

第二节:比较DateTime和DateTimeOffset两种时间类型并介绍Quartz.Net中用到的几类时间形式(定点、四舍五入、倍数、递增)

一. 时间的类型 1. 背景 这里为什么要介绍时间类型呢&#xff0c;明明是定时调度篇&#xff0c;原因是在定时任务中&#xff0c;任务什么时间开始执行&#xff0c;什么时间结束执行&#xff0c;要用到各种各样的时间模式&#xff0c;虽然这不能算是一个复杂的问题&#xff0c;但…

PHP中英文截取函数,php字符串截取函数,支持中英文混体

php字符串截取函数,支持中英文混体,以前我们截取字符串都会用php自带的函数,今天我来看一下一款字符串截取函数,支持中英文混体的php代码实例吧.php字符串截取函数代码如下:function cutstr($string, $sublen10, $start 0, $code utf-8){if($code utf-8){$pa "/[x01-x…

第三节: Quartz.Net五大构件之Scheduler(创建、封装、基本方法等)和Job(创建、关联等)

一. 五大构件 引言&#xff1a; Quartz.Net的五大构件 1. 调度器&#xff1a;Scheduler 2. 作业任务&#xff1a;Job 3. 触发器&#xff1a; Trigger 4. 线程池&#xff1a; SimpleThreadPool 5. 作业持久化&#xff1a;JobStore 二. Scheduler详解 1. 创建Scheduler的两…

创建phpinfo.php,如何创建phpinfo查看php信息

用户提问如何创建phpinfo查看php信息&#xff1f;To create the file simply add the following lines of code to a blank document and name the file phpinfo.php 创建一个简单的文本文档并命名为phpinfo.php<?phpphpinfo ();?>Save the file as phpinfo.php and pl…

第四节: Quartz.Net五大构件之Trigger通用用法(常用方法、优先级、与job关联等)

一. 简介 1. 几个类型&#xff1a; ①&#xff1a;TriggerBuilder&#xff1a;用来创建ITrigger实例 ②&#xff1a;ITrigger&#xff1a;触发器实例 2.常用的几个方法 ①.StartNow&#xff1a;Trigger马上触发. ②.StartAt和EndAt&#xff1a;设置Trigger触发的开始时间和结…

php键值对数组排序,PHP按指定键值对二维数组进行排序的方法_PHP

本文实例讲述了PHP按指定键值对二维数组进行排序的方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;问题&#xff1a;有数组&#xff1a;代码如下:array(0>array(id>1,price>50),1>array(id>2,price>60));要求根据数组的price这个字段进行排序。…

oracle 10g中没有refhost.xml,解决win7 安装oracle10g的问题

当你使用win7安装oracle10g&#xff0c;很可能显示相关oraparam.ini相关的异常&#xff0c;导致无法继续安装oracle10g&#xff0c;可以通过以下步骤方式来安装&#xff0c;至于安装oracle后的稳定性&#xff0c;目前无法认证&#xff0c;只有发现问题后&#xff0c;才可下结论…

第五节: Quartz.Net五大构件之Trigger的四大触发类

一. WithSimpleSchedule&#xff08;ISimpleTrigger&#xff09; 1. 用途&#xff1a;时、分、秒上的轮询(和timer类似)&#xff0c;实际开发中&#xff0c;该场景占绝大多数. 2. 轮询的种类&#xff1a;永远轮询和限定次数轮询. 3. 参数中的几个函数&#xff1a; A.执行间隔…

oracle-物理模型实现,生产电算系统的设计与开发(JSP,Oracle)

生产电算系统的设计与开发(,Oracle)(任务书,开题报告,中期检查表,文献综述,外文翻译,毕业论文9500字,程序代码,Oracle数据库,答辩PPT)本系统是基于B/S模型的&#xff0c;采用Myeclipse集成开发环境&#xff0c;以JAVA作为开发语言&#xff0c;数据库则是采用Oracle实现数据的存…

第六节: 六类Calander处理六种不同的时间场景

背景介绍及其使用 该章节主要补充介绍&#xff0c;在前一章四类触发器的基础上配合六大Canlander来动态删减某些时间&#xff0c;来满足更多的应用场景。 1. DailyCalendar&#xff1a;动态排除某天的某些字段. &#xff08;需求&#xff1a;每天8-23点执行,每隔1s执行一次,但…

修改oracle rac sid,修改Oracle RAC的_asm_hbeatiowait的方法

一、提问修改Oracle RAC的_asm_hbeatiowait的方法&#xff1f;二、回答答&#xff1a;11.2.0.3与11.2.0.4版本均合入了ASM磁盘heartbeat超时参数&#xff0c;默认数据为15s&#xff0c;某些情况下(主引擎掉电、控制器接管、链路切换)存储切换时间超过15s&#xff0c;会导致数据…

第七节:Trigger(SimpleTrigger、CronTrigger)哑火(MisFire)策略 :

一. 简介 1. 什么是哑火 由于某些原因导致触发器(trigger)在该触发的时候没有得到触发,后续对应的解决策略即为哑火策略。(个人理解) 2. 哑火触发的条件 ①&#xff1a;所有的工作线程都在忙碌&#xff0c;导致某些trigger得不到触发.(如&#xff1a;simplethreadpool 默认是…

matlab 填充斜线,请教一个关于柱状图的问题--填充采用斜线之类的,不能是颜色...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼endif ratiow*pwidth > bwidthbigpattern(:,bwidth1:end) [];endbigpattern repmat(bigpattern,[1 1 3]);color (bits(:,:,1) colorval(1)) & ...(bits(:,:,2) colorval(2)) & ...(bits(:,:,3) colorval(3));colo…