MOSSでのタイマー作業

9307 ワード

この方面の文章は庭园にいくつかありますが、皆さんは基本的にhttp://www.andrewconnell.com/blog/articles/CreatingCustomSharePointTimerJobs.aspxの文章を参考にしています.ここでは、本文と文の中で関连する文章をよく読むことをお勧めします.仕事中にも似たような需要がありました.ここでまとめてみます.
1.MOSSではタイマーの機能を提供しています.自分のタイマーを開発するにはSPJobDefinition類から継承し、書き換えたExecute方法で自分の業務ロジックを書く必要があります.私の需要はリストの中で条件に合うアイテムを探してメールで通知します.コードは以下の通りです.
using System;

using System.Collections.Generic;

using System.Text;

using Microsoft.SharePoint.Administration;

using Microsoft.SharePoint;

using Microsoft.SharePoint.Utilities;

namespace CaryTimer

{

    public class ListRemindEvent : SPJobDefinition

    {

        public ListRemindEvent() : base() { }



        public ListRemindEvent(string _timername, SPWebApplication _wp)

            : base(_timername, _wp, null, SPJobLockType.ContentDatabase)

        {

            this.Title = "TestTimer";

        }



        public override void Execute(Guid targetInstanceId)

        {    

                SPWebApplication webApp = this.Parent as SPWebApplication;

                SPContentDatabase contentDB = webApp.ContentDatabases[targetInstanceId];

                SPWeb web = contentDB.Sites[0].AllWebs[0];

                string sendTo = "";

                string mailTitle = "";

                string mailBody = "";

			 //        ,         mail     。

                SPUtility.SendEmail(web, false, false, sendTo, mailTitle, mailBody);                  

        }

     }

}
2.このクラスが完成したら、私達はFeatureを使ってこの機能を展開します.私達は自分のインストールクラスを書きます.
using System;

using System.Collections.Generic;

using System.Text;

using Microsoft.SharePoint;

using Microsoft.SharePoint.Administration;



namespace CaryTimer

{

    public class ListRemindEventInstaller : SPFeatureReceiver

    {

        const string caryTimerName = "Testtimer";

        public override void FeatureInstalled(SPFeatureReceiverProperties properties)

        { }

        public override void FeatureUninstalling(SPFeatureReceiverProperties properties)

        { }

        public override void FeatureActivated(SPFeatureReceiverProperties properties)

        {

           SPSite site = properties.Feature.Parent as SPSite;

            foreach (SPJobDefinition job in site.WebApplication.JobDefinitions)

            {

	      //       

                if (job.Name == caryTimerName)

                {

                    job.Delete();

                }

            }

            ListRemindEvent timer = new ListRemindEvent(caryTimerName, site.WebApplication);

	    /               。

              SPMinuteSchedule schedule = new SPMinuteSchedule();

            schedule.BeginSecond = 0;

            schedule.EndSecond = 59;

            schedule.Interval = 1;

            timer.Schedule = schedule;

            timer.Update();

        }



        public override void FeatureDeactivating(SPFeatureReceiverProperties properties)

        {

            SPSite site = properties.Feature.Parent as SPSite;

            foreach (SPJobDefinition job in site.WebApplication.JobDefinitions)

            {

                if (job.Name == caryTimerName)

                {

                    job.Delete();

                }

            }

        }

    }

}
3.「c:\program files\common files\microsoff shared\web server extens\12\Template\feature s」フォルダの下にCaryTimerフォルダを作成し、このフォルダの下にFeature.xmlを構築する必要があります.コードは以下の通りです.
<Feature 

  Id="6283ADA0-B882-47fe-8507-D8CC763DC320" 

  Title="CaryTimer" 

  Description=" CaryTimer  des" 

  Scope="Site" 

  Hidden="FALSE"   

  ReceiverAssembly="HelloWorld, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b38a04419cc857d9"

  ReceiverClass="HelloWorld.ListRemindEventInstaller"

  xmlns="http://schemas.microsoft.com/sharepoint/"> 

</Feature>
4.そして一括処理を使ってFeatureをインストールします.バッチコードは以下の通りです.
@SET TEMPLATEDIR=「c:\program files\common files\microsoff shared\web server extensions\12\Template」
@SET STSADM=「c:\program files\common files\microsoff shred\web server extens\12\bin\stsadm」
@SET GACUTIL=「d:\Program Files\Microsoft Visual Studio 8\SDK\v 2.0\Bin\gacutil.exe」
Echo Installing Hello World.dll in GAC
%GACUTIL%-if bin\debug\Hello World.dll
Echo Copying files to TEMPLATE directory
xcopy/e/y TEMPLATE\*%TEMPLATEDIR%
Echo Installing feature
%STSADM%-o installfeature-filename Hello World\feature.xml-force
IISRESET
REM cscript c:\windows\system 32\iisap.vbs/a「Share PointDefault AppPool」/r
5.プロジェクトが完了したら、ネーミング鍵を強化します.配置が成功したら、ウェブサイトのセット機能でFeatureを見ることができ、このFeatureをアクティブにした後、管理センター-操作-タイマージョブ定義にこのタイマーの関連情報が見られ、このタイマーを無効にして有効にすることができます.管理センター-操作-タイマー作業状態でこのタイマーが最後に動作する場合があります.
6.このタイマーをデバッグするなら、Owstramer.exeプロセスを追加して、毎回変更した後、以下のステップを実行します.6.1.バッチ処理を使って、新しい展開からFeature 6.2.先にDeactivate featureを追加して、その後、activate feature.6.3.コマンドライン:net stup SPTimer 6.4.コマンドライン:net start SPTimer 6.5.EXacter
7.ListRemindEventクラスで外部ファイルを読み込む構成が必要であれば、web.co.figを直接読むことはできません.c:/program files/common files/microsoff shred/12/binディレクトリに新しいファイルOwTimer.exe.com figを作成し、関連した構成を以下のようにします.
<configuration>

  <appSettings>

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

  </appSettings>

</configuration>

   ConfigurationManager.AppSettings.Get("key");       。