问题激活Sharepoint计时器作业

时间:2010-03-23 16:58:18

标签: sharepoint sharepoint-2007

我创建了一个非常简单的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();                        
                }
            }
        } 
    }
}

功能接收器类中唯一的东西是我已经覆盖了下面的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。我不确定在这种情况下什么是null,我所遵循的示例是this教程。我不确定我做错了什么。

2 个答案:

答案 0 :(得分:1)

我在控制台应用程序中运行了您的代码,并在调用.Update()

时遇到以下异常

“DriverSafetyCheckTrigger无法反序列化,因为它没有公共默认构造函数”

也许这会有所帮助?

答案 1 :(得分:0)

我的功能接收器中有类似的代码:

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。您也可以尝试将End值与Begin值一起设置或代替Begin值。