Я создал очень простое задание таймера sharepoint. Все, что я хочу сделать, это перебирать список и обновлять каждый элемент списка, чтобы он запускал существующий рабочий процесс, который работает нормально. Другими словами, все, что я пытаюсь сделать, это обойти ограничение, заключающееся в том, что рабочие процессы не могут запускаться по расписанию. Я написал класс, который наследует от SPJobDefinition, который выполняет эту работу, и у меня есть класс, который наследует от SPFeatureReceiver, чтобы установить и активировать его. Я создал эту функцию с помощью SPVisualdev, которую мои коллеги использовали в прошлом для других разработок 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();
}
}
}
}
}
И единственное, что есть в классе средства получения объектов, - это то, что я переопределил метод FeatureActivation ниже:
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();
}
Проблема, с которой я столкнулся, заключается в том, что при попытке активировать функцию она выдает исключение NullReferenceException в строке oDriverSafetyCheckTrigger.Update (). Я не уверен, что в данном случае пусто, пример, которому я следовал, это этот учебник. Я не уверен, что я делаю неправильно.