sharepoint timer job 读取config文件内容

需要写一个自定义的sharepoint timer job, 目的是要定时到Site Collection Images这个List里检查图片的过期日期,如果即将过期的话,需要发送email到相关的人员。

 

GOOGLE了一下,发现资料很少。不过幸运的是我发现了 Andrew Connell的博客,上面有一个很详细的示例代码。http://www.andrewconnell.com/blog/articles/CreatingCustomSharePointTimerJobs.aspx

 

代码的基本思路是:我们的自定义job类需要从SPJobDefinition继承过来,并且要改写几个构造体和一个Execute方法。其中不带参数的默认构造体是必须的。

那么在Execute方法中怎么得到这个SPWebApplication对象呢?AC用了如下的代码:

SPWebApplication webApplication = this.Parent as SPWebApplication;

用Parent属性并且CAST成WebApplication对象, 这段我比较困扰,因为根据SDK里的说明,本来就有一个WebApplication属性可以用,为什么还要这么麻烦呢。我试了如下代码

SPWebApplication webApplication = this.WebApplication;

测试结果发现完全等效。

 

 

好,这个类写完以后,我们还要写另外一个SPFeatureReceiver类。因为我们需要一个Feature来把我们的Timer部署到服务器上去,通过Feature Activated/deactivated来触发/关闭这个TimerJob。

 

public override void FeatureActivated(SPFeatureReceiverProperties properties)

        {

 

            SPSite site = properties.Feature.Parent as SPSite;

            SPWeb web = site.RootWeb;

           

            // make sure the job isn't already registered

            foreach (SPJobDefinition job in site.WebApplication.JobDefinitions)

            {

                if (job.Name == "ImageValidationCheckerJob")

                {

                    job.Delete();

                }

            }

            // install the job

            ImageValidationCheckerJob imageValidationCheckerJob = new ImageValidationCheckerJob("ImageValidationCheckerJob", site.WebApplication);

            SPDailySchedule schedule = new SPMonthlySchedule();

            schedule.BeginHour = 23;

            schedule.BeginMinute = 40;

            schedule.BeginSecond = 1;           

            schedule.EndHour = 23;

            schedule.EndMinute = 59;

            schedule.EndSecond = 1;

 

            imageValidationCheckerJob.Schedule = schedule;

            imageValidationCheckerJob.Update();

        }

 

public override void FeatureDeactivating(SPFeatureReceiverProperties properties)

        {

            SPSite site = properties.Feature.Parent as SPSite;

           

            // delete the job

            foreach (SPJobDefinition job in site.WebApplication.JobDefinitions)

            {

                if (job.Name == "ImageValidationCheckerJob")

                {

                    job.Delete();

                }

            }

        }

这个SPDailySchedule对象让我有些困扰,我现在理解是你要给定开始时间和结束时间,然后系统会随机算出一个在两者中间的时刻来启动这个工作。比如上面例子,那么每天运行时间应该是介于23:40:1 到23:59:1 之间, 不知道是不是这样,不过我猜测应该是如此。

 

代码写完了以后,还要写一个Feature,这个Feature比较简单,就一个XML文件

Feature.xml:

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

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

         Id="1F481C17-4FDA-4919-A64A-EAE5C1301B4B"

         Title="Image Validation Checker"

         Description="If any images in the top level site colleciton images are expiring soon,email relative person."

         Scope="Site"

         Hidden="TRUE"

         Version="1.0.0.0"

         ReceiverAssembly="TimerJobControl, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f2aef6a9088f714f"

ReceiverClass="TimerJobControl.ImageValidationCheckerJobInstaller">

</Feature>

 

剩下的就是把feature装好就好了,假如代码没有出错的话。

至于怎么Debug这个程序,走以下步骤:(有些步骤有时候可能不用,但是全用可以保证没有问题,这个是我花了1天的时间得出的血的教训)

(为了调试方面,把Schedule设置为SPMinuteSchedule,并且设置为每2分钟运行一次)

把Assembly DLL放到 GAC
命令行:iisreset
先Deactivate feature, 然后activate feature.
命令行:net stop SPTimerV3
命令行:net start SPTimerV3
Visual Studio: Attach to process: OWSTIMER.EXE
完。
 

还有一点要注意的是,如果你想在TimerJob类里面要从web.config文件得到一些值得话,我觉得是不可能的,至少我还没有发现该怎么做,所以,假如代码需要从外部取得一些信息的话,

解决办法是 :在 C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN  目录里新建一个文件,文件名叫做:OwsTimer.exe.config,

