2017-01-05 4 views
0

Я использую диспетчер планировщика заданий для создания запланированных задач из внешней программы (SharePoint). Создание и чтение задач в порядке, но я не могу найти способ редактировать задачу после ее регистрации, мне нужно перерегистрировать новую задачу или выполнить запрос на обновление?Редактирование задач планировщика заданий C#

Регистрация Моя задача:

TaskDefinition newTask = taskService.NewTask(); 
newTask.RegistrationInfo.Description = (string)timerJobItem.FieldValues["Description"]; 
newTask.Principal.LogonType = TaskLogonType.InteractiveToken; 

// Switch for different schedule options, use createTriggers method 
List<Trigger> triggers = createTriggers((string)timerJobItem["Schedule"], (DateTime)timerJobItem["StartTime"]); 
newTask.Triggers.Add(triggers.First()); 

// Create Action to add to new Task 
newTask.Actions.Add(new ExecAction((string)timerJobItem["Action"], (string)timerJobItem["Arguments"], null)); 
// Create Task 
taskService.RootFolder.RegisterTaskDefinition(jobName, newTask); 

Тогда я считаю задачу в планировщик, который работает, но когда я пытаюсь не делать изменений, ничего не происходит:

// Method to get all Tasks that match a name - Working 
private Task[] GetAllTasks(string regexString) 
    { 
     Regex regex = new Regex(String.Format(@"{0}", regexString)); 
     using (TaskService taskService = new TaskService()) 
     { 
      Task[] allTasksCollection = taskService.FindAllTasks(regex, true); 
      foreach (Task task in allTasksCollection) 
      { 
       Console.WriteLine(task.Name); 
      } 
      return allTasksCollection; 
     }; 
    } 

....

// Get a single timer job 
Task[] allTimerJobs = GetAllTasks(prefix); 
List<Task> allTimerJobsList = allTimerJobs.Cast<Task>().ToList(); 
string jobName = String.Format("{0}[{1}].{2}", prefix, (int)timerJobItem["ID"], jobReference); 

// Get Task by name 
int indexOfJob = allTimerJobsList.FindIndex(t => t.Name == jobName); 
Task matchingJob = allTimerJobsList[indexOfJob]; 

// No Error but nothing happens to task 
matchingJob.Definition.Triggers.Clear(); 

// No Error but nothing happens to task 
matchingJob.Definition.Settings.Enabled = false; 

TIA

ответ

0

Единственный способ, которым я нашел для редактирования задачи, - это скопировать определение в новую задачу и снова зарегистрировать его в RootFolder.

Ниже пример, изменяет описание на новое значение, имя задачи должно совпадать или будет создана новая задача:

TaskDefinition td = taskService.NewTask(); 
td = existingJob.Definition; 
td.RegistrationInfo.Description = "New Value"; 
taskService.RootFolder.RegisterTaskDefinition(jobName, td);