簡體   English   中英

激活Sharepoint計時器作業時出現問題

[英]Problem Activating Sharepoint Timer Job

我創建了一個非常簡單的共享點計時器作業。 我要做的就是遍歷一個列表並更新每個列表項,從而觸發一個運行良好的現有工作流程。 換句話說,我要做的就是解決無法按計划觸發工作流的限制。 我編寫了一個繼承自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,我遵循的示例是教程。 我不確定自己在做什么錯。

我在控制台應用程序中運行了您的代碼,並在調用.Update()時遇到以下異常

“ DriverSafetyCheckTrigger無法反序列化,因為它沒有公共默認構造函數”

也許會有幫助嗎?

我有一個類似的代碼正在我的功能接收器之一中運行:

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。 您也可以嘗試將“結束”值與“開始”值結合使用或代替“開始”值來設置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM