SharePointCommunity
Die deutschsprachige Community für SharePoint, Microsoft 365, Teams, Yammer und mit Azure

Sponsored by

Willkommen im Forum Archiv.
Einträge sind hier nicht mehr möglich, aber der Bestand von 12 Jahren SharePoint-Wissen ist hier recherchierbar.




Custom Timer Job wird gestartet ?

Unbeantwortet Dieser Beitrag hat 12 Antworten

Ohne Rang
33 Beiträge
Martin Litschke erstellt 26 März 2011 14:11
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo,

 

ich habe einen kleinen Custom Timer Job Programmiert und diesen Deployed. Nun stelle ich fest, das dieser Timer Job irgendwie gar nicht gestartet wird und ich somit auch nicht überprüfen kann ob mein Code funktioniert. In der Website ist das Feature aktiviert. In der Zentraladministration ist er auch vorhanden und dort steht das er jede 2 Minuten ausgeführt werden soll aber irgendwie passiert das nicht?

 

Gibts irgendwie besondere Logs oder ähnliches in bezug auf die Timer Jobs?

Alle Antworten

Ohne Rang
1714 Beiträge
C.Kaiser Als Antwort am 26 März 2011 23:30
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hast du den Timer Dienst mal neu gestartet?

Zum debuggen kannst du dich an den owstimer hängen und schauen ob dein Code ausgeführt wird. Ansonsten wie immer in den SharePoint Logs nachschauen.

Beste Grüße,
Christian

http://www.sharepoint-rhein-ruhr.de

Ohne Rang
22 Beiträge
Thomas Tuttenuj Als Antwort am 27 März 2011 14:34
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

hallo,

da schliesse ich mich an:

in den Windows-Diensten mal nachsehen, ob der "SharePoint 2010 Timer" Dienst läuft.

Dann mal in der Central Administration unter

"Monitoring" --> [Timer Jobs] : "Check Job Status"  aufrufen.

Hier kannst Du durch verschiedene Filter an der linken Seite anzeigen lassen, welche Dienste erfolgreich, ... gelaufen sind.

Darüberhinaus dann über die "Monitoring" --> [Reporting] : "Configure Diagnostic Logging"  die Einstellung so ändern, dass Dir die Ereignisse im Windows EreignisLog angezeigt werden...

hope this helps,

gruss,

thomas

Ohne Rang
33 Beiträge
Martin Litschke Als Antwort am 27 März 2011 21:00
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Es war natürlich der Timer Dienst. Aus irgendeinem Grund startete der nicht mehr automatisch. Nunja das habe ich soweit hinbekommen. Leider bekomme ich von meinem Timer in den Logs immer folgende Fehlermeldung:

Ausnahme der Methode 'Execute' der Auftragsdefinition 'DruckTimerJob.DruckTimerJob' (ID 7d6de192-3c71-44fb-a49f-9619ef790a1f). Weitere Informationen finden Sie unten.

 

Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.

 

 

Interessant ist, das selbst wenn ich alles in der Methode Execute auskommentiere auch dieser Fehler kommt?

Folgend mein Code in Execute:

 

 

string PBIDS = "";

 

            // get a reference to the current site collection's content database

 

            SPWebApplication webApplication = this.Parent as SPWebApplication;

 

            SPContentDatabase contentDb = webApplication.ContentDatabases[contentDbId];

 

            // get a reference to the "ListTimerJob" list in the RootWeb of the first site collection in the content database

 

            SPList myList = contentDb.Sites[0].RootWeb.Lists["E098062F-C379-420F-94F1-28B1C9ABA0A2"];

 

 

            SPQuery query = new SPQuery();

 

            query.Query = String.Concat(

                "<Where>",

                "<Eq>",

                "<FieldRef Name='PBDruckAuftrag' />",

                "<Value Type='Text'>ja</Value>",

                "</Eq>",

                "</Where>");

 

            SPListItemCollection myItems = myList.GetItems(query);

 

            for (int i = 0; i < myItems.Count; i++)

            {

                myItems[i]["PBDruckAuftrag"] = "fertig";

                myItems[i].Update();

                PBIDS = PBIDS + myItems[i]["ID"] + ",";

 

 

            }

 

 

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 28 März 2011 08:12
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Da gibt es mehrere Möglichkeiten, die zur genannten NullReferenceException führen können. Du solltest da mal mit dem Debugger drüber.

[quote user="Martin Litschke"]SPWebApplication webApplication = this.Parent as SPWebApplication;[/quote]

Bist Du sicher, daß das paßt?

[quote user="Martin Litschke"]SPContentDatabase contentDb = webApplication.ContentDatabases[contentDbId];[/quote]

Woher hast Du die ID und bist Du sicher, daß es die richtige ist?