<configuration>

  <appSettings>

   <add key="YourKey" value="YourValue" />

  </appSettings>

</configuration>

然后用ConfigurationManager.AppSettings.Get("YourKey"); 来取得这个值。

记住每次修改代码以后进行调试前,一定要走上面说的步骤,特别是步骤4和5很容易被忘记,不然可能会遇到很莫名其妙的问题。

最后,happy SharePointING。

 

转载于:https://www.cnblogs.com/luofeng99/archive/2011/11/14/2297806.html

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

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

相关文章

计算机网络学习笔记-1.1.4-时延、 时延带宽积、RTT和利用率

计算机网络-2019 王道考研 计算机网络-1.1.4-时延、 时延带宽积、RTT和利用率 文章目录4-时延、 时延带宽积、RTT和利用率4.1时延--》我得小饼干你怎么还没来&#xff1f;4.2时延带宽积--》小饼干&#xff1f;小浣熊&#xff1f;好多好多2234.3往返时延RTT--》草&#xff08;一…

poj 搜索题分类

转自&#xff1a;http://www.cnblogs.com/hpustudent/archive/2011/08/21/2147582.html 简单搜索(1)深度优先搜索 (poj2488,poj3009,poj1321)(2)广度优先搜索 (poj3278,poj1426,poj3126,poj3087.poj3414,poj2251,poj3083)(3)简单搜索技巧和剪枝(poj2531,poj1416,poj2676,1129) …

2022年十大AI预测

来源&#xff1a;福布斯编辑&#xff1a;蒲蒲1 语言AI将成为核心&#xff0c;与其他类别的AI相比&#xff0c;更多的初创公司将在NLP&#xff08;自然语言处理&#xff09;领域获得资金。语言是人类最重要的发明。与其他属性相比&#xff0c;它是人类智力的决定性标志。语言…

AI 真的能够理解人类语言吗?

来源&#xff1a;CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;作者&#xff1a;Melanie Mitchell译者&#xff1a;弯月2011年&#xff0c;IBM 的人工智能系统沃森参加综艺节目《危险边缘》&#xff0c;并获得了冠军&#xff0c;当时他们宣称&#xff1a;“沃森能够理解…

第一周(小学期)

2个月之前就安装了JDK12和eclipse&#xff0c;安装的过程现在还记得还很清&#xff0c;下载删除了3,4次后来才弄好了&#xff0c;一直是eclipse不能用&#xff0c;后来改了一下eclipse.ini中的东西才搞好。JAVA的一些语法也是之前看过&#xff0c;但由于一直没用&#xff0c;所…

计算机网络学习笔记-1.1.5-分层结构、协议、接口、服务

计算机网络-2019 王道考研 计算机网络-1.1.5-分层结构、协议、接口、服务 文章目录5-分层结构、协议、接口、服务5.1分层结构5.1.1为什么要分层&#xff1f;5.2怎么分层呢&#xff1f;--》论千层饼的做法&#xff1f;5.2.1正式认识下&#xff0c;我叫分层结构&#xff0c;协议接…

操作系统学习笔记-2.1.1.进程的定义、组成、组织方式、特征

操作系统学习笔记-2019 王道考研 操作系统-2.1.1.进程的定义、组成、组织方式、特征 文章目录2.1.1.进程的定义、组成、组织方式、特征1.1知识概览1.2进程的定义1.3进程的组成1.4进程的组织1.5进程的特征1.6小结2.1.1.进程的定义、组成、组织方式、特征 1.1知识概览 1.2进程的…

向人类再进一步|MIT×UMich探索可以理解物体空间关系的人工智能

研究人员开发的框架可以根据物体空间关系的文本描述生成场景图像。来源&#xff1a;AI科技评论作者&#xff1a;莓酊编辑&#xff1a;青暮人类在描述场景时&#xff0c;经常描述物体之间的空间关系。生物视觉识别涉及自上而下通路和自下而上通路的交互&#xff0c;而深度神经网…

多mysql实例下开发需要注意主从同步延迟

今天晚上服务器上线测试&#xff0c;遇到了一个问题&#xff01; 往数据库写了一条数据之后&#xff0c;再读取该记录&#xff0c;居然读不出来&#xff0c;报空指针。十分费解&#xff0c;喊来开发组长定位问题。他的解释是&#xff1a;写操作用的是主库&#xff0c;而读操作用…

​人工智能和机器学习中数据集的 3 个大问题

