Schritt 3: Erstellen des Workflows in SharePoint Server 2010 (ECM)

Letzte Änderung: Mittwoch, 7. September 2011

Gilt für: SharePoint Server 2010

In den ersten beiden Teilen dieser exemplarischen Vorgehensweise, Schritt 1: Erstellen eines Workflowinitiierungsformulars in SharePoint Server 2010 (ECM) und Schritt 2: Erstellen des Bearbeitungsformulars für Workflowaufgaben, haben Sie die Workflowinitiierung und Aufgabenbearbeitungsformulare mithilfe von Microsoft InfoPath 2010 erstellt. Im letzten Schritt dieser exemplarischen Vorgehensweise erstellen Sie ein sequenzielles Workflowprojekt und die Codekomponenten des Workflows mithilfe von Visual Studio 2010 Workflow Designer.

Voraussetzungen

Zum Abschluss dieses Verfahrens müssen Sie die Verfahren in den folgenden Themen ausgeführt haben:

HinweisHinweis

Wie bei jeder Entwicklung mit Microsoft SharePoint Server 2010 sollten Sie Workflows mithilfe einer Entwicklungsumgebung erstellen, die der Umgebung, in der der Code bereitgestellt wird, möglichst ähnlich ist. Es ist zwar nicht immer möglich, eine Produktionsumgebung mit Entwicklerressourcen vollständig zu replizieren, wenn Sie jedoch sicherstellen, dass sich die beiden Umgebungen so ähnlich wie möglich sind, werden die Entwicklungs- und Debuggingprozesse vereinfacht. Für die für SharePoint Server 2010 spezifischen Workflowaktivitäten ist es beispielsweise erforderlich, dass SharePoint Foundation und SharePoint Server 2010 auf dem Computer installiert sind, der zum Entwickeln der Workflows verwendet wird.

So erstellen Sie ein neues Workflowprojekt in SharePoint Server 2010

  1. Öffnen Sie Visual Studio.

  2. Wählen Sie im Menü Datei die Option Neu aus, und klicken Sie auf Projekt.

  3. Wählen Sie im Dialogfeld Neues Projekt unter Installierte Vorlagen die SharePoint 2010-Vorlagen aus.

  4. Wählen Sie die Vorlage Sequenzieller Workflow aus.

  5. Geben Sie einen Namen für das Projekt ein, und klicken Sie dann auf OK.

    DerAssistent zum Anpassen von SharePoint wird gestartet.

  6. Legen Sie für diesen Workflow fest, dass er als Farmlösung bereitgestellt werden kann. Klicken Sie auf Weiter.

  7. Geben Sie den Namen des Workflows und ob er für die Listen- oder Websiteebene ausgelegt werden soll an. Für diese exemplarische Vorgehensweise erstellen Sie einen Listenworkflow.

    HinweisHinweis

    Ein Listenworkflow kann nur für eine angegebene Liste oder Bibliothek verwendet werden, aber ein Websiteworkflow ist für eine komplette Websitesammlung verfügbar.

  8. Für den programmgesteuerten Zugriff auf das XML-Schema, das die in den ersten beiden Teilen dieser exemplarischen Vorgehensweise erstellten Formulare darstellt, müssen Sie die in Schritt 1: Erstellen eines Workflowinitiierungsformulars in SharePoint Server 2010 (ECM) erstellte Klassendatei hinzufügen.

    Klicken Sie imProjektmappen-Explorer mit der rechten Maustaste auf den Projektnamen. Zeigen Sie auf Hinzufügen, und wählen Sie dann Vorhandenes Element aus. Navigieren Sie im Dialogfeld Vorhandenes Element hinzufügen zu dem Dateispeicherort, an dem Sie die Datei InitiationForm.cs oder InitiationForm.vb erstellt haben, und klicken Sie auf Hinzufügen.

Hinzufügen und Konfigurieren von Workflowaktivitäten

Nachdem nun das neue Workflowprojekt erstellt wurde und Sie die Formularschemareferenz hinzugefügt haben, können Sie mit dem Entwerfen des Workflows beginnen.

In diesem Workflow sind wie in der folgenden Tabelle dargestellt insgesamt fünf Aktivitäten vorhanden.

Aktivität

Beschreibung

OnWorkflowActivated

Wird bei Aktivierung des Workflows ausgeführt.

CreateTask

Erstellt eine Workflowaufgabe und weist diese einem Benutzer zu.

While

Führt die enthaltenen Aktivitäten aus, bis eine bestimmte Bedingung nicht mehr true ergibt.

OnTaskChanged

