2 votes

Problèmes pour trouver JobDefinition dans WebApplication-Feature dans SharePoint 2010

J'ai une fonctionnalité SharePoint dans le champ d'application de l'application Web qui devrait créer une tâche de temporisation.

Lors de l'activation de la fonction (avant de créer ce travail) et lors de la désactivation de la fonction, je veux supprimer le travail s'il existe déjà. Voici le code d'activation de la fonction :

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
  }
}

Le problème est que : Le code qui devrait supprimer le travail n'est jamais atteint. Le job ne semble pas être dans application.JobDefinitions. ("// NEVER GETS HERE" dans le code ci-dessus)

Mais lorsque j'essaie de créer le job de déploiement, j'obtiens une exception indiquant que le job existe déjà ("// CRASHES" dans le code ci-dessus) :

{"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."}

Où se trouve l'erreur ?

0voto

Ole Albers Points 3769

En utilisant un autre constructeur, cela fonctionne...

public myJob(SPWebApplication application)
            : base("JobName", application, null, SPJobLockType.Job)
        {

        }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X