Exemplarische Vorgehensweise: Erstellen eines Workflows mit Zuordnungs- und Initiierungsformularen

In dieser exemplarischen Vorgehensweise wird veranschaulicht, wie ein grundlegender sequenzieller Workflow erstellt wird, der die Verwendung von Zuordnungs- und Initiierungsformularen integriert. Dabei handelt es sich um ASPX-Formulare, die das Hinzufügen von Parametern zu einem Workflow ermöglichen, wenn dieser erstmals vom SharePoint-Administrator zugeordnet wird (das Zuordnungsformular) und wenn der Workflow vom Benutzer gestartet wird (das Initiierungsformular).

In dieser exemplarischen Vorgehensweise wird ein Szenario beschrieben, in dem ein Benutzer einen Genehmigungsworkflow für Spesenabrechnungen mit den folgenden Anforderungen erstellen möchte:

  • Wenn der Workflow einer Liste zugeordnet wird, wird der Administrator über ein Zuordnungsformular aufgefordert, einen Höchstbetrag in Dollar für Spesenabrechnungen einzugeben.

  • Die Mitarbeiter laden ihre Spesenabrechnungen in der Liste Freigegebene Dokumente hoch, starten den Workflow und geben dann den Gesamtbetrag im Workflowinitiierungsformular ein.

  • Wenn der Gesamtbetrag der Spesenabrechnung eines Mitarbeiters die vordefinierte Höchstgrenze des Administrators überschreitet, wird eine Aufgabe erstellt, damit der Vorgesetzte des Mitarbeiters die Spesenabrechnung genehmigen kann. Falls der Gesamtbetrag der Spesenabrechnung eines Mitarbeiters jedoch kleiner oder gleich der Höchstgrenze für Spesen ist, wird eine automatisch genehmigte Meldung in die Verlaufsliste des Workflows geschrieben.

In dieser exemplarischen Vorgehensweise werden die folgenden Aufgaben veranschaulicht:

  • Erstellen eines sequenziellen Workflowprojekts vom Typ SharePoint-Listendefinition in Visual Studio.

  • Erstellen eines Workflowzeitplans.

  • Behandeln von Workflowaktivitätsereignissen.

  • Erstellen von Zuordnungs- und Initiierungsformularen für Workflows.

  • Zuordnen des Workflows.

  • Manuelles Starten des Workflows.

Tipp

Obwohl in dieser exemplarischen Vorgehensweise ein sequenzielles Workflowprojekt verwendet wird, ist der Vorgang für Zustandsautomatworkflows identisch.

Außerdem werden auf Ihrem Computer möglicherweise andere Namen oder Speicherorte für die Benutzeroberflächenelemente von Visual Studio angezeigt als die in den folgenden Anweisungen aufgeführten. Die Elemente werden durch die verwendete Ausgabe von Visual Studio und die gewählten Einstellungen bestimmt. Weitere Informationen finden Sie unter Arbeiten mit Einstellungen.

Vorbereitungsmaßnahmen

Zum Durchführen dieser exemplarischen Vorgehensweise benötigen Sie die folgenden Komponenten:

Erstellen eines sequenziellen Workflowprojekts für SharePoint.

Erstellen Sie zunächst in Visual Studio ein sequenzielles Workflowprojekt. Ein sequenzieller Workflow ist ein Abfolge von Schritten, die der Reihe nach ausgeführt werden, bis die letzte Aktivität fertig gestellt wurde. In diesem Verfahren erstellen Sie einen sequenziellen Workflow, der für die Liste Freigegebene Dokumente in SharePoint gilt. Mit dem Workflow-Assistenten können Sie den Workflow entweder der Websitedefinition oder der Listendefinition zuordnen und bestimmen, wann der Workflow starten soll.

