3

タイマージョブを作成しています。そして、私はサイトに保存されている私のソリューションにあるいくつかのリストにアクセスする必要があります: "http:// server:9090 / sites / thesite"

今のところ、私のタイマージョブではこれを使用しています:

 SPWebApplication webApplication = this.Parent as SPWebApplication;
 SPContentDatabase contentDb = webApplication.ContentDatabases[contentDbId];

 SPList ParametresTech = contentDb.Sites["sites/thesite"].RootWeb.Lists[Constantes.Listes.PARAMETRES_TECHNIQUES.Name];

ここで直面している問題は、開発環境にいることです。ソリューションを本番環境に展開するために使用するサイトのURLがわかりません。

では、サイトの名前を知らなくてもリストにアクセスする方法はありますか?

ありがとう

編集:それはタイマージョブがアクティブ化される方法です:

public override void FeatureActivated(SPFeatureReceiverProperties properties)
    {
        string ListJobName = "SAPToSQL";


        SPSite site = properties.Feature.Parent as SPSite;
        // make sure the job isn't already registered
        foreach (SPJobDefinition job in site.WebApplication.JobDefinitions)
        {
            if (job.Name == ListJobName)
                job.Delete();
        }
        // install the job
        TimerJobSAPToSP listLoggerJob = new TimerJobSAPToSP(ListJobName, site.WebApplication);
        SPHourlySchedule schedule = new SPHourlySchedule();
        schedule.BeginMinute = 0;
        schedule.EndMinute = 59;
        listLoggerJob.Schedule = schedule;
        listLoggerJob.Update();
    }
4

1 に答える 1

2

URLではなくタイマージョブを作成する機能IDを使用して、サイトコレクションを確実に識別します。これにより、サイトに柔軟に名前を付けることができるだけでなく、それぞれがジョブにサブスクライブしている複数のサイトコレクションを処理することもできます。

タイマージョブのサイトコレクションを収集するために、次のユーティリティメソッドを作成しました。

public static List<Guid> GetSiteIDs(SPWebApplication webApplication, Guid featureId)
{
    List<Guid> ids = new List<Guid>();
    foreach (SPSite site in webApplication.Sites)
    {
        try
        {
            if (SPSite.Exists(new Uri(site.Url)) 
                && null != site.Features[featureId])
            {
                try
                {
                    ids.Add(site.ID);
                }
                catch (Exception ex)
                {
                    // Handle Exception
                }
            }
        }
        finally
        {
            site.Dispose();
        }
    }
    return ids;
}

featureIdパラメーターで、ジョブ定義クラスで宣言する定数を渡します。

詳細については、以下を参照してください。アクティブ化された機能の範囲カスタムSharepoint-タイマージョブ

于 2012-06-18T16:47:20.080 に答える