Erstellen von Zeitgeberaufträgen für bestimmte Dienste in SharePoint 2010

Zusammenfassung: Informationen zum Anlegen eines Microsoft SharePoint 2010-Zeitgeberauftrags mit einem bestimmten SharePoint-Dienst in SharePoint 2010

Wrox-Logo

Bücher von Wrox zu SharePoint (in englischer Sprache)

Letzte Änderung: Montag, 9. März 2015

Gilt für: Business Connectivity Services | Open XML | SharePoint Designer 2010 | SharePoint Foundation 2010 | SharePoint Online | SharePoint Server 2010 | Visual Studio

Inhalt dieses Artikels
Übersicht über Zeitgeberaufträge in SharePoint 2010
Vorbereiten des Anlegens eines SharePoint-Zeitgeberauftrags
Anlegen eines SharePoint-Zeitgeberauftrags
Aktivieren der Konfiguration des SharePoint-Zeitgeberauftrags
Bereitstellen des Zeitgeberauftrags
Testen und Debuggen des SharePoint-Zeitgeberauftrags
Schlussbemerkung
Informationen zum Autor
Weitere Ressourcen

Autor: Bryan Phillips

Redakteure: Technische Redakteure von WROX für Artikel zu SharePoint 2010

Inhalt

  • Übersicht über Zeitgeberaufträge in SharePoint 2010

  • Vorbereiten des Anlegens eines SharePoint-Zeitgeberauftrags

  • Anlegen eines SharePoint-Zeitgeberauftrags

  • Aktivieren der Konfiguration des SharePoint-Zeitgeberauftrags

  • Bereitstellen des Zeitgeberauftrags

  • Testen und Debuggen des SharePoint-Zeitgeberauftrags

  • Schlussbemerkung

  • Informationen zum Autor

  • Weitere Ressourcen

Übersicht über Zeitgeberaufträge in SharePoint 2010

Mit Microsoft SharePoint 2010-Zeitgeberaufträge werden viele der im Hintergrund zu erledigenden Aufgaben ausgeführt, die für den ordnungsgemäßen Betrieb einer SharePoint-Farm erforderlich sind. Zeitgeberaufträge sind ausführbare Aufgaben, die zum geplanten Zeitpunkt auf einem oder mehreren Servern ausgeführt werden. Diese Aufträge können für exakt eine Ausführung oder eine Zeitplanserie konfiguriert werden. Sie ähneln Aufträgen des Microsoft SQL Server-Agents, mit denen eine SQL Server-Installation durch Sichern von Datenbanken, Defragmentieren von Datenbankdateien und Aktualisieren von Datenbankstatistiken verwaltet werden. In SharePoint dienen Zeitgeberaufträge zum Verwalten lang andauernder Workflows, zum Bereinigen alter Websites und Protokolle und zum Überwachen der Farm auf Probleme. Je nach SharePoint-Edition und installierten Produkten anderer Anbieter weist Ihre Farm zahlreiche oder nur einige wenige Zeitgeberaufträge auf. Zeitgeberaufträge haben mehrere Vorteile. Sie können regelmäßig und unabhängig von Benutzern ausgeführt werden, die auf Ihre SharePoint-Websites zugreifen. Mit ihnen können lang andauernde Prozesse von den Web-Front-End-Servern ausgelagert werden, wodurch sich die Leistung und Reaktionsschnelligkeit Ihrer Seiten erhöht. Und mit Zeitgeberaufträgen kann Code mit Berechtigungen ausgeführt werden, die höher sind als für den Code in Ihren Wiederherstellung-Website- und Anwendungsseiten.

Die Zeitgeberaufträge in einer Farm können in der SharePoint 2010-Zentraladministration auf der Seite Auftragsdefinitionen angezeigt werden. Klicken Sie für den Zugriff auf diese Seite auf Alle Programme, Microsoft SharePoint 2010-Produkt, SharePoint 2010-Zentraladministration. Klicken Sie auf der Website der Zentraladministration auf die Verknüpfung Überwachung. Klicken Sie anschließend auf der Seite Überwachung im Abschnitt Zeitgeberaufträge auf Auftragsdefinitionen überprüfen. Die Liste der in Ihrer Farm definierten Zeitgeberaufträge wird angezeigt (siehe Abbildung 1).

Abbildung 1. Liste definierter SharePoint-Zeitgeberaufträge

Liste von SharePoint-Zeitgeberauftragsdefinitionen

