我创建了一个非常简单的SharePoint计时器作业。我只需要遍历一个列表并更新每个列表项,这样它就可以触发一个正常工作的现有工作流。换言之,我所要做的就是绕过工作流不能按计划触发的限制。我已经编写了一个继承SPJobDefinition的类来完成这项工作,并且我还有一个继承SPFeatureReceiver的类来安装和激活它。我已经使用SPVisualDev创建了这个特性,我的Coleagues过去曾将它用于其他SP开发。
我的工作分类如下:
public class DriverSafetyCheckTrigger : SPJobDefinition
{
private string pi_SiteUrl;
public DriverSafetyCheckTrigger(string SiteURL, SPWebApplication WebApp):base("DriverSafetyCheckTrigger",WebApp,null, SPJobLockType.Job)
{
this.Title = "DriverSafetyCheckTrigger";
pi_SiteUrl = SiteURL;
}
public override void Execute(Guid targetInstanceId)
{
using (SPSite siteCollection = new SPSite(pi_SiteUrl))
{
using (SPWeb site = siteCollection.RootWeb)
{
SPList taskList = site.Lists["Driver Safety Check"];
foreach(SPListItem item in taskList.Items)
{
item.Update();
}
}
}
}
}
FeatureReceiver类中唯一的一点就是我已经重写了下面的FeatureActivated方法:
public override void FeatureActivated(SPFeatureReceiverProperties Properties)
{
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 == "DriverSafetyCheckTrigger")
job.Delete();
}
// Install the job.
DriverSafetyCheckTrigger oDriverSafetyCheckTrigger = new DriverSafetyCheckTrigger(site.Url, site.WebApplication);
SPDailySchedule oSchedule = new SPDailySchedule();
oSchedule.BeginHour = 1;
oDriverSafetyCheckTrigger.Schedule = oSchedule;
oDriverSafetyCheckTrigger.Update();
}
我遇到的问题是,当我试图激活该功能时,它在odriversafetychecktrigger.update()行上引发了nullreferenceexception。我不确定在这种情况下什么是空的,我为这个所遵循的示例是
this
辅导的。我不知道我做错了什么。