So erstellen Sie ein sequenzielles Workflowprojekt für SharePoint:

  1. Zeigen Sie das Dialogfeld Neues Projekt an, indem Sie im Menü Datei auf Neu zeigen und dann auf Neues Projekt klicken.

  2. Erweitern Sie unter Visual C# oder Visual Basic den Knoten SharePoint, und klicken Sie dann auf 2010.

  3. Wählen Sie im Bereich Vorlagen die Vorlage Sequenzieller Workflow aus.

  4. Geben Sie im Feld Name den Namen "ExpenseReport" ein, und klicken Sie dann auf OK.

    Der Assistent zum Anpassen von SharePoint wird angezeigt.

  5. Klicken Sie auf der Seite Welche lokale Website soll zum Debuggen verwendet werden? auf Weiter, um die Standardsite zu übernehmen.

    In diesem Schritt wird auch die Vertrauensebene für die Lösung als Farmlösung festgelegt, wobei es sich um die einzige verfügbare Option für Workflowprojekte handelt.

  6. Akzeptieren Sie auf der Seite Workflownamen für das Debugging angeben den Standardnamen (ExpenseReport - Workflow1). Übernehmen Sie den Standardwert für den Workflowvorlagentyp (Listenworkflow). Klicken Sie auf Weiter.

  7. Deaktivieren Sie auf der Seite Soll Visual Studio den Workflow in einer Debugsitzung automatisch zuordnen? das Kontrollkästchen für die automatische Zuordnung der Workflowvorlage, sofern dieses aktiviert ist.

    Dieser Schritt ermöglicht es Ihnen, den Workflow später manuell der Liste Freigegebene Dokumente zuzuordnen, in der das Zuordnungsformular angezeigt wird.

  8. Klicken Sie auf Fertig stellen.

Hinzufügen eines Zuordnungsformulars zum Workflow

Erstellen Sie dann ein ASPX-Zuordnungsformular, das angezeigt wird, wenn der SharePoint-Administrator den Workflow erstmals einem Spesenabrechnungsdokument zuordnet.

So fügen Sie dem Workflow ein Zuordnungsformular hinzu

  1. Klicken Sie im Projektmappen-Explorer auf den Knoten Workflow1.

  2. Klicken Sie im Menü Projekt auf Neues Element hinzufügen, um das Dialogfeld Neues Element hinzufügen anzuzeigen.

  3. Erweitern Sie in der Strukturansicht des Dialogfelds entweder Visual C# oder Visual Basic (abhängig von der Projektsprache), erweitern Sie den Knoten SharePoint, und klicken Sie dann auf 2010.

  4. Wählen Sie in der Liste der Vorlagen Workflowzuordnungsformular aus.

  5. Geben Sie im Feld Name den Namen "ExpenseReportAssocForm.aspx" ein.

  6. Klicken Sie auf die Schaltfläche Hinzufügen, um dem Projekt das Formular hinzuzufügen.

Entwerfen des Zuordnungsformulars und Schreiben von Code für das Zuordnungsformular

In diesem Verfahren fügen Sie dem Zuordnungsformular Funktionen hinzu, indem Sie Steuerelemente und Code hinzufügen.

So entwerfen Sie das Zuordnungsformular und schreiben Code für das Zuordnungsformular

  1. Suchen Sie im Zuordnungsformular (ExpenseReportAssocForm.aspx) nach dem asp:Content-Element mit ID="Main".

  2. Fügen Sie direkt nach der ersten Zeile in diesem Inhaltselement den folgenden Code hinzu, um eine Bezeichnung und ein Textfeld zu erstellen, das zur Eingabe der zu genehmigenden Spesenhöchstgrenze auffordert (AutoApproveLimit):

    <asp:Label ID="lblAutoApproveLimit" Text="Auto Approval Limit:" runat="server" />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    <asp:TextBox ID="AutoApproveLimit" runat="server" />
    <br /><br />
    
  3. Erweitern Sie im Projektmappen-Explorer die Datei ExpenseReportAssocForm.aspx, um deren abhängigen Dateien anzuzeigen.

    Tipp

    Wenn es sich um ein Visual Basic-Projekt handelt, müssen Sie auf die Schaltfläche Alle Dateien anzeigen klicken, um diesen Schritt auszuführen.

  4. Klicken Sie mit der rechten Maustaste auf die Datei ExpenseReportAssocForm.aspx, und wählen Sie Code anzeigen aus.

  5. Ersetzen Sie die GetAssociationData-Methode durch Folgendes:

    Private Function GetAssociationData() As String
        ' TODO: Return a string that contains the association data that 
        ' will be passed to the workflow. Typically, this is in XML 
        ' format.
        Return Me.AutoApproveLimit.Text
    End Function
    
    private string GetAssociationData()
    {
        // TODO: Return a string that contains the association data that 
        // will be passed to the workflow. Typically, this is in XML 
        // format.
        return this.AutoApproveLimit.Text;
    }
    