Da SharePoint-Zeitgeberaufträge im Hintergrund ausgeführt werden, erledigen sie ihre Aufgaben, selbst wenn keine Benutzer auf Ihre SharePoint-Websites zugreifen. Der Windows SharePoint Services-Timerdienst ist für die Ausführung der Zeitgeberaufträge in der Farm zuständig und muss auf allen Servern der Farm aktiviert und ausgeführt werden. Der Dienst ermöglicht den verschiedenen SharePoint-Zeitgeberaufträgen, die Server in der Farm zu konfigurieren und zu verwalten. Wenn Sie den Windows SharePoint Services-Timerdienst auf einem Server beenden, werden auch alle SharePoint-Zeitgeberaufträge auf diesem Server beendet, z. B. Aufträge zum Indizieren von SharePoint-Websites, Importieren von Benutzern aus Active Directory und Ausführen vieler anderer Prozesse, die sich auf die Leistung und Zweckdienlichkeit von SharePoint auswirken.

Vorbereiten des Anlegens eines SharePoint-Zeitgeberauftrags

Bevor Sie einen SharePoint-Zeitgeberauftrag anlegen können, müssen Sie Microsoft Visual Studio 2010 (Professional, Premium oder Ultimate Edition) unter Windows Vista, Windows 7 oder Windows Server 2008 installieren. SharePoint 2010 muss auf dem Entwicklungscomputer installiert sein.

Erstellen Sie nach der Installation der benötigten Software in Visual Studio ein neues SharePoint-Projekt, indem Sie Datei, Neu, Projekt auswählen, wodurch das Dialogfeld Neues Projekt angezeigt wird (siehe Abbildung 2). Vergewissern Sie sich in diesem Dialogfeld, dass in der Dropdownliste oben .NET Framework 3.5 ausgewählt ist, und erweitern Sie die Liste der Projektvorlagen im linken Bereich des Dialogfelds so lange, bis 2010 unter SharePoint angezeigt wird. Wählen Sie 2010 aus, um rechts im Dialogfeld eine Liste mit SharePoint 2010-Projektvorlagen anzuzeigen. Wählen Sie in der Vorlagenliste Leeres SharePoint-Projekt aus, geben Sie unten im Dialogfeld die Projektinformationen ein, und klicken Sie dann auf OK. Mithilfe des neuen Projekts entwickeln Sie den neuen Zeitgeberauftrag, packen diesen für die Bereitstellung in SharePoint und debuggen ihn anschließend.

Abbildung 2. Dialogfeld "Neues Projekt"

Dialogfeld 'Neues Projekt'

HinweisHinweis

Je nach Konfiguration von Visual Studio kann sich Ihr Dialogfeld Neues Projekt vom Dialogfeld in Abbildung 2 unterscheiden.

Nachdem Sie im Dialogfeld Neues Projekt auf OK geklickt haben, wird das Dialogfeld Assistent zum Anpassen von SharePoint geöffnet (siehe Abbildung 3). Geben Sie die URL Ihrer SharePoint-Website in das Textfeld ein, wählen Sie Als Farmlösung bereitstellen aus, und klicken Sie dann auf Fertig stellen. Sie müssen das Optionsfeld Als Farmlösung bereitstellen auswählen, da Zeitgeberaufträge für die Ausführung eine höhere Vertrauensebene als Lösungen mit eingeschränkter Sicherheitsstufe benötigen.

Abbildung 3. Dialogfeld "Assistent zum Anpassen von SharePoint"

Dialogfeld "Assistent zum Anpassen von SharePoint"

Nach Klicken auf Fertigstellen im Dialogfeld Assistent für die Anpassung von SharePoint wird das Projekt in Visual Studio erstellt und geöffnet (siehe Abbildung 4). Nach dem Erstellen des Projekts können Sie mit dem Hinzufügen der Klassen zu beginnen, die für das Bilden der Grundlage Ihre SharePoint-Zeitgeberauftrags erforderlich sind. Im nächsten Abschnitt wird das Erstellen dieser Klassen beschrieben.

Abbildung 4. Neues in Visual Studio geöffnetes SharePoint-Projekt

In Visual Studio geöffnetes neues SharePoint-Projekt

Anlegen eines SharePoint-Zeitgeberauftrags

Alle Zeitgeberaufträge, so auch die mit SharePoint installierten, werden mithilfe der SPJobDefinition-Klasse angelegt und ausgeführt. Zum Anlegen eines neuen SharePoint-Zeitgeberauftrags müssen Sie zunächst Ihrem Projekt eine Klasse hinzufügen, die von der SPJobDefinition-Klasse erbt.

So fügen Sie dem Projekt eine Klasse hinzu

  1. Klicken Sie mit der rechten Maustaste auf das Projekt, und wählen Sie im Kontextmenü die Option Hinzufügen und dann Klasse aus, um das Dialogfeld Neues Element hinzufügen zu öffnen.

  2. Geben Sie einen Namen für die Klasse ein, und klicken Sie dann auf Hinzufügen. Visual Studio öffnet die neue Klasse im Texteditor.

  3. Ändern Sie die Sichtbarkeit der Klasse in public, und veranlassen Sie, dass die Klasse von der SPJobDefinition-Klasse erbt.

Der folgende Codeausschnitt veranschaulicht eine Klasse, die von der SPJobDefinition-Klasse erbt.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SharePoint.Administration;
using Microsoft.SharePoint;

namespace MonitoringJob {
    public class MonitoringJob : SPJobDefinition {
        public MonitoringJob() : base() { }

        public MonitoringJob(string jobName, SPService service)
            : base(jobName, service, null, SPJobLockType.None) {
            this.Title = jobName;
        }

        public override void Execute(Guid targetInstanceId) {
            // Put your job's code here.
        }
    }
}

Im Codeausschnitt erbt die MonitoringJob-Klasse von der SPJobDefinition-Klasse, definiert einen nicht standardmäßigen Konstruktor und überschreibt die Execute-Methode der Basisklasse. Der nicht standardmäßige Konstruktor ist erforderlich, da der Standardkonstruktor der SPJobDefinition-Klasse nur für interne Zwecke vorgesehen ist. Beim Erstellen des Konstruktors müssen Sie die in Tabelle 1 angegebenen Werte für die vier Parameter an den Konstruktor der Basisklasse übergeben.

Tabelle 1. Parameter für den "SPJobDefinition"-Konstruktor

Name

Beschreibung

name

Der Name des Auftrags.

service

Eine Instanz der SPService-Klasse, die Besitzer dieses Auftrags ist. Nur auf Servern, auf denen der Dienst, dargestellt vom SPService-Objekt, ausgeführt wird, kann dieser Auftrag ausgeführt werden.

server

Eine Instanz der SPServer-Klasse, die diesem Auftrag zugeordnet ist. Übergeben Sie null, wenn der Auftrag keinem spezifischen Server zugeordnet ist.

lockType

Ein SPJobLockType-Wert, der die Umstände angibt, unter denen mehrere Instanzen des Auftrags gleichzeitig ausgeführt werden können.

Im vorherigen Codeausschnitt wird null als Wert für server übergeben, da dieser Auftrag keinem bestimmten Server zugeordnet ist. SPJobLockType.None wird als Wert für lockType übergeben, um zu verhindern, dass mehrere Instanzen des Auftrags gleichzeitig ausgeführt werden. Tabelle 2 enthält die möglichen Werte für SPJobLockType und deren Beschreibungen.

Tabelle 2. Werte für "SPJobLockType"

Wert

Beschreibung

None

Sperren sind deaktiviert. Der Auftrag wird auf allen Servern der Farm ausgeführt, es sei denn, Sie übergeben ein SPServer-Objekt für den Parameter server.

ContentDatabase

Der Auftrag wird für alle Inhaltsdatenbanken ausgeführt, die der Webanwendung des Auftrags zugeordnet sind.

Job

Der Auftrag kann nur auf einem Server gleichzeitig ausgeführt werden.

Nach Erstellen der Konstruktoren müssen Sie die Execute-Methode der SPJobDefinition-Klasse überschreiben und den Code in dieser Methode durch den Code ersetzen, den Ihr Auftrag benötigt. Wenn Ihr Code ohne weitere Konfiguration ausgeführt werden kann, ist das Erstellen dieser Klasse abgeschlossen. Andernfalls müssen Sie Ihrem Projekt Konfigurationsfenster und Klassen hinzufügen (siehe den nächsten Abschnitt). Im nächsten Abschnitt wird auch der tatsächliche Code aus dem Beispiel behandelt, der zur Execute-Methode gehört.

Aktivieren der Konfiguration des SharePoint-Zeitgeberauftrags

