2009-06-26 17 views
7

In einem Workflow möchte ich behandeln und Fehler wie nicht in der Lage, einen Benutzernamen suchen, dem ich eine Aufgabe zuweisen möchten. Damit der Benutzername nicht existiert, werde ich einen Administrator per E-Mail davon in Kenntnis setzen, ihn in den Workflow-Verlauf einschreiben und den Workflow dann beenden.Programmgesteuert Abbrechen eines SharePoint-Workflows

Frage ist, wie schließe ich den Workflow aus dem Workflow, als ob ich auf der SharePoint-Webseite auf die Schaltfläche "Workflow beenden" klicken würde.

[Update] Ich habe SPWorkflowManager.CancelWorkflow() versucht, die in der Tat den Workflow aber nicht sofort abbrechen. Was passiert, ist der Code zum Abbrechen von Läufen, aber dann geht mein Workflow weiter, um die nächste Aufgabe zu erstellen, und geht dann in den Ruhezustand, wenn er die nächsten Aufgaben der TaskChanged-Aktivität erreicht. Erst nach dem Einschlafen wird der Workflow beendet, nicht wenn CancelWorkflow aufgerufen wird.

Dies verursacht das offensichtliche Problem, dass ich nicht möchte, dass die nächste Aufgabe erstellt wird. Ich rufe CancelWorkflow auf, weil ich möchte, dass es dann und dort abbricht.

+0

Haben Sie jemals die Antwort auf diese Frage gefunden? –

+0

Afriad nicht. Sie können es so kennzeichnen, dass es den mittleren Workflow abbricht, aber nicht ab und zu. –

Antwort

9

Es gibt durchaus ein paar Vorschläge zu diesem MSDN Thema:

Terminating a SharePoint Workflow Programatically

Hier ist eine Blog-Post, die kurz und bündig mit den exakt gleichen Informationen enthält: Cancelling a SharePoint Workflow

Schließlich und am speziellsten , müssen Sie die statische Methode verwenden: SPWorkflowManager.CancelWorkflow(SPWorkflow workflowInstanceToBeCancelled)

EDIT

CancelWorkflow ist eine statische Klasse, daher habe ich den Aufruf geändert.

+0

Ich habe das versucht, aber es hat mein Problem nicht gelöst. Ich habe den Hauptpost aktualisiert, um dies zu reflektieren. –

+0

Wenn jemand anderes SPWorkflowManager.CancelWorkflow() versucht, könnten Sie es beim ersten Mal vermissen. Die Methode ist statisch, also möchten Sie sie in der Klasse selbst aufrufen und nicht im Workflow-Manager-Objekt, das von der SPSite abgerufen werden kann, so wie ich es versucht habe. –

+2

Aber es funktioniert richtig, wenn Sie es richtig aufrufen, oder? Das heißt, wenn Sie es auf der Klasse selbst SPWorkflowManager nennen.AbbrechenWorkflow (SPWorkflow workflowInstance); dann macht es, was es tun soll. – DevinB

0

Ich bin mir nicht sicher, ob dies der beste Weg ist, aber ich fange nur den Fehler, loggen Sie es und werfen Sie es dann erneut. Dies führt zu einem "Error Occurred" -Zustand in der Liste und stoppt sofort den Workflow.

protected override ActivityExecutionStatus Execute(ActivityExecutionContext provider) 
{ 
    try 
    { 
     // do work 
     // ... 
    } 
    catch (Exception e) 
    { 
     // log the error to the history list 
     // ... 
     throw; 
    } 

    return ActivityExecutionStatus.Closed; 
} 
0

Diese hübschen alte Frage, aber von selbst abzubrechen Workflow rechts weg leicht, dieses Stück Code verwendet:

SPWorkflowManager.CancelWorkflow(workflowProperties.Workflow); 
throw new Exception(); 

workflowProperties in diesem Beispiel

public SPWorkflowActivationProperties workflowProperties = 
      new SPWorkflowActivationProperties(); 

CancelWorkflow Methode Der Workflow wird als "Abbrechen" gekennzeichnet, wird jedoch nicht bis zum Anhalten (z. B. Warten auf ein geändertes Ereignis) oder Ausnahme im Workflow angehalten. Nächste Anweisung von throw new Exception() stoppt den Workflow und setzt den Status "Canceled".

Verwandte Themen