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.




Ge-"lock"-ter Task

Unbeantwortet Dieser Beitrag hat 11 Antworten

Ohne Rang
58 Beiträge
Rolf Schneider erstellt 25 Nov. 2010 17:55
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo,

beim Ausführen meines TimerJobs bekomme ich (wohl aus zu schnell aufeinanderfolgenden Starts) folgende Exception:

This task is currently locked by a running workflow and cannot be edited.

Wie bekomme ich den Lock wieder weg?

Ausserdem habe ich das Site Collection Feature mal deaktiviert um es wieder zu aktivieren. Letzteres wird mit folgender Fehlermeldung quittiert:

An object of the type MyJobDefinition named "My Job" already exists under the parent Microsoft.SharePoint.Administration.SPWebApplication named "my.intern".  Rename your object or delete the existing object.

Wie kann ich das existierende Objekt löschen? Wie neu anlegen?

Jeder Tipp ist willkommen...

Alle Antworten

Ohne Rang
1714 Beiträge
C.Kaiser Als Antwort am 25 Nov. 2010 18:04
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Bezüglich des Tasks:
Da war mal ein Bug) mit der "OnTaskChangedActivity". Wenn du diese Aktivität in deinem Workflow drin hast, lösch die mal raus (falls du sie nicht benötigst) und versuch es erneut (vgl. auch hier http://www.thorprojects.com/blog/archive/2007/02/13/Ten-issues-and-resolutions-for-sharepoint-workflow.aspx)

Zum Thema TimerJob:
Wenn du das Feature aktivierst prüfe zunächst ob ein TimerJob mit dem Titel exitiert und lösche diesen. Danach legst du erst den neuen an.

Beste Grüße,
Christian

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

Ohne Rang
58 Beiträge
Rolf Schneider Als Antwort am 25 Nov. 2010 18:20
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Reicht es, wenn ich die OnTaskChangedActivity deaktiviere und dann neu kompiliere?

Wo löscht man denn den TimerJob? Konnte ihn jetzt nur disablen.

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 26 Nov. 2010 08:28
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Einen TimerJob löschen geht nur mit eigenem Code.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
58 Beiträge
Rolf Schneider Als Antwort am 26 Nov. 2010 12:56
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Brute force: in Execute() des TimerJobs die Jobdefinition löschen funktioniert wohl. Das ist m.E. aber wirklich eine Lösung der übleren Sorte...

Danke für eure Antworten, die haben sehr geholfen, v.a. beim Verständnis!

Grüße,

Rolf

PS: Scope passe ich noch an, guter Tipp :) Das löst evtl. dann noch ein anderes Problem

Ohne Rang
1714 Beiträge
C.Kaiser Als Antwort am 26 Nov. 2010 13:03
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Wieso in Execute()?

Du kannst du in FeatureActivating oder FeatureDeactivating eine Methode implementieren, die prüft ob der TimerJob bereits besteht und wenn ja, dann löschen:

SPWebApplication webApp = new (SPWebApplication)properties.Feature.Parent; (falls das Feature unter eine Web Anwendung läuft)

foreach(SPTimerJob job in webApp.JobDefinitions)
{
     if(job.Name....)
             job.delete();
}

Beste Grüße,
Christian

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

Ohne Rang
58 Beiträge
Rolf Schneider Als Antwort am 26 Nov. 2010 13:39
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Genau diesen Code habe ich in FeatureDeativating drin. Nur was soll man tun, wenn nach Deaktivierung des Features der TimerJob noch vorhanden ist? Der Job stand auf 100% Complete und Status war "Successfull". Und ein neuer TimerJob konnte ja nicht gestartet werden.

Um ehrlich zu sein bin ich mir immer noch nicht ganz sicher was da genau faul war.

Nach Deaktivieren des Features konnte man das Feature nicht erneut aktivieren, weil es noch vorhanden war (laut Meldung). Selbst nach Deinstallation/Installation. Da war was ganz arg schiefgelaufen...

Ohne Rang
1714 Beiträge
C.Kaiser Als Antwort am 26 Nov. 2010 13:44
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hast du das ganze Dingen auch debugget und geschaut ob der Job gefunden und gelöscht wird? Bei mir läuft des ohne Probleme :-|

Beste Grüße,
Christian

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

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 26 Nov. 2010 13:46
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="Rolf Schneider"]Genau diesen Code habe ich in FeatureDeativating drin[/quote]

Wenn es wirklich genau der von Christian gepostete Code ist, dann geht das nicht. Man kann nicht mit foreach durch eine Collection gehen und dabei Elemente löschen - das ist nicht nur bei TimerJobs so :-)

Also einfach in der foreach-Schleife den TimerJob oder seine ID zwischenspeichern und erst danach löschen.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
1714 Beiträge
C.Kaiser Als Antwort am 26 Nov. 2010 13:49
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Also bei mir geht das auch in einer foreach :-)

Edit: generell kann ich mit foreach auch in collections löschen, ist hin und wieder halt nicht sinnvoll, aber in diesem Fall hab ich keine Probleme damit :-P

Beste Grüße,
Christian

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

Ohne Rang
58 Beiträge
Rolf Schneider Als Antwort am 26 Nov. 2010 13:54
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Prinzipiell kann das eigentlich nicht gehen, da man die Elemente, durch die man iteriert, nicht verändern kann. Ich habe den Code auch nur übernommen - vielleicht sollte ich das überdenken :)

Debuggen funktioniert leider nicht, das hätte ich auch gerne. Was genau muss auf dem Server installiert sein, damit man "Workflow Code" debuggen kann? Auf meiner Entwicklungs-Maschine kann ich debuggen, nur habe ich momentan auf einer anderen Farm Probleme, die ich auf der Entwicklungs-Farm nicht abbilden kann.

Ohne Rang
929 Beiträge
Thomas Östreich Als Antwort am 25 Nov. 2010 18:16
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

a. entweder mit einer Consolen Anwendung deinen TimerJob löschen
b. versuchen über CA deinen TimerJob zu löschen
c. wenn nix geht da es sein kann das SharePoint sagt das er Teil eines Features ist deine DLL anpassen und in Feature Activated prüfen ob dein TimerJob da ist und dann löschen aber best practices ist es diesen bei Feature Deactivating zu löschen

Ich würde aber einen TimerJob nicht im Scope Site bereitstellen sondern nur im Scope WebApplication, denn was passiert wenn du dein Feature in der selben WebApplication aber einer anderen SiteCollection aktivierst? ...

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