来源&#xff1a;ScienceAI编辑&#xff1a;绿萝数据集为 AI 模型提供燃料&#xff0c;例如汽油&#xff08;或电力&#xff09;为汽车提供燃料。无论他们的任务是生成文本、识别对象还是预测公司的股价&#xff0c;人工智能系统都通过筛选无数示例来识别数据中的模式来「学习」…

操作系统学习笔记-2.1. 2进程的状态与转换

操作系统学习笔记-2019 王道考研 操作系统-2.1. 2进程的状态与转换 文章目录2进程的状态与转换2.1知识概览2.2进程的状态-三种基本状态2.3进程的状态-另外两种状态2.4进程状态的转换2.5思维导图2进程的状态与转换 2.1知识概览 2.2进程的状态-三种基本状态 2.3进程的状态-另外两…

【笔试面试】C#中的程序集

1. C#中的程序集&#xff08;Assembly&#xff09; 答&#xff1a;程序集是包含一个或多个类型定义文件和资源文件的集合。它允许我们分离可重用类型的逻辑表示和物理表示。 程序集是一个可重用、可实施版本策略和安全策略的单元。它允许我们将类型和资源划分到不同的文件…

热力学第二定律中的悖论 | 集智百科

来源 :集智百科目录一、起源二、时间之箭三、动力系统四、波动定理五、大爆炸六、编者推荐七、百科项目志愿者招募洛斯密特悖论&#xff0c;也被称为可逆性悖论&#xff0c;不可逆性悖论&#xff0c;或者说是一种反对意见&#xff0c;它认为不可能从时间对称的动力学中推导出一…

操作系统学习笔记-2.1.3进程控制

操作系统学习笔记-2019 王道考研 操作系统-2.1.3进程控制 文章目录3.进程控制3.1知识概览3.2 基本概念3.2.1什么是进程控制&#xff1f;3.2.2如何实现进程控制&#xff1f;3.3进程控制相关的原语3.4思维导图3.进程控制 3.1知识概览 3.2 基本概念 3.2.1什么是进程控制&#xf…

消息队列---消息模型及使用场景

消息队列 消息对列是一个存放消息的容器&#xff0c;当我们需要消息的时候就从消息队列中取出消息使用。消息队列是分布式系统中重要的组件&#xff0c;使用消息队列的目的是为了通过异步处理提高系统的性能和削峰值&#xff0c;降低系统的耦合性。目前使用较多的消息队列有Act…

谷歌机器智能大牛:AI模型要真正理解人类语言,关键是「序列学习」

来源&#xff1a;新智元编辑&#xff1a;David如果计算机给了你所有正确的答案&#xff0c;是否意味着它和你一样了解世界&#xff1f;这是人工智能科学家几十年来一直争论不休的谜题。随着深度神经网络在与语言相关的任务中取得了令人瞩目的进步&#xff0c;关于理解、意识和真…

操作系统学习笔记-2.1.4进程通信

操作系统学习笔记-2019 王道考研 操作系统-2.1.4进程通信 文章目录4进程通信4.1知识总览4.2前置知识&#xff1a;什么是进程通信&#xff1f;4.3共享存储4.4 管道通信4.5消息传递4.6小结4进程通信 4.1知识总览 4.2前置知识&#xff1a;什么是进程通信&#xff1f; 4.3共享存储…

滴水课后作业(1-5)

滴水2015-01-12 1、231 成立吗&#xff1f;说明理由。 解题&#xff1a;上面式子由 3个符号组成,那么起码得用3进制以上的进制表示 三进制&#xff1a;2&#xff08;0&#xff09;&#xff0c;3&#xff08;1&#xff09;&#xff0c;1&#xff08;2&#xff09;   012不成立…

李德毅院士《探索新一代人工智能产业发展》

来源&#xff1a;AI城市智库中国工程院院士、CAAI名誉理事长、主线科技首席科学家李德毅作为大会嘉宾登台发表重磅演讲&#xff1a;《探索新一代人工智能产业发展》&#xff0c;就新一代人工智能的发展历史、产业现状、突破核心以及智能时代的中国方案发表了精彩观点。以下为李…

操作系统学习笔记-2.1.5线程概念和多线程模型

操作系统学习笔记-2019 王道考研 操作系统-2.1.5线程概念和多线程模型 文章目录5线程概念和多线程模型5.1知识概览5.2 什么是线程&#xff1f;为什么要引入线程&#xff1f;5.3引入线程及之后&#xff0c;有什么变化&#xff1f;5.4线程的属性5.5线程的实现方式5.6多线程模型5.…