日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

sharepoint timer job 读取config文件内容

發布時間:2024/7/5 编程问答 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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文件内容的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。