J'ai travaillé avec un code que quelqu'un me remis pour un travail du minuteur. Il n'avait pas fourni le code d'activation de la fonctionnalité réelle, donc j'ai dû écrire, Bien sûr. J'ai pris avantage de Billet de blog célèbre de Andrew Connell sur le sujet.
Je suis à l'aide de Visual Studio 2010 et déploiement gardé échouent avec une erreur « Erreur s'est produite à l'étape de déploiement « Ajouter une Solution »: Objet référence non définie à une instance d'un objet. »
Je prenais son code trop littéralement. J'ai été portée la fonctionnalité au niveau de l'application web, comme le montre:
Comme un résultat, les propriétés qui sont envoyées au récepteur sont de l'application web, pas une collection de sites. En fin de compte, le code ressemble à ceci:
public override void FeatureActivated(Propriétés SPFeatureReceiverProperties)
{// Ne pas faire ce qui suit avec des fonctionnalités web app portée, elle conduit au désespoir
// Site SPSite = propriétés.Feature.parent comme SPSite;SPWebApplication wa = propriétés.Feature.parent comme SPWebApplication;
Si (wa == null) throw new Exception(« webapp2 est nulle. »);
foreach (Emploi de SPJobDefinition wa.JobDefinitions)
{Essayez
{
Si (emploi.Nom == List_JOB_NAME)emploi.Supprimer();
}
captures (Exception e)
{
throw new Exception(« marqueur 2 »);
} // catch exception e
}// installer le poste
WeatherForecastTimerJob weatherForecastTimerJob =
Nouvelle WeatherForecastTimerJob(List_JOB_NAME, wa);Annexe SPMinuteSchedule = nouveau SPMinuteSchedule();
calendrier.BeginSecond = 0;
calendrier.EndSecond = 59;
calendrier.Intervalle = 5;
weatherForecastTimerJob.Schedule = calendrier;
weatherForecastTimerJob.Update();}
La clé à emporter est que lorsque la fonction est définie sur une application web, le SPFeatureReceiverProperties que SharePoint transmet à votre récepteur de fonctionnalité a paramètres niveau de l'application web. Ancienne entrée de blog de Andrew suppose c'est dont la portée est la collection de sites.
</fin>
Me suivre sur Twitter à http://www.twitter.com/pagalvin