Wird beim Ändern einer Workflowaufgabe ausgeführt.

CompleteTask

Legt die Workflowaufgabe als beendet fest.

So legen Sie die Eigenschaften der "OnWorkflowActivation"-Aktivität fest

  1. Legen Sie die Invoked-Eigenschaft der OnWorkflowActivated-Aktivität fest.

    Als Sie das Workflowprojekt mit der Projektvorlage für einen sequenziellen SharePoint Foundation-Workflow erstellt haben, wurde von Visual Studio automatisch die erste Aktivität der Designoberfläche hinzugefügt und eine Methode in der CodeBehind-Datei erstellt. Diese erste Aktivität heißt OnWorkflowActivated und besitzt den Standardnamen onWorkflowActivated1. Alle SharePoint Foundation 2010-Workflows müssen mit dieser Aktivität beginnen.

    HinweisHinweis

    Falls die grafische Darstellung des Workflows nicht angezeigt wird, doppelklicken Sie imProjektmappen-Explorer auf die Datei Workflow1.cs. Falls im Workflow Designer weiterhin keine OnWorkflowActivated-Aktivität automatisch vervollständigt wurde, stellen Sie sicher, dass Sie die richtige Vorlage für einen sequenziellen SharePoint Foundation-Workflow verwenden.

    1. Wählen Sie im Workflow Designer-Fenster die onWorkflowActivated1-Aktivität aus.

    2. Geben Sie im Fenster Eigenschaften für die Invoked-Eigenschaft onWorkflowActivated ein, und drücken Sie dann die EINGABETASTE. Von Visual Studio wird die CodeBehind-Datei geöffnet und die OnWorkflowActivated-Methode erstellt, falls sie noch nicht vorhanden ist.

    HinweisHinweis

    Beachten Sie im Eigenschaftenfenster, dass die CorrelationToken-Eigenschaft auf workflowToken bzw. die Path-Eigenschaft auf workflowProperties festgelegt ist. Dies sind Workflowvariablen. Sie ermöglichen es, dass Daten vom Workflowmodul an die entsprechende Workflowinstanz weitergeleitet werden. Das workflowProperties-Variablenobjekt wird initialisiert, wenn die Workflowinstanz aktiviert wird. Dazu zählen Eigenschaften, die in allen Workflows verwendet werden, z. B. die Workflowinstanz-ID und das Listenelement, für das die Workflowinstanz ausgeführt wird. Es können auch benutzerdefinierte Eigenschaften enthalten sein, die an ein benutzerdefiniertes Workflowinitiierungsformular übergeben werden. In diesem Fall enthält die workflowProperties-Variable die Initiierungseigenschaften der Workflowinstanz.

  2. Stellen Sie sicher, dass die Codedatei die richtigen Verweise enthält. Falls die Verweise nicht vorhanden sind, fügen Sie die folgenden using-Anweisungen hinzu.

    using System.Xml;
    using System.Xml.Serialization;
    using Microsoft.SharePoint.Workflow
    
    Imports System.Xml
    Imports System.Xml.Serialization
    Imports Microsoft.SharePoint.Workflow
    
  3. Fügen Sie der Workflow1-Klasse die folgenden Deklarationen von Zeichenfolgenvariablen hinzu.

    private String assignee = default(String);
    private String instructions = default(String);
    private String comments = default(String);
    
    Private assignee As String = Nothing
    Private instructions As String = Nothing
    Private comments As String = Nothing
    
  4. Fügen Sie der Workflow1-Klassendatei den folgenden Code hinzu.

    namespace WorkflowLibrary1
    {
       public sealed partial class Workflow1: SharePointSequentialWorkflowActivity
       {
          public Workflow1()
          {
             InitializeComponent();
          }
    
       public Guid workflowID = default(System.Guid);
          public Microsoft.SharePoint.Workflow.SPWorkflowActivationProperties 
            workflowProps = new 
            Microsoft.SharePoint.Workflow.SPWorkflowActivationProperties();
    }
    
    Namespace WorkflowLibrary1
       Public NotInheritable Partial Class Workflow1
          Inherits SharePointSequentialWorkflowActivity
         Public Sub New()
           InitializeComponent()
         End Sub
       Public workflowID As Guid = Nothing
         Public workflowProps As New Microsoft.SharePoint.Workflow.SPWorkflowActivationProperties()
       End Class
    End Namespace
    
  5. Fügen Sie der onWorkflowActivated-Methode den folgenden Code hinzu:

    private void onWorkflowActivated(object sender, ExternalDataEventArgs e)
    {
       workflowID = workflowProps.WorkflowId;
       XmlSerializer serializer = new XmlSerializer(typeof(InitForm));
       XmlTextReader reader = new XmlTextReader (new System.IO.StringReader(workflowProps.InitiationData));
       InitForm initform = (InitForm) serializer.Deserialize(reader);
    
       assignee = initform.assignee;
       instructions = initform.instructions;
       comments = initform.comments;
    }
    
    Private Sub onWorkflowActivated(ByVal sender As Object, ByVal e As ExternalDataEventArgs)
       workflowID = workflowProps.WorkflowId
      Dim serializer As New XmlSerializer(GetType(InitForm))
      Dim reader As New XmlTextReader(New System.IO.StringReader(workflowProps.InitiationData))
      Dim initform As InitForm = CType(serializer.Deserialize(reader), InitForm)
       assignee = initform.assignee
     instructions = initform.instructions
      comments = initform.comments
    End Sub
    

So fügen Sie eine "CreateTask"-Aktivität hinzu

  1. Ziehen Sie aus der Toolbox in Visual Studio im Abschnitt SharePoint Foundation eine CreateTask-Aktivität auf die Workflowdesignoberfläche, und fügen Sie sie direkt unter der onWorkflowActivated1-Aktivität hinzu.

  2. Legen Sie die Eigenschaften der CreateTask-Aktivität fest.

    1. Zeigen Sie bei ausgewählter CreateTask-Aktivität das Fenster Eigenschaften an.

    2. Geben Sie für die CorrelationToken-Eigenschaft taskToken ein.

    3. Geben Sie für die MethodInvoking-Eigenschaft createTask ein.

    HinweisHinweis

    Beachten Sie, dass taskToken, taskId und taskProps Variablennamen sind. Die taskToken-Variable ist ein Korrelationstoken, mit dem SharePoint Server 2010 Daten an die entsprechende Aufgabe in der Workflowinstanz weiterleiten kann. Die taskId-Variable ist eine GUID, mit der die Aufgabe innerhalb der Workflowinstanz identifiziert wird. Die taskProps-Variable enthält die Eigenschaften, die zum Initialisieren der Aufgabe verwendet werden.

  3. Stellen Sie sicher, dass die Codedatei die folgenden Deklarationen besitzt. Sie sollten von Visual Studio automatisch erstellt werden. Falls sie jedoch nicht vorhanden sind, müssen Sie sie hinzufügen.

    public Microsoft.SharePoint.Workflow.SPWorkflowTaskProperties afterProps = new Microsoft.SharePoint.Workflow.SPWorkflowTaskProperties();
    public Microsoft.SharePoint.Workflow.SPWorkflowTaskProperties beforeProps = new Microsoft.SharePoint.Workflow.SPWorkflowTaskProperties();
    
    Public afterProps As New Microsoft.SharePoint.Workflow.SPWorkflowTaskProperties()
    Public beforeProps As New Microsoft.SharePoint.Workflow.SPWorkflowTaskProperties()
    
  4. Fügen Sie der CodeBehind-Seite den folgenden Code hinzu:

    private void createTask(object sender, EventArgs e)
    {
       taskID = Guid.NewGuid();
       taskProps.Title = "Demo Task";
       taskProps.AssignedTo = assignee;
       taskProps.Description = instructions;
       taskProps.ExtendedProperties["comments"] = comments;
       taskProps.ExtendedProperties["instructions"] = instructions;
    }
    
    Private Sub createTask(ByVal sender As Object, ByVal e As EventArgs)
       taskID = Guid.NewGuid()
       taskProps.Title = "Demo Task"
       taskProps.AssignedTo = assignee
       taskProps.Description = instructions
       taskProps.ExtendedProperties("comments") = comments
       taskProps.ExtendedProperties("instructions") = instructions
    End Sub
    

An dieser Stelle im Workflowprozess wurde die Aufgabe erstellt und einem Benutzer zugewiesen. Nun müssen Sie Aktivitäten hinzufügen, mit deren Hilfe der Workflow auf die Beendigung der Aufgabe durch diesen Benutzer warten kann. Hierzu verwenden Sie Aktivitäten, die die logische Flusssteuerung für den Workflow darstellen.

So fügen Sie eine "While"-Aktivität hinzu

  1. Ziehen Sie aus der Toolbox in Visual Studio eine While-Aktivität auf die Workflowdesignoberfläche, und fügen Sie sie direkt unter der createTask1-Aktivität hinzu.

    Durch die While-Aktivität werden die Aktivitäten darin in einer Schleife ausgeführt, solange die von ihr ausgewertete Bedingung true ergibt. In diesem Beispiel wird die Schleife um das Aufgabenbearbeitungsereignis ausgeführt, bis der Benutzer die Aufgabe explizit beendet.

  2. Legen Sie die Eigenschaften für die While-Aktivität fest.

    1. Legen Sie die Condition-Eigenschaft auf Code Condition fest.

      Wenn Sie diese Eigenschaft auf Code Condition festlegen, wird dem Workflow angezeigt, dass eine benutzerdefinierte Funktion erstellt wurde und zum Verarbeiten der while1-Aktivität verwendet werden soll.

      Wenn Sie die Condition-Untereigenschaft auf notFinished festlegen, wird dadurch die auszuführende Methode festgelegt. Von der Methode muss ein Boolean Wert zurückgegeben werden.

So fügen Sie eine "OnTaskChanged"-Aktivität hinzu

  1. Ziehen Sie aus der Toolbox in Visual Studio eine OnTaskChanged-Aktivität auf die Workflowdesignoberfläche, und fügen Sie sie in der while1-Aktivitätsschleife hinzu.

  2. Legen Sie die Eigenschaften für die onTaskChanged1-Aktivität fest.

    1. Erweitern Sie die AfterProperties-Eigenschaftensammlung. Geben Sie für die Name-Eigenschaft Workflow1 und für die Path-Eigenschaft afterProps ein.

    2. Erweitern Sie die BeforeProperties-Eigenschaftensammlung. Geben Sie für die Name-Eigenschaft Workflow1 und für die Path-Eigenschaft beforeProps ein.

    3. Geben Sie für die CorrelationToken-Eigenschaft taskToken und für die CorrelationTokenPath-EigenschaftWorkflow1 ein.

    4. Geben Sie für die Invoked-Eigenschaft onTaskChanged ein. Diese Methode wird aufgerufen, wenn die onTaskChanged1-Aktivität ausgeführt wird.

    5. Erweitern Sie die TaskId-Eigenschaftensammlung. Geben Sie für die Name-Eigenschaft Workflow1 und für die Path-Eigenschaft taskId ein.

      HinweisHinweis

      Beachten Sie, dass die Eigenschaften CorrelationToken und TaskId auf die Variablen festgelegt werden, die in der createTask1-Aktivität verwendet werden. Mit dieser Einstellung wird diese Aktivität an dieselbe Aufgabe gebunden, die von der createTask1-Aktivität erstellt wurde. Und es wird sichergestellt, dass der Workflow das Änderungsereignis für die richtige Aufgabe empfängt.

      Beachten Sie darüber hinaus, dass afterProps und beforeProps Objektvariablen sind. Die afterProps-Variable stellt die Aufgabeneigenschaften nach Auftreten des Aufgabenänderungsereignisses dar, während beforeProps die Aufgabeneigenschaften vor Auftreten des Aufgabenänderungsereignisses darstellt.

  3. Visual Studio fügt die entsprechenden Variablendeklarationen automatisch dem Workflowcode hinzu. Wenn sie jedoch nicht automatisch erstellt werden, müssen Sie der Klasse den folgenden Code hinzufügen.

    public Microsoft.SharePoint.Workflow.SPWorkflowTaskProperties afterProps = new Microsoft.SharePoint.Workflow.SPWorkflowTaskProperties();
    public Microsoft.SharePoint.Workflow.SPWorkflowTaskProperties beforeProps = new Microsoft.SharePoint.Workflow.SPWorkflowTaskProperties();
    
    Public afterProps As New Microsoft.SharePoint.Workflow.SPWorkflowTaskProperties()
    Public beforeProps As New Microsoft.SharePoint.Workflow.SPWorkflowTaskProperties()
    
  4. Fügen Sie der onTaskChanged-Methode Code hinzu.

    1. Fügen Sie der partiellen Klasse des Workflows die folgende Variablendeklaration hinzu:

      private bool isFinished = false
      
      Private isFinished As Boolean = False
      
    2. Fügen Sie Code zum Festlegen der isFinished-Variablen hinzu. Diese Informationen werden vom Aufgabenbearbeitungsformular an den Workflow übergeben.

      HinweisHinweis

      Beachten Sie, dass das Aufgabenbearbeitungsformular ein Kontrollkästchen mit dem Namen isFinished enthält. Das Kontrollkästchen besitzt einen Boolean Wert, der als benutzerdefinierte Eigenschaft in der afterProps-Variablen gespeichert wird. Die onTaskChanged-Methode muss auf diese benutzerdefinierte Eigenschaft in der afterProps-Variablen zugreifen.

      private void onTaskChanged(object sender, ExternalDataEventArgs e)
      {
         isFinished = bool.Parse(afterProps.ExtendedProperties["isFinished"].ToString());
      }
      
      Private Sub onTaskChanged(ByVal sender As Object, ByVal e As ExternalDataEventArgs)
         isFinished = Boolean.Parse(afterProps.ExtendedProperties("isFinished").ToString())
      End Sub
      
  5. Fügen Sie der notFinished-Methode Code hinzu.

    Bei jeder Änderung der Aufgabe ruft die while1-Aktivität diese Methode auf, um zu bestimmen, ob ihre Bedingung erfüllt ist. Solange die Result-Eigenschaft des ConditionalEventArgs-Objekts true ergibt, wartet die while1-Aktivität weiter.

    Fügen Sie Code hinzu, mit dem die Result-Eigenschaft des ConditionalEventArgs-Objekts festgelegt wird:

    private void notFinished(object sender, ConditionalEventArgs e)
    {
       e.Result
    }
    
    Private Sub notFinished(ByVal sender As Object, ByVal e As ConditionalEventArgs)
       e.Result
    End Sub
    

    Nun behandelt die onTaskChanged1-Aktivität jedes Mal, wenn der Benutzer die Aufgabe bearbeitet, das Aufgabenänderungsereignis. Sie ruft die onTaskChanged-Methode auf, die die Aufgabeneigenschaften untersucht und die isFinished-Variable so festlegt, dass dargestellt wird, ob der Benutzer die Aufgabe als abgeschlossen gekennzeichnet hat. Anschließend ruft die while1-Aktivität die notFinished-Methode auf, wodurch das Ergebnis des Ereignisses auf das Gegenteil der isFinished-Variablen festgelegt wird. Falls isFinished den Wert false zurückgibt, wird das Ereignisergebnis auf true festgelegt, und die while1-Aktivität wartet weiter auf Aufgabenänderungen. Falls isFinished den Wert true besitzt, wird das Ereignisergebnis auf false festgelegt, und die while1-Aktivität wird beendet. Der Workflow wird dann mit der nächsten Aktivität fortgesetzt.

So fügen Sie eine "CompleteTask"-Aktivität hinzu

  1. Ziehen Sie aus der Toolbox in Visual Studio eine CompleteTask-Aktivität auf die Workflowdesignoberfläche, und fügen Sie sie direkt unter der while1-Aktivität hinzu.

  2. Legen Sie die Eigenschaften für die CompleteTask-Aktivität fest.

    1. Geben Sie für die CorrelationToken-Eigenschaft taskToken ein.

    2. Geben Sie für die CorrelationToken Path-Eigenschaft Workflow1 ein.

    3. Geben Sie für die TaskId Name-Eigenschaft Workflow1 ein.

    4. Geben Sie für die TaskId Path-Eigenschaft taskId ein.

    HinweisHinweis

    Beachten Sie, dass die Eigenschaften CorrelationToken und TaskId auf die Variablen festgelegt werden, die in der createTask1-Aktivität verwendet werden. Dadurch wird diese Aktivität an dieselbe Aufgabe gebunden, die durch die createTask1-Aktivität erstellt wurde.

Nun ist der Workflow abgeschlossen, und Sie können den Workflow und die damit verbundenen Formulare testen, debuggen und bereitstellen.

Weitere Schritte

Wenn Sie den Workflow für eine Zuordnung in Dokumentbibliotheken in Office SharePoint Server 2007 zur Verfügung stellen möchten, müssen Sie die Workflowassembly noch kompilieren, den Workflow als Feature installieren und das Workflowfeature auf der ausgewählten Website aktivieren.

Informationen zum Ausführen dieser folgenden Schritte finden Sie unter Vorgehensweise: Bereitstellen einer Workflowvorlage im SharePoint Foundation Software Development Kit (SDK).

Wenn Sie den Workflow einer Dokumentbibliothek oder Liste zugeordnet haben, können Sie den Workflow mithilfe von Visual Studio 2010 Workflow Designer debuggen. Weitere Informationen hierzu finden Sie unter Gewusst wie: Debuggen des SharePoint Foundation-Workflows im SharePoint Foundation SDK.

Siehe auch

Aufgaben

Exemplarische Vorgehensweise für SharePoint Server 2010 (ECM): Erstellen von SharePoint 2010-Workflows mithilfe von InfoPath-Formularen in Visual Studio

Konzepte

Workflows in SharePoint Server 2010

InfoPath-Formulare für Workflows