从下面给出的示例中,哪个是在sharepoint中专门针对计时器作业引用当前站点/ web的最佳方法?为什么?
例1:
SPWebApplication webApp = this.Parent as SPWebApplication; SPWeb oWeb = webApp.Sites[0].RootWeb;
OR
示例2:
using(SPSite site=new SPSite(SPCOntext.Current.Web.Url)){ using(SPWeb web=site.OpenWeb()){
} }
答案 0 :(得分:2)
TimerJob中没有可用的SPContext.Current,因此这不是一个选项。您的示例1将是一个选项,但我一直在使用其他解决方法。
当您按代码部署timerjob并使用特定的时间表激活它们时,您可以设置TimerJob属性,这些属性在调用“Execute”方法时可以读取。
以下是我在SPWebApplication功能中的一个解决方案中使用的代码:
var webApplication = (SPWebApplication) properties.Feature.Parent;
var newTimerJob = new new MyTimerJob("Timerjobname", webApplication);
newTimerJob.Properties.Add("key", "url");
newTimerJob.Schedule = schedule;
newTimerJob.Update();
执行方法可以包含这样的内容:
if (Properties["key"] != null && Properties["key"].ToString() != string.Empty)
{ var mySite = new SPSite(Properties["key"].ToString()); }