Erstellen Sie zum Speichern von Konfigurationsdaten für den Auftrag Klassen, die diese Konfiguration enthalten, und speichern Sie sie in SharePoint. Zunächst muss die Klasse von der SPPersistedObject-Klasse erben. Als Nächstes müssen die Felder in der Klasse öffentlich sein, mit dem [Persisted]-Attribut markiert sein und über einen Datentyp verfügen, der entweder vordefiniert (Guid, int, string usw.) ist, von SPAutoSerializingObject erbt oder ein Auflistungstyp ist, der einen der vordefinierten Typen oder einen Typ enthält, der von SPAutoSerializingObject erbt. Es werden nur Felder und keine Eigenschaften gespeichert, woran Sie ggf. gewöhnt sind, wenn Sie Objekte in XML serialisieren. Der folgende Codeausschnitt zeigt die beiden Klassen, die zum Konfigurieren der MonitoringJob-Klasse dienen.

using Microsoft.SharePoint.Administration;
public class MonitoringJobSettings : SPPersistedObject {
    public static string SettingsName = "MonitoringJobSettings";

    public MonitoringJobSettings() { }
    public MonitoringJobSettings(SPPersistedObject parent, Guid id) :
        base(SettingsName, parent, id) { }

    [Persisted]
    public string EmailAddress;
}

Im Codeausschnitt dient die MonitoringJobSettings-Klasse zum Konfigurieren der MonitoringJob-Klasse. Sie erbt von SPPersistedObject und hat ein einzelnes Feld mit dem Namen EmailAddress, das mit dem [Persisted]-Attribut markiert ist. Das Feld EmailAddress wird für den Empfänger von gesendeten E-Mails verwendet.

Ein erwähnenswertes Detail ist, dass für die MonitoringJobSettings-Klasse zwei Konstruktoren definiert sind: ein Standardkonstruktor, der für alle serialisierbaren Klassen erforderlich ist, und ein zweiter Konstruktor, der einen Konstruktor für seine Basisklasse aufruft. Dieser zweite Konstruktor übergibt den Namen des SPPersistedObject-Objekts, einer Instanz eines SPPersistedObject-Objekts, die als übergeordnetes Objekt des MonitoringJobSettings-Objekts fungiert, und eine Guid, die zum Zuweisen einer eindeutigen ID hierfür in SharePoint dient. Da MonitoringJob einem bestimmten SPService-Objekt zugeordnet ist, wird dasselbe SPService-Objekt zum übergeordneten Objekt des MonitoringJobSettings-Objekts, wenn es in SharePoint gespeichert wird. Weitere Informationen zur Funktionsweise finden Sie weiter unten in diesem Abschnitt.

Nach dem Erstellen der Klassen für den Auftrag und seiner Konfiguration können Sie die Konfiguration des Auftrags mithilfe des folgenden Codeausschnitts in SharePoint speichern. Später fügen Sie diesen Code einem Ereignishandler hinzu, der ausgeführt wird, wenn das Feature aktiviert wird, das Ihren Zeitgeberauftrag enthält.

// Get an instance of the SharePoint Farm.
SPFarm farm = SPFarm.Local;

// Get an instance of the service.
var results = from s in farm.Services
    where s.Name == "SPSearch4"
    select s;

SPService service = results.First();

// Configure the job.
MonitoringJobSettings jobSettings = new MonitoringJobSettings(service, 
    Guid.NewGuid());
jobSettings.EmailAddress = "myemail@demo.com";
jobSettings.Update(true);

Im Codeausschnitt wird ein Verweis auf das SPService-Objekt, das den SharePoint-Suchdienst darstellt, abgerufen und an den Konstruktor der MonitoringJobSettings-Klasse gemeinam mit einer eindeutigen Guid übergeben. Anschließend wird die EmailAddress-Eigenschaft der Klasse konfiguriert, und die Update-Methode der Klasse wird aufgerufen, um das Objekt dauerhaft in SharePoint zu speichern. Durch Übergeben von true an die Update-Methode wird angegeben, dass SharePoint vorhandene gespeicherte Konfigurationen überschreiben soll. Andernfalls wird eine Ausnahme ausgelöst.

Rufen Sie zum Abrufen der Konfiguration einer Instanz des SPService-Objekts dessen GetChild-Methode ab, und übergeben Sie anschließend den Klassentyp, den Sie abrufen, sowie den Namen der Einstellung. Der folgende Codeausschnitt zeigt einen Teil der Implementierung der Execute-Methode der von SPJobDefinition abgeleiteten Klasse.

