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
總結
以上是生活随笔為你收集整理的sharepoint timer job 读取config文件内容的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java基础--面向对象以及相关知识
- 下一篇: java代码读取properties配置