代码之家  ›  专栏  ›  技术社区  ›  Coding Flow

激活SharePoint计时器作业时出现问题

  •  1
  • Coding Flow  · 技术社区  · 16 年前

    我创建了一个非常简单的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 辅导的。我不知道我做错了什么。

    2 回复  |  直到 16 年前
        1
  •  1
  •   Paul Lucas    16 年前

    我在控制台应用程序中运行了您的代码,并在调用.update()时遇到以下异常

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

    也许会有帮助?

        2
  •  0
  •   Rich Bennema    16 年前

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

    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。您还可以尝试将结束值与开始值一起设置,或者将其替换为开始值。

    推荐文章