Проблема с активацией задания таймера Sharepoint - PullRequest
1 голос
/ 23 марта 2010

Я создал очень простое задание таймера 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 (). Я не уверен, что в данном случае пусто, пример, которому я следовал, это этот учебник. Я не уверен, что я делаю неправильно.

Ответы [ 2 ]

1 голос
/ 24 марта 2010

Я запустил ваш код в консольном приложении и получил следующее исключение при вызове .Update ()

«DriverSafetyCheckTrigger не может быть десериализован, поскольку у него нет общедоступного конструктора по умолчанию»

Может быть, это поможет?

0 голосов
/ 23 марта 2010

У меня есть похожий код, который работает в одном из моих приемников функций:

string jobName = "MyJobDefinition";

foreach (SPJobDefinition job in site.WebApplication.JobDefinitions)
{
    if (job.Name == jobName)
    {
        job.Delete();
    }
}

SPDailySchedule schedule = new SPDailySchedule();
schedule.EndHour = 2;
schedule.EndMinute = 59;
schedule.EndSecond = 59;

SPJobDefinition jobDefinition = new MyJobDefinition(jobName, site.WebApplication);
jobDefinition.Schedule = schedule;
jobDefinition.Update();

Интересно, у тебя проблемы с расписанием? Попробуйте установить BeginMinute и, возможно, также BeginSecond. Вы также можете попытаться установить конечные значения в сочетании с начальными значениями или вместо них.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...