[quote user="Martin Litschke"]SPList myList = contentDb.Sites[0].RootWeb.Lists["E098062F-C379-420F-94F1-28B1C9ABA0A2"];[/quote]

contentDb.Sites[0] halte ich für am gefährlichsten. Du greifst damit über den Index auf die SiteCollection zu, aber die Reihenfolge der SiteCollections ist nicht festgelegt. D.h. Du bekommst willkürlich irgendeine SiteCollection.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
929 Beiträge
Thomas Östreich Als Antwort am 28 März 2011 08:14
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="Martin Litschke"]SPList myList = contentDb.Sites[0].RootWeb.Lists["E098062F-C379-420F-94F1-28B1C9ABA0A2"];[/quote]

Das ist eine Guid oder ist das dein Titel der Liste?

Guid id = new Guid(["E098062F-C379-420F-94F1-28B1C9ABA0A2");

SPList myLIst = contentDb.Sites[0].RootWeb.Lists[id];

Wobei ich sagen muss das das Leaks verursacht!

http://msdn.microsoft.com/en-us/library/aa973248(v=office.12).aspx

Ohne Rang
33 Beiträge
Martin Litschke Als Antwort am 28 März 2011 09:16
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hmm, habe die Infos bzgl des TimerJobs von folgender Homepage LINK

- die contentDbId wird der Execute Methode übergeben

- bei SPList myList = .... ist es die ID meiner Liste, habe es auch mit dem Namen der Liste probiert..

Wie kann ich das denn besser gestalten, ich wüsste auch so nicht wie ich auf die gewünschte Liste zugreifen kann?

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 28 März 2011 09:44
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Wie wär's mit der Standardmethode?

using (SPSite site = new SPSite(http://deineUrl/site)) {
using (SPWeb web = site.OpenWeb()) {
SPList list = web.Lists[Name oder Guid];
// mach was mit der Liste
}
}

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
33 Beiträge
Martin Litschke Als Antwort am 31 März 2011 11:30
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo,

habe das jetzt mal nach deinem Vorschlag getestet, welche ja auch deutlich besser ist habe mich da nochmals eingelesen ;)

Nun bekomme ich über die Ereignisanzeige folgende Meldung:

Ausnahme der Methode 'Execute' der Auftragsdefinition 'DruckTimerJob.DruckTimerJob' (ID 7bc47a60-1f5f-4773-9be2-e0b091579e0c). Weitere Informationen finden Sie unten.

Die Liste 'E098062F-C379-420F-94F1-28B1C9ABA0A2' ist in der Website mit der URL 'http://sp2010' nicht vorhanden.

 

Die Liste ist aber vorhanden das interessante ist, das ich das einem mit der GUID und mit dem Namen versucht habe und beides mal kommt dieser Fehler mit der Richtigen GUID der benötigten Liste. Die SPSite Url ist nur http://sp2010 da ich keine weiteren Unterseiten habe.

 

 

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 31 März 2011 11:34
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Wenn Du eine Liste über den Namen holen möchtest, übergibst Du einen String:
web.Lists["Listenname"]

Wenn Du dasselbe mit der ID machen möchtest, mußt Du auch (die korrekte) Guid verwenden:
web.Lists[new Guid("E098062F-C379-420F-94F1-28B1C9ABA0A2")]

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
33 Beiträge
Martin Litschke Als Antwort am 31 März 2011 15:43
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hm ok habe das jetzt soweit hinbekommen nachdem ich nochmal nen neues Projekt angelegt habe und das alles neu gemacht habe.Testweise habe ich einfach mal jede 2 Minuten ein neues Element in einer Liste anlegen lassen was auch funktioniert hat. Nun habe ich meinen code in Execute geändert und der legt immernoch jede 2 min ein neues Element an wenn ich den Code ausführe... kann es sein das der alte code irgendwie noch im SharePoint ist?? Obwohl ich das ausführen beendet habe und auch angezeigt wird das das Paket zurückgezogen wurde??

 

Wenn ich das ganze an den OWSTimer hänge habe ich das Problem, das wie bei MS beschrieben ich in der Zentraladministration das nicht ausführen kann, da es in der Liste der "Auftragsdefinitionen" Liste nicht auftaucht?

Ohne Rang
1714 Beiträge
C.Kaiser Als Antwort am 31 März 2011 16:05
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hast du den TimerJob Timer Dienst neu gestartet nach den Änderungen? :-)

Beste Grüße,
Christian

http://www.sharepoint-rhein-ruhr.de

Ohne Rang
33 Beiträge
Martin Litschke Als Antwort am 31 März 2011 16:35
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hm ne habe ich nicht, werde das gleich mal testen ;) Danke