Hinzufügen eines Initiierungsformulars zum Workflow

Erstellen Sie jetzt das Initiierungsformular, das angezeigt wird, wenn Benutzer den Workflow für ihre Spesenabrechnungen ausführen.

So erstellen Sie ein Initiierungsformular

  1. Klicken Sie im Projektmappen-Explorer auf den Knoten Workflow1.

  2. Klicken Sie im Menü Projekt auf Neues Element hinzufügen, um das Dialogfeld Neues Element hinzufügen anzuzeigen.

  3. Erweitern Sie in der Strukturansicht des Dialogfelds entweder Visual C# oder Visual Basic (abhängig von der Projektsprache), erweitern Sie den Knoten SharePoint, und klicken Sie dann auf 2010.

  4. Wählen Sie in der Liste der Vorlagen Workflowinitiierungsformular aus.

  5. Geben Sie im Feld Name den Namen "ExpenseReportInitForm.aspx" ein.

  6. Klicken Sie auf die Schaltfläche Hinzufügen, um dem Projekt das Formular hinzuzufügen.

Entwerfen des Initiierungsformulars und Schreiben von Code für das Initiierungsformular

Fügen Sie dem Initiierungsformular dann Funktionen hinzu, indem Sie Steuerelemente und Code hinzufügen.

So schreiben Sie Code für das Initiierungsformular

  1. Suchen Sie im Initiierungsformular (ExpenseReportInitForm.aspx) nach dem asp:Content-Element mit ID="Main".

  2. Fügen Sie direkt nach der ersten Zeile in diesem Inhaltselement den folgenden Code hinzu, um eine Bezeichnung und ein Textfeld zu erstellen, das die zu genehmigende Spesenhöchstgrenze anzeigt (AutoApproveLimit), die im Zuordnungsformular eingegeben wurde, sowie um eine weitere Bezeichnung und ein weiteres Textfeld zu erstellen, das zur Eingabe der zu genehmigenden Spesenhöchstgrenze auffordert (ExpenseTotal):

    <asp:Label ID="lblAutoApproveLimit" Text="Auto Approval Limit:" runat="server" />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    <asp:TextBox ID="AutoApproveLimit" ReadOnly="true" runat="server" />
    <br /><br />
    <asp:Label ID="lblExpenseTotal" Text="Expense Total:" runat="server" />
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    <asp:TextBox ID="ExpenseTotal" runat="server" />
    <br /><br />
    
  3. Erweitern Sie im Projektmappen-Explorer die Datei ExpenseReportInitForm.aspx, um deren abhängigen Dateien anzuzeigen.

  4. Klicken Sie mit der rechten Maustaste auf die Datei ExpenseReportInitForm.aspx, und wählen Sie Code anzeigen aus.

  5. Ersetzen Sie die Page_Load-Methode durch das folgende Beispiel:

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As 
      EventArgs) Handles Me.Load
        InitializeParams()
        Me.AutoApproveLimit.Text = workflowList.WorkflowAssociations(New 
          Guid(associationGuid)).AssociationData
        ' Optionally, add code here to pre-populate your form fields.
    End Sub
    
    protected void Page_Load(object sender, EventArgs e)
    {
        InitializeParams();
        this.AutoApproveLimit.Text = 
          workflowList.WorkflowAssociations[new 
          Guid(associationGuid)].AssociationData;
    }
    
  6. Ersetzen Sie die GetInitiationData-Methode durch das folgende Beispiel:

    ' This method is called when the user clicks the button to start the workflow.
    Private Function GetInitiationData() As String
        Return Me.ExpenseTotal.Text
        ' TODO: Return a string that contains the initiation data that 
        ' will be passed to the workflow. Typically, this is in XML 
        ' format.
        Return String.Empty
    End Function
    
    // This method is called when the user clicks the button to start the workflow.        
    private string GetInitiationData()
    {
        // TODO: Return a string that contains the initiation data that 
        // will be passed to the workflow. Typically, this is in XML 
        // format.
        return this.ExpenseTotal.Text;
    }
    