public override void Execute(Guid targetInstanceId) {
    MonitoringJobSettings jobSettings =
        this.Service.GetChild<MonitoringJobSettings>(
            MonitoringJobSettings.SettingsName);

    if (jobSettings == null) {
        return;
    }

    // Code omitted.
}

Die MonitoringJobSettings-Klasse wurde aus SharePoint abgerufen, indem die GetChild-Methode des übergeordneten SPService-Objekts des Auftrags aufgerufen wurde. Wenn zuvor noch nichts in SharePoint gespeichert wurde, gibt der Aufruf der GetChild-Methode null zurück. Sobald die Konfiguration Ihres Auftrags eine Instanz enthält, kann der restliche Code in Ihrer Execute-Methode ausgeführt werden.

Bereitstellen des Zeitgeberauftrags

Nachdem Sie die Auftrags- und Konfigurationsklassen erstellt haben, müssen Sie ein SharePoint-Feature hinzufügen, damit die SharePoint-Administratoren die Funktionalität in SharePoint nutzen können. Ein SharePoint-Feature ist eine Gruppe von in XML geschriebenen Bereitstellungsanwendungen, die SharePoint angeben, was erfolgen soll, sobald das Feature aktiviert ist. Auf der Seite Websiteeinstellungen Ihrer Website können Sie eine Liste mit Beispielfeatures einblenden, indem Sie auf Websitefeatures oder Websitesammlungs-Features klicken.

So fügen Sie dem Projekt ein Feature hinzu

  1. Klicken Sie mit der rechten Maustaste auf den Ordner Features, und wählen Sie im Kontextmenü Feature hinzufügen aus.

    Abbildung 5. Neu hinzugefügtes Feature

    Neues Feature hinzugefügt

  2. Geben Sie in die oberen beiden Textfelder einen benutzerfreundlichen Titel und eine Beschreibung ein. Die Werte, die Sie für Titel und Beschreibung eingeben, werden in der SharePoint-Zentraladministration auf der Seite Webanwendungsfeatures angezeigt.

  3. Da für dieses Feature der Auftrag bei einer der Webanwendungen in der Farm registriert wird, legen Sie Bereich auf Webanwendung fest.

  4. Klicken Sie auf der Symbolleiste auf die Schaltfläche Speichern.

Nachdem Sie das Feature erstellt und konfiguriert haben, müssen Sie dem Feature einen Ereignisempfänger hinzufügen, damit Sie den zum Registrieren des Auftrags benötigten Code hinzufügen können. Ein Ereignisempfänger ist eine Klasse, mit der Code ausgeführt wird, wenn bestimmte Ereignisse in SharePoint eintreten. In diesem Fall fügen Sie einen Ereignisempfänger hinzu, um Code auszuführen, wenn das Feature aktiviert oder deaktiviert wird. Klicken Sie zum Hinzufügen eines Ereignisempfängers mit der rechten Maustaste auf das Feature, und wählen Sie im Kontextmenü Ereignisempfänger hinzufügen aus.

Nach Hinzufügen des Ereignisempfängers müssen Sie die Methoden FeatureActivated und FeatureDeactivating herauskommentieren. Sie können die anderen Methoden entfernen, da sie nicht verwendet werden. Als Nächstes müssen Sie Code in der FeatureActivated-Methode hinzufügen, um den Auftrag bei SharePoint zu registrieren. Abschließend fügen Sie Code in der FeatureDeactivating-Methode hinzu, um die Registrierung des Auftrags aufzuheben. Das folgende Codebeispiel veranschaulicht das Registrieren des MonitoringJob-Objekts und Aufheben seiner Registrierung.

public override void FeatureActivated(
    SPFeatureReceiverProperties properties) {

    // Get an instance of the SharePoint farm.
    SPFarm farm = SPFarm.Local;

    // Get an instance of the service.
    var results = from s in farm.Services
                  where s.Name == "SPSearch4"
                  select s;

    SPService service = results.First();

    // Remove job if it exists.
    DeleteJobAndSettings(service);

    // Create the job.
    MonitoringJob job = new MonitoringJob(
        MonitoringJob.JobName, service);

    // Create the schedule so that the job runs hourly, sometime 
    // during the first quarter of the hour.
    SPHourlySchedule schedule = new SPHourlySchedule();
    schedule.BeginMinute = 0;
    schedule.EndMinute = 15;
    job.Update();

    // Configure the job.
    MonitoringJobSettings jobSettings = new MonitoringJobSettings(
        service, Guid.NewGuid());
    jobSettings.EmailAddress = "myemail@demo.com";
    jobSettings.Update(true);
}

