如何从计时器作业访问网站中的列表

时间:2012-06-18 11:49:15

标签: sharepoint timer-jobs splist

我正在创建一个计时器Job。我必须访问存储在网站中的解决方案中的一些列表:“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];

我面临的问题是我处于开发环境中,我不知道他们将用于在生产中部署解决方案的网站的网址是什么。

那么有没有办法在不知道网站名称的情况下进入列表?

由于

编辑: 这就是计时器作业的激活方式:

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();
    }

1 个答案:

答案 0 :(得分: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参数中,我传递了一个我在作业定义类中声明的常量。

有关详细信息,请参阅:Scope of a feature activated Custom Sharepoint-Timer Job