Anpassen des Workflows

Passen Sie danach den Workflow an. Später ordnen Sie dem Workflow zwei Formulare zu.

So passen Sie den Workflow an

  1. Zeigen Sie den Workflow im Workflow-Designer an, indem Sie im Projekt auf Workflow1 doppelklicken.

  2. Erweitern Sie in der Toolbox den Knoten Windows Workflow v3.0, und suchen Sie die IfElse-Aktivität.

  3. Fügen Sie dem Workflow diese Aktivität hinzu, indem Sie sie in den Designer ziehen und direkt unter der onWorkflowActivated1-Aktivität im Workflow ablegen. Hiermit wird im Designer eine Aktivität mit dem Namen IfElseActivity1 erstellt.

  4. Erweitern Sie in der Toolbox den Knoten SharePoint-Workflow, und suchen Sie die CreateTask-Aktivität.

  5. Fügen Sie dem Workflow diese Aktivität hinzu, indem Sie sie per Drag & Drop in einen der beiden Bereiche Aktivitäten hier ablegen in der IfElseActivity1-Aktivität ziehen.

  6. Geben Sie im Fenster Eigenschaften den Eigenschaftswert taskToken für die CorrelationToken-Eigenschaft ein.

  7. Erweitern Sie die CorrelationToken-Eigenschaft, indem Sie auf das Pluszeichen (TreeView-Plus) klicken.

  8. Klicken Sie auf den Dropdownpfeil der OwnerActivityName-Untereigenschaft, und wählen Sie Workflow1 aus.

  9. Klicken Sie auf die TaskId-Eigenschaft, und klicken Sie dann auf die Schaltfläche mit den Auslassungspunkten (Auslassungszeichen im ASP.NET Mobile-Designer), um das Dialogfeld Eigenschaft binden anzuzeigen.

  10. Klicken Sie auf die Registerkarte Binden an einen neuen Member, wählen Sie Feld erstellen aus, und klicken Sie dann auf OK.

  11. Klicken Sie auf die TaskProperties-Eigenschaft, und klicken Sie dann auf die Schaltfläche mit den Auslassungspunkten (Auslassungszeichen im ASP.NET Mobile-Designer), um das Dialogfeld Eigenschaft binden anzuzeigen.

  12. Klicken Sie auf die Registerkarte Binden an einen neuen Member, wählen Sie Feld erstellen aus, und klicken Sie dann auf OK.

  13. Erweitern Sie in der Toolbox den Knoten SharePoint-Workflow, und suchen Sie die LogToHistoryListActivity-Aktivität.

  14. Fügen Sie dem Workflow diese Aktivität hinzu, indem Sie sie per Drag & Drop in den anderen Bereich Aktivitäten hier ablegen in der IfElseActivity1-Aktivität ziehen.

Hinzufügen von Code zum Workflow

Fügen Sie dem Workflow nun Code hinzu, um Funktionen hinzuzufügen.