public override void FeatureDeactivating(
    SPFeatureReceiverProperties properties) {

    // Get an instance of the SharePoint farm.
    SPFarm farm = SPFarm.Local;

    // Get an instance of the service.
    var results = from s in farm.Services
                  where s.Name == "SPSearch4"
                  select s;

    SPService service = results.First();

    DeleteJobAndSettings(service);
}

private void DeleteJobAndSettings(SPService service) {
    // Find the job and delete it.
    foreach (SPJobDefinition job in service.JobDefinitions) {
        if (job.Name == MonitoringJob.JobName) {
            job.Delete();
            break;
        }
    }

    // Delete the job's settings.
    MonitoringJobSettings jobSettings =
        service.GetChild<MonitoringJobSettings>(
            MonitoringJobSettings.SettingsName);
    if (jobSettings != null) {
        jobSettings.Delete();
    }
}

Im vorherigen Codebeispiel ruft die FeatureActivated-Methode eine Instanz des SPFarm-Objekts ab, indem auf die lokale statische Eigenschaft der SPFarm-Klasse zugegriffen wird. Anschließend wird die Services-Eigenschaft der SPFarm-Klasse aufgezählt, um eine SPService-Instanz abzurufen, die den SharePoint-Suchdienst darstellt.

Als Nächstes ruft die FeatureActivated-Methode die DeleteJobAndSettings-Methode auf, um den Auftrag, sofern bereits vorhanden, zu entfernen. Der Auftrag ist ggf. schon vorhanden, wenn das Feature zuvor bereitgestellt wurde, es aber zu einem Problem bei der Deaktivierung gekommen ist. Danach wird eine Instanz der Auftragsdefinition erstellt, indem der Name des Auftrags und eine Instanz der SPService-Klasse übergeben werden. Nach der Erstellung des Auftrags müssen Sie dessen Schedule-Eigenschaft auf eine Instanz auf eines der Typen der SPSchedule-Klassen festlegen, die in Tabelle 3 beschrieben werden.

Tabelle 3. Typen der "SPSchedule"-Klasse

Typ

Beschreibung

SPMinuteSchedule

Der Auftrag wird bei Wahl dieser Klasse alle x Minuten ausgeführt. Diese Klasse kann Aufträge für Zeiträume planen, die nicht Stunde, Tag, Woche, Monat oder Jahr sind. Wenn Sie beispielsweise einen Auftrag alle 11 Tage ausführen möchten, legen Sie die Interval-Eigenschaft auf 15840 Minuten fest.

SPHourlySchedule

Der Auftrag wird stündlich ausgeführt.

SPDailySchedule

Der Auftrag wird täglich ausgeführt.

SPWeeklySchedule

Der Auftrag wird wöchentlich ausgeführt.

SPMonthlySchedule

Der Auftrag wird monatlich ausgeführt.

SPYearlySchedule

Der Auftrag wird jährlich ausgeführt.

Im vorherigen Codebeispiel wird der Auftrag mithilfe der SPHourlySchedule-Klasse auf eine stündliche Ausführung festgelegt. Die mit Begin und End beginnenden Eigenschaften geben den frühesten und spätesten Zeitpunkt an, an dem der Auftrag starten kann. Der Timerdienst wählt in diesem Intervall einen beliebigen Zeitpunkt aus, an dem der Auftrag startet. Nachdem Sie die Schedule-Eigenschaft Ihres Auftrags festgelegt haben, rufen Sie die Update-Methode des Auftrags auf, um ihn bei SharePoint zu registrieren. Im letzten Schritt der Methode werden eine Instanz der MonitoringJobSettings-Klasse erstellt, deren Eigenschaften festgelegt und die Klasse gespeichert, indem ihre Update-Methode aufgerufen wird.

In der FeatureDeactivating-Methode wird die DeleteJobAndSettings-Methode aufgerufen, um den zuvor registrierten Auftrag zu löschen. Die DeleteJobAndSettings-Methode nutzt die JobDefinitions-Eigenschaft, um eine Liste der Aufträge abzurufen, die für dieses SPService-Objekt registriert sind, und löscht den Auftrag, den das Feature zuvor erstellt hat. Die Methode ruft außerdem die Konfiguration des Auftrags ab und löscht diese.

An dieser Stelle können Sie Ihren Code testen. Im nächsten Abschnitt wird erklärt, wie Sie Ihren SharePoint-Auftrag testen und debuggen.

