Timer-Job を作成する必要がある WebApplication-Scope の下に SharePoint-Feature を取得しました。
機能の有効化時 (そのジョブを作成する前) および機能の無効化時に、ジョブが既に存在する場合は削除したいと考えています。これは、機能アクティベーション コードです。
public class myJob : SPJobDefinition
public myJob() : base("JobName", SPAdministrationWebApplication.Local, null, SPJobLockType.Job) {}
}
public class JobFeature : SPFeatureReceiver
{
public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
SPWebApplication application = properties.Feature.Parent as SPWebApplication;
// 1. Delete old Job if exists
foreach (SPJobDefinition job in application.JobDefinitions)
{
if (string.Equals(job.Name, "JobName"))
{
job.Delete(); // NEVER GETS HERE
}
}
// 2. Install job
myJob deploymentJob = new myJob();
SPMinuteSchedule schedule = new SPMinuteSchedule { BeginSecond = 0, EndSecond = 59, Interval = 5 };
deploymentJob.Schedule = schedule;
deploymentJob.Update(); // CRASHES
}
}
問題は、ジョブを削除するコードに到達しないことです。ジョブが application.JobDefinitions にあるようには見えません。(上記のコードの「// 決してここに来ない」)
しかし、配置ジョブを作成しようとすると、ジョブが既に存在するという例外が発生しました (上記のコードの「// CRASHES」):
{"An object of the type myJob named \"JobName\" already exists under the parent Microsoft.SharePoint.Administration.SPAdministrationWebApplication named \"\". Rename your object or delete the existing object."}
エラーはどこにありますか?