So fügen Sie dem Workflow Code hinzu

  1. Doppelklicken Sie im Workflow-Designer auf die createTask1-Aktivität, um eine leere Methode für das MethodInvoking-Ereignis zu generieren.

  2. Ersetzen Sie die MethodInvoking-Methode durch Folgendes:

    Private Sub createTask1_MethodInvoking(ByVal sender As 
      System.Object, ByVal e As System.EventArgs)
        createTask1_TaskId1 = Guid.NewGuid
        createTask1_TaskProperties1.AssignedTo = "somedomain\\someuser"
        createTask1_TaskProperties1.Description = "Please approve the 
          expense report"
        createTask1_TaskProperties1.Title = "Expense Report Approval 
          Needed"
    End Sub 
    
    private void createTask1_MethodInvoking(object sender, EventArgs e)
    {
        createTask1_TaskId1 = Guid.NewGuid();
        createTask1_TaskProperties1.AssignedTo = "somedomain\\someuser";
        createTask1_TaskProperties1.Description = "Please approve the 
          expense report";
        createTask1_TaskProperties1.Title = "Expense Report Approval 
          Needed";
    } 
    

    Tipp

    Ersetzen Sie im Code somedomain\\someuser durch eine Domäne und einen Benutzernamen, für die eine Aufgabe erstellt wird, z. B. "Office\\JoeSch". Zu Testzwecken ist es am einfachsten, das Konto zu verwenden, das Sie zur Entwicklung verwenden.

  3. Fügen Sie unter der MethodInvoking-Methode das folgende Beispiel hinzu:

    Private Sub checkApprovalNeeded(ByVal sender As Object, ByVal e As 
      ConditionalEventArgs)
        Dim approval As Boolean = False
        If (Convert.ToInt32(workflowProperties.InitiationData) > 
          Convert.ToInt32(workflowProperties.AssociationData)) Then
            approval = True
        End If
        e.Result = approval
    End Sub 
    
    private void checkApprovalNeeded(object sender, ConditionalEventArgs 
      e)
    {
        bool approval = false;
        if (Convert.ToInt32(workflowProperties.InitiationData) > 
          Convert.ToInt32(workflowProperties.AssociationData))
        {
            approval = true;
        }
        e.Result = approval;
    } 
    
  4. Klicken Sie im Workflow-Designer auf die ifElseBranchActivity1-Aktivität.

  5. Klicken Sie im Fenster Eigenschaften auf den Dropdownpfeil der Condition-Eigenschaft, und wählen Sie Code Condition aus.

  6. Erweitern Sie die Condition-Eigenschaft, indem Sie auf das Pluszeichen (TreeView-Plus) klicken, und legen Sie den Wert dann auf checkApprovalNeeded fest.

  7. Klicken Sie im Workflow-Designer mit der rechten Maustaste auf die logToHistoryListActivity1-Aktivität, und wählen Sie Handler generieren aus, um eine leere Methode für das MethodInvoking-Ereignis zu generieren.

  8. Ersetzen Sie den MethodInvoking-Code durch Folgendes:

    Private Sub logToHistoryListActivity1_MethodInvoking(ByVal sender As 
      System.Object, ByVal e As System.EventArgs)
        Me.logToHistoryListActivity1.HistoryOutcome = ("Expense was auto 
          approved for " + workflowProperties.InitiationData)
    End Sub 
    
    private void logToHistoryListActivity1_MethodInvoking(object sender, 
      EventArgs e)
    {
        this.logToHistoryListActivity1.HistoryOutcome = "Expense was 
          auto approved for " + workflowProperties.InitiationData;
    } 
    
  9. Drücken Sie F5, um das Programm zu debuggen.

    Hiermit wird Folgendes ausgeführt: Die Anwendung wird kompiliert, verpackt und bereitgestellt, die Funktionen werden aktiviert, der IIS-Anwendungspool wird wiederverwendet, und dann wird der Browser mit dem in der Eigenschaft Website-URL angegebenen Ort gestartet.

Zuordnen des Workflows zur Liste Dokumente

Zeigen Sie dann das Workflowzuordnungsformular an, indem Sie den Workflow der Liste Freigegebene Dokumente auf der SharePoint-Website zuordnen.

So ordnen Sie den Workflow zu

  1. Klicken Sie auf der Schnellstartleiste auf Freigegebene Dokumente.

  2. Klicken Sie auf der Menübandregisterkarte Bibliothekstools auf Bibliothek und dann auf die Menübandschaltfläche Bibliothekeinstellungen.

  3. Klicken Sie im Abschnitt Berechtigungen und Verwaltung auf den Link Workfloweinstellungen, und klicken Sie dann auf der Seite Workflows auf den Link Workflow hinzufügen.

  4. Wählen Sie in der obersten Liste der Seite Workfloweinstellungen die Vorlage ExpenseReport - Workflow1 aus.

  5. Geben Sie im nächsten Feld "ExpenseReportWorkflow" ein, und klicken Sie dann auf die Schaltfläche Weiter.

    Hierdurch wird der Workflow der Liste Freigegebene Dokumente zugeordnet, und das Workflowzuordnungsformular wird angezeigt.

  6. Geben Sie im Textfeld Auto Approval Limit den Wert 1200 ein, und klicken Sie dann auf die Schaltfläche Workflow zuordnen.

Starten des Workflows

Ordnen Sie den Workflow danach einem der Dokumenten in der Liste Freigegebene Dokumente zu, um das Workflowinitiierungsformular anzuzeigen.

So starten Sie den Workflow

  1. Klicken Sie auf der SharePoint-Seite auf die Schaltfläche Home, und zeigen Sie dann die Liste Freigegebene Dokumente auf der SharePoint-Website an, indem Sie auf der Schnellstartleiste auf den Link Freigegebene Dokumente klicken.

  2. Laden Sie in der Liste Freigegebene Dokumente ein neues Dokument hoch, indem Sie am oberen Rand der Seite auf der Registerkarte Bibliothekstools auf den Link Dokumente und dann im Menüband auf die Schaltfläche Dokument hochladen klicken.

  3. Zeigen Sie mit der Maus auf das hochgeladene Dokument, um einen Dropdownpfeil anzuzeigen. Klicken Sie auf den Dropdownpfeil, und wählen Sie Workflows aus.

  4. Klicken Sie auf das Bild neben ExpenseReportWorkflow.

    Hierdurch wird das Workflowinitiierungsformular angezeigt. (Beachten Sie, dass der im Feld Auto Approval Limit angezeigte Wert schreibgeschützt ist, da er im Zuordnungsformular eingegeben wurde.)

  5. Geben Sie im Feld Expense Total den Wert 1600 ein, und klicken Sie dann auf Workflow starten.

    Hiermit wird erneut die Liste Freigegebene Dokumente angezeigt. Eine neue Spalte namens ExpenseReportWorkflow mit dem Wert Abgeschlossen wird dem Element hinzugefügt, das der Workflow gerade gestartet hat.

  6. Klicken Sie auf den Dropdownpfeil neben dem hochgeladenen Dokument, und klicken Sie dann auf Workflows, um die Workflowstatusseite anzuzeigen. Klicken Sie unter Abgeschlossener Workflow auf den Wert Abgeschlossen. Die Aufgabe wird im Abschnitt Aufgaben aufgeführt.

  7. Klicken Sie auf den Titel der Aufgabe, um die Aufgabendetails anzuzeigen.

  8. Wechseln Sie wieder zur Liste Freigegebene Dokumente, und starten Sie den Workflow mit demselben oder einem anderen Dokument erneut.

  9. Geben Sie auf der Initiierungsseite einen Betrag an, der kleiner oder gleich dem auf der Zuordnungsseite eingegebenen Betrag (1200) ist.

    In diesem Fall wird statt einer Aufgabe ein Eintrag in der Verlaufsliste erstellt. Der Eintrag wird im Abschnitt Workflowverlauf der Workflowstatusseite angezeigt. Beachten Sie die Meldung in der Spalte Ergebnis des Verlaufsereignisses. Sie enthält den Text, der im logToHistoryListActivity1.MethodInvoking-Ereignis eingegeben wurde und der den automatisch genehmigten Betrag einschließt.

Nächste Schritte

Weitere Informationen zum Erstellen von Workflowvorlagen finden Sie in diesen Themen:

Siehe auch

Aufgaben

Exemplarische Vorgehensweise: Hinzufügen einer Anwendungsseite zu einem Workflow

Weitere Ressourcen

Erstellen von SharePoint-Workflow-Projektmappen