我正在创建一个计时器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();
}
答案 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