Я создал очень простое задание таймера sharepoint. Все, что я хочу сделать, это перебрать список и обновить каждый элемент списка, чтобы он запускал существующий рабочий процесс, который работает нормально. Другими словами, все, что я пытаюсь сделать, это ограничить то, что рабочие процессы не могут запускаться по расписанию. Я написал класс, который наследует от SPJobDefinition, который выполняет эту работу, и у меня есть класс, который наследует от SPFeatureReceiver, чтобы установить и активировать его. Я создал функцию, использующую SPVisualdev, которую мои коллеги использовали в прошлом для разработки других SP.Проблема Активация таймера Sharepoint
Мой класс Работа ниже:
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();
}
}
}
}
}
И единственное, что в классе функция Ресивер является то, что я переопределить метод 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();
}
Проблема у меня есть, что, когда Я пытаюсь активировать функцию, которая бросает исключение NullReferenceException на строке oDriverSafetyCheckTrigger.Update(). Я не уверен, что является нулевым в этом случае, пример, который я выполнил для этого, - это this учебник. Я не уверен, что я делаю неправильно.
Все равно, но я не думаю, что это проблема. У него обычно был конструктор без параметров, но это не имело никакого значения. Также я не пытаюсь сериализовать/десериализовать его. Спасибо за ваш вклад. –
Извинения, это была проблема. По какой-то причине Sharepoint должен попытаться сериализовать/десериализовать класс. В любом случае добавление конструктора без параметров в класс DriverSafetyCheck устраняет проблему. –
Объяснение, которое я могу придумать для необходимости сериализации/десериализации, состоит в том, что ваш класс DriverSafteyCheckTrigger содержит данные. Поле pi_SiteUrl получает значение только при настройке задания таймера, но задание таймера должно использовать это значение каждый раз, когда выполняется задание. Если сериализация не происходит, pi_SiteUrl будет пустым при выполнении задания. –