3

我正在创建一个计时器作业。而且我必须访问存储在站点中的解决方案中的一些列表:“http://server:9090/sites/thesite”

目前,在我的 Timer Job 中,我使用这个:

 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

我肯定会使用创建计时器作业的功能 ID 而不是 URL 来识别网站集。这不仅使您可以灵活地命名站点,还允许您处理每个都订阅了作业的多个站点集。

我编写了以下实用程序方法来收集计时器作业的网站集:

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-Timer 作业的范围

于 2012-06-18T16:47:20.080 回答