Testen und Debuggen des SharePoint-Zeitgeberauftrags

Wenn Sie SharePoint-Code debuggen, legen Sie zumeist den Buildtyp des Projekts auf Debuggen fest und drücken dann F5, um das Projekt zu debuggen. Visual Studio kompiliert den Code, packt die resultierenden Assembly- und XML-Dateien in einer SharePoint-Lösungspaketdatei (.wsp) und stellt SharePoint anschließend das Lösungspaket bereit. Nach der Bereitstellung des Lösungspakets aktiviert Visual Studio die Features, die Sie erstellt haben.

So debuggen Sie den Zeitgeberauftrag

  1. Zum Debuggen eines Zeitgeberauftrags in SharePoint müssen Sie eine Verbindung mit dem Prozess herstellen, der sich hinter dem SharePoint-Timerdienst befindet. Wählen Sie hierzu auf der Menüleiste erst Debuggen und dann An den Prozess anhängen aus.

  2. Vergewissern Sie sich im Dialogfeld An den Prozess anhängen, dass die Kontrollkästchen unten im Dialogfeld beide aktiviert sind, und wählen Sie OWSTIMER.EXE in der Liste Verfügbare Prozesse aus.

    Abbildung 6. Dialogfeld "An den Prozess anhängen"

    Dialogfeld "An den Prozess anhängen"

  3. Klicken Sie auf Anhängen, um das Anhängen an den SharePoint-Timer-Dienst abzuschließen.

    Nun können Sie dem Code Ihres Auftrags Haltepunkte hinzufügen.

Um den Auftrag sofort auszuführen, können Sie einen Windows PowerShell-Befehl aufrufen, durch den der SharePoint-Timerdienst Ihren Auftrag unmittelbar ausführt. Klicken Sie zum Öffnen von Windows PowerShell auf Alle Programme, Microsoft SharePoint 2010-Produkte und dann auf SharePoint 2010-Verwaltungsshell.

Die Windows PowerShell-Konsole wird mit den bereits registrierten SharePoint-Namespaces geöffnet. Geben Sie den folgenden Befehl in einer Zeile ein, und drücken Sie die EINGABETASTE, um Ihren Auftrag für die sofortige Ausführung zu planen.

Get-SPTimerJob "Auftragsname" -WebApplication "URL" | Start-SPTimerJob

In der Befehlszeile ist Auftragsname der Name des Projekts und URL die URL der Webanwendung. Der Get-SPTimerJob-Befehl ruft die Definition Ihres Auftrags ab. Der senkrechte Strich (|) sorgt dafür, dass die Auftragsdefinition an den Start-SPTimerJob-Befehl gesendet wird, der dessen Ausführung plant. Der SharePoint-Timerdienst benötigt meist weniger als 30 Sekunden bis zum Abschluss der Ausführung. Wird er nicht ausgeführt, stellen Sie sicher, dass der Debugger in Visual Studio nicht angehalten ist.

Schlussbemerkung

Zeitgeberaufträge ermöglichen ein flexibles Verlagern lang andauernder oder geplanter Prozesse von Ihren Internetinformationsdienste-Websites (IIS). Zeitgeberaufträge sind leistungsstark, da sie für eine Ausführung gemäß einem bestimmten Zeitplan konfiguriert werden können und beliebige Funktionalität einbeziehen, die Sie für erstklassige SharePoint-Lösungen in Ihrem Unternehmen benötigen.

Informationen zum Autor

Bryan Phillips ist Seniorpartner bei Composable Systems, LLC und ein Microsoft Most Valuable Professional für SharePoint Server. Er ist Mitverfasser von "Professional Microsoft Office SharePoint Designer 2007" sowie "Beginning SharePoint Designer 2010" und unterhält einen Blog zu SharePoint. Bryan arbeitet seit 1997 mit Microsoft-Technologien und hat Zertifizierungen als Microsoft Certified Trainer (MCT), Microsoft Certified Solution Developer (MCSD), Microsoft Certified Database Administrator (MCDBA) und Microsoft Certified Systems Engineer (MCSE).

Die folgenden technischen Redakteure haben an Microsoft SharePoint 2010-Artikeln von Wrox mitgearbeitet:

  • Matt Ranlett ist ein SQL Server MVP und war über viele Jahre eine feste Institution der .NET-Entwicklercommunity in Atlanta. Als Gründungsmitglied von Atlanta Dot Net Regular Guys hat Matt mehrere regionale Benutzergruppen gegründet und leitet diese. Nach der Arbeit verbringt er viele Stunden mit lokalen und nationalen Communityaktivitäten, wie beispielsweise der SharePoint 1, 2, 3!-Reihe, der Organisation von drei Codecamps in Atlanta, der Tätigkeit als Vice President of Technology im Vorstand von INETA sowie Auftritten bei mehreren Podcasts wie z. B. .Net Rocks und dem ASP.NET-Podcast. Dennoch fand Matt kürzlich Zeit, sich mit einer wunderbaren Frau namens Kim zu verheiraten, die er bei der Aufzucht von drei riesigen Hunden unterstützt. Matt arbeitet derzeit als Seniorberater für Intellinet und gehört dem Team an, das mithilfe von innovativen Lösungen für den Erfolg von Unternehmen sorgt.

  • Jake Dan Attis. Was Muster, Praxis und Steuerung im Hinblick auf die SharePoint-Entwicklung betrifft, sind Sie bei Jake Dan Attis goldrichtig. Er ist von Moncton, Kanada, in die Region Atlanta gezogen und hat einen Abschluss in angewandter Mathematik, ist aber ein hundertprozentiger SharePoint-Hardcoreentwickler. Normalerweise nimmt Dan an Community-Events in der Region Atlanta teil, hält dort Vorträge oder organisiert derartige Events, wie beispielsweise Codecamps, SharePoint-Samstage und die SharePoint-Benutzergruppe in Atlanta. Wenn Dan einmal nicht in Visual Studio arbeitet, verbringt er gerne Zeit mit seiner Tochter Lily, schaut sich Hockey und Football an und kostet weltweite Biersorten.

  • Kevin Dostalek kann über 15 Jahre Erfahrung in der IT-Branche sowie über 10 Jahre Erfahrung in der Verwaltung großer IT-Projekte und der Führung von IT-Personal aufweisen. Er hat Projekte für Unternehmen ganz unterschiedlicher Größe geleitet und hatte verschiedene Funktionen inne, wie beispielsweise Entwickler, Architekt, Business Analyst, technischer Leiter, Manager Entwicklung, Projektmanager, Programm-Manager und Mentor/Coach. Darüber hinaus hat Kevin zwischen 2005 und 2008 auch als Vice President eine Lösungsbereitstellungsabteilung für einen MS Gold Partner mittlerer Größe geleitet und war später auch als Vice President of Innovation and Education tätig. Anfang 2010 gründete Kevin das Unternehmen Kick Studios, das Beratungs-, Entwicklungs- und Schulungsservices für die Spezialbereiche SharePoint und Social Computing anbietet. Seitdem ist er auch bei zahlreichen Benutzergruppenversammlungen, Treffen und Konferenzen im ganzen Land als Referent aufgetreten. Weitere Informationen zu Kevin finden Sie in seinem Blog "The Kickboard".

  • Larry Riemann verfügt über mehr als 17 Jahre Erfahrung im Entwurf und der Entwicklung von Geschäftsanwendungen für einige der weltweit größten Unternehmen. Larry ist ein unabhängiger Berater, Eigentümer von Indigo Integrations und bietet SharePoint-Beratung ausschließlich über SharePoint911 an. Er ist Autor, veröffentlicht Artikel und hält gelegentlich Vorträge auf Konferenzen. In den letzten Jahren befasste er sich in erster Linie mit SharePoint, dem Entwickeln und Erweitern von über SharePoint hinausgehender Funktionalität. Neben seiner Arbeit an SharePoint ist Larry ein ausgebildeter .NET-Architekt und verfügt über umfangreiches Know-how in Sachen Systemintegration, Unternehmensarchitektur und Hochverfügbarkeitslösungen. Weitere Informationen zu Larry finden Sie in seinem Blog.

  • Sundararajan Narasiman ist ein technischer Architekt bei der Content Management & Portals Group von Cognizant Technology Solutions, Chennai, und verfügt über mehr als 10 Jahre Branchenerfahrung. Sundararajan ist in erster Linie als Architektur- und Technologieberater für die SharePoint Server 2010-Stapel- und Mainstream .NET 3.5-Entwicklung tätig. Er ist ein begeisterter Programmierer und interessiert sich auch für Extremprogrammierung und EDT.

Weitere Ressourcen

Weitere Informationen finden Sie in den folgenden Ressourcen: