sharepoint timer job 读取config文件内容
需要寫一個(gè)自定義的sharepoint timer job, 目的是要定時(shí)到Site Collection Images這個(gè)List里檢查圖片的過期日期,如果即將過期的話,需要發(fā)送email到相關(guān)的人員。
?
GOOGLE了一下,發(fā)現(xiàn)資料很少。不過幸運(yùn)的是我發(fā)現(xiàn)了 Andrew Connell的博客,上面有一個(gè)很詳細(xì)的示例代碼。http://www.andrewconnell.com/blog/articles/CreatingCustomSharePointTimerJobs.aspx
?
代碼的基本思路是:我們的自定義job類需要從SPJobDefinition繼承過來,并且要改寫幾個(gè)構(gòu)造體和一個(gè)Execute方法。其中不帶參數(shù)的默認(rèn)構(gòu)造體是必須的。
那么在Execute方法中怎么得到這個(gè)SPWebApplication對(duì)象呢?AC用了如下的代碼:
SPWebApplication webApplication = this.Parent as SPWebApplication;
用Parent屬性并且CAST成WebApplication對(duì)象, 這段我比較困擾,因?yàn)楦鶕?jù)SDK里的說明,本來就有一個(gè)WebApplication屬性可以用,為什么還要這么麻煩呢。我試了如下代碼
SPWebApplication webApplication = this.WebApplication;
測(cè)試結(jié)果發(fā)現(xiàn)完全等效。
?
?
好,這個(gè)類寫完以后,我們還要寫另外一個(gè)SPFeatureReceiver類。因?yàn)槲覀冃枰粋€(gè)Feature來把我們的Timer部署到服務(wù)器上去,通過Feature Activated/deactivated來觸發(fā)/關(guān)閉這個(gè)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();
??????????????? }
??????????? }
??????? }
這個(gè)SPDailySchedule對(duì)象讓我有些困擾,我現(xiàn)在理解是你要給定開始時(shí)間和結(jié)束時(shí)間,然后系統(tǒng)會(huì)隨機(jī)算出一個(gè)在兩者中間的時(shí)刻來啟動(dòng)這個(gè)工作。比如上面例子,那么每天運(yùn)行時(shí)間應(yīng)該是介于23:40:1 到23:59:1 之間, 不知道是不是這樣,不過我猜測(cè)應(yīng)該是如此。
?
代碼寫完了以后,還要寫一個(gè)Feature,這個(gè)Feature比較簡(jiǎn)單,就一個(gè)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裝好就好了,假如代碼沒有出錯(cuò)的話。
至于怎么Debug這個(gè)程序,走以下步驟:(有些步驟有時(shí)候可能不用,但是全用可以保證沒有問題,這個(gè)是我花了1天的時(shí)間得出的血的教訓(xùn))
(為了調(diào)試方面,把Schedule設(shè)置為SPMinuteSchedule,并且設(shè)置為每2分鐘運(yùn)行一次)
把Assembly DLL放到 GAC
命令行:iisreset
先Deactivate feature, 然后activate feature.
命令行:net stop SPTimerV3
命令行:net start SPTimerV3
Visual Studio: Attach to process: OWSTIMER.EXE
完。
?
還有一點(diǎn)要注意的是,如果你想在TimerJob類里面要從web.config文件得到一些值得話,我覺得是不可能的,至少我還沒有發(fā)現(xiàn)該怎么做,所以,假如代碼需要從外部取得一些信息的話,
解決辦法是 :在 C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN? 目錄里新建一個(gè)文件,文件名叫做:OwsTimer.exe.config,
<configuration>
? <appSettings>
?? <add key="YourKey" value="YourValue" />
? </appSettings>
</configuration>
然后用ConfigurationManager.AppSettings.Get("YourKey"); 來取得這個(gè)值。
記住每次修改代碼以后進(jìn)行調(diào)試前,一定要走上面說的步驟,特別是步驟4和5很容易被忘記,不然可能會(huì)遇到很莫名其妙的問題。
最后,happy SharePointING。
?
轉(zhuǎn)載于:https://www.cnblogs.com/luofeng99/archive/2011/11/14/2297806.html
總結(jié)
以上是生活随笔為你收集整理的sharepoint timer job 读取config文件内容的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java基础--面向对象以及相关知识
- 下一篇: java代码读取properties配置