13
Creating SharePoint 2010 State Machine Workflows in Visual Studio 2010 Microsoft Visual Studio 2010 provides a State Machine Workflow template that enables you to build workflow solutions for Microsoft SharePoint 2010 by using a graphical design surface. Unlike sequential workflows, which transition from activity to activity, state machine workflows transition from state to state. This SharePoint Visual How To describes the following steps for creating and deploying a state machine workflow to a SharePoint 2010 site: 1. Creating a prerequisite document library named Projects. 2. Adding state activities for stateInProgress, stateReview, and stateFinished. 3. Configuring state initialization and events for each state. 4. Configuring code that determines state transitions. Prerequisites This workflow requires a specific document library named Projects. To create the Projects document library 1. On the Site Actions menu, click More Options. 2. In the installed items list, click Document Library. 3. On the right side of the screen, in the name box, type Projects, and then click Create. Creating a Workflow Begin by creating a SharePoint State Machine Workflow project in Visual Studio 2010.

Creating Share Point 2010 State Machine Workflows in Visual Studio 2010

Embed Size (px)

Citation preview

Page 1: Creating Share Point 2010 State Machine Workflows in Visual Studio 2010

Creating SharePoint 2010 State Machine Workflows in Visual Studio 2010

Microsoft Visual Studio 2010 provides a State Machine Workflow template that enables you to

build workflow solutions for Microsoft SharePoint 2010 by using a graphical design surface.

Unlike sequential workflows, which transition from activity to activity, state machine

workflows transition from state to state.

This SharePoint Visual How To describes the following steps for creating and deploying a

state machine workflow to a SharePoint 2010 site:

1. Creating a prerequisite document library named Projects.

2. Adding state activities for stateInProgress, stateReview, and stateFinished.

3. Configuring state initialization and events for each state.

4. Configuring code that determines state transitions.

Prerequisites

This workflow requires a specific document library named Projects.

To create the Projects document library

1. On the Site Actions menu, click More Options.

2. In the installed items list, click Document Library.

3. On the right side of the screen, in the name box, type Projects, and then click

Create.

Creating a Workflow

Begin by creating a SharePoint State Machine Workflow project in Visual Studio 2010.

To create a SharePoint State Machine Workflow project in Visual Studio 2010

1. In Visual Studio, on the File menu, click New, and then click Project.

2. In the Installed Templates section, expand either Visual Basic or C#, expand

SharePoint, and then click 2010.

3. In the template pane, click State Machine Workflow.

4. In the Name box, type stateWorkflow. Leave the default values in the other fields,

and click OK.

Page 2: Creating Share Point 2010 State Machine Workflows in Visual Studio 2010

5. In the SharePoint Customization Wizard, in the What local site do you want to

use for debugging? list, select your site, and then click Next.

6. On the Specify the workflow name for debugging page, leave the default name,

and ensure that List Workflow is selected. Click Next.

7. On the Select the lists you will use when debugging page, in the list labeled The

library or list to associate your workflow with, select Projects. Leave the other

options with their default settings, and click Next.

8. On the Specify the conditions for how your workflow is started page, click

Finish.

The design surface appears with the Workflow1IntitalState activity.

To add states to the workflow

1. From the Windows Workflow 3 group in the Toolbox, drag three State activities

onto the design surface.

2. Click the WorkFlow1InitialState activity, and in the Properties pane, in the Name

property, rename this state to InitialState.

3. Click the stateActivity1 activity, and in the Properties pane, in the Name property,

rename this state to stateInProgress.

4. Click the stateActivity2 activity, and in the Properties pane, in the Name property,

rename this state to stateReview.

5. Click the stateActivity3 activity, and in the Properties pane, in the Name property,

rename this state to stateFinished.

Figure 1 shows the three states that were added to the design surface.

Figure 1. Adding states to the design surface

Page 3: Creating Share Point 2010 State Machine Workflows in Visual Studio 2010

To set an initial and completed state

1. Right-click the state that is labeled InitialState, and then click Set as Initial State.

2. Right-click the state that is labeled stateFinished, and then click Set as Completed

State.

To configure the InitialState activity

1. In the InitialState activity, double-click eventDrivenActivity1. A new view appears.

Figure 2. Initial State activity

Page 4: Creating Share Point 2010 State Machine Workflows in Visual Studio 2010

2. Drag a SetState activity from the Toolbox, and drop it under the

onWorkflowActivated1 activity.

3. In the Properties pane, in the TargetStateName property, click the drop-down list,

and select stateInProgress.

4. Click Workflow1 on the design surface to return to the full workflow view.

To configure the stateInProgress activity

1. Right-click the stateInProgress activity, and then click AddStateInitialization.

2. In the Properties pane, rename the stateInitializationActivity1 to

stateInProgressInitialization.

3. From the SharePoint Workflow options in the Toolbox, drag a CreateTask activity

and add it to the stateInProgressInitialization drop area.

4. In the Properties pane, in the CorrelationToken property, type InProgressToken,

and press Enter.

5. In the Properties pane, expand the CorrelationToken property, and in the

OwnerActivityName list, select stateInProgress.

6. In the Properties pane, in the TaskID property, click the value, and then click the

ellipsis button (...).

7. In the Bind 'TaskID' to an activity's property dialog box, click the Bind to a new

member tab.

8. In the Choose the type of member to create option list, click Create Field. Click

OK.

9. In the Properties pane, click the TaskProperties property, and then click the ellipsis

button (...).

Page 5: Creating Share Point 2010 State Machine Workflows in Visual Studio 2010

10. In the Bind 'TaskProperties' to an activity's property dialog box, click the Bind

to a new member tab.

11. In the Choose the type of member to create option list, click Create Field, and

then click OK.

12. In the Properties pane, in the MethodInvoking property, type

createTask1_MethodInvoking, and press Enter.

13. Add the following code.

createTask1_TaskId1 = Guid.NewGuid()

createTask1_TaskProperties1.Title = "Finish Document"

createTask1_TaskProperties1.AssignedTo = "CONTOSO\sanjays"

createTask1_TaskProperties1.DueDate = Date.Now.AddDays(1.0)

14. Click the Design tab, and then click Workflow1 to return to the full workflow view.

15. Right-click the stateInProgress activity, and then click AddEventDriven.

16. From the SharePoint Workflow options in the Toolbox, drag an onTaskChanged

item to the stateInProgress drop area.

17. In the Properties pane, click the TaskID property, and then click the ellipsis button

(...).

18. In the Bind 'TaskID' to an activity's property dialog box, on the Bind to an

existing member tab, click createTask1_TaskId1. Click OK.

19. In the Properties pane, click the AfterProperties field, and then click the ellipsis

button (...).

20. In the Bind 'AfterProperties' to an activity's property dialog box, click the Bind

to a new member tab.

21. In the Choose the type of member to create option list, click Create Field, and

then click OK.

22. In the Properties pane, click the BeforeProperties field, and then click the ellipsis

button (...).

23. In the Bind 'BeforeProperties' to an activity's property dialog box, click the Bind

to a new member tab.

24. In the Choose the type of member to create option list, click Create Field. Click

OK.

25. In the Properties pane, in the CorrelationToken property, select InProgressToken.

26. In the Properties pane, in the Invoked property, type onTaskChanged1_Invoked,

and then press Enter.

27. Add the following code:

onTaskChanged1_AfterProperties1 = onTaskChanged1.AfterProperties

onTaskChanged1_BeforeProperties1 = onTaskChanged1.BeforeProperties

Page 6: Creating Share Point 2010 State Machine Workflows in Visual Studio 2010

28. Click the Design tab. From the Toolbox, in the Windows Workflow 3 group, drag an

IfElse activity below the OnTaskedChange1 activity.

29. In the Workflow1 code view, add the following code.

Private Sub ReadyForReview(ByVal sender As Object, _

ByVal e As ConditionalEventArgs)

If onTaskChanged1_AfterProperties1.PercentComplete = 1.0 Then

e.Result = True

Else

e.Result = False

End If

End Sub

30. Click the Design tab, and then click the ifElseBranchActivity1. In the Properties

pane, click the Condition property, and then select Code Condition in the drop-

down list.

31. In the Properties pane, expand the Condition property. In the drop-down list, select

ReadyForReview.

32. From the Windows Workflow 3 group in the Toolbox, drag a SetState activity to

the IfElseBranchActivity1 drop area.

33. In the Properties pane, click TargetStateName, and then click stateReview in the

drop-down list.

Figure 3. StateInProgress activity

Page 7: Creating Share Point 2010 State Machine Workflows in Visual Studio 2010

34. On the Design surface, click Workflow1 to move back to the full workflow view.

To configure the stateReview activity

1. Right-click the stateReview activity, and then click AddStateInitialization.

2. From the SharePoint Workflow options in the Toolbox, drag a CreateTask activity

to the stateInitializationActivity1 drop area.

3. In the Properties pane, click the (Name) property and rename it to

createReviewTask.

4. In the Properties pane, in the CorrelationToken property, type ReviewStateToken,

and press Enter.

5. In the Properties pane, expand the CorrelationToken property, and in the

OwnerActivityName list, select stateReview.

6. In the Properties pane, click the TaskID, and then click the ellipsis button (...).

7. In the Bind 'TaskID' to an activity's property dialog box, click the Bind to a new

member tab.

Page 8: Creating Share Point 2010 State Machine Workflows in Visual Studio 2010

8. In the Choose the type of member to create option list, click Create Field, and

then click OK.

9. In the Properties pane, click the TaskProperties property, and then click the ellipsis

button (...).

10. In the Bind 'TaskProperties' to an activity's property dialog box, click the Bind

to a new member tab.

11. In the Choose the type of member to create option list, click Create Field, and

then click OK.

12. In the Properties pane, in the MethodInvoking handler, type

createReviewTask_MethodInvoking, and then press Enter.

13. Add the following code.

createReviewTask_TaskId1 = Guid.NewGuid()

createReviewTask_TaskProperties1.Title = "Review Document"

createReviewTask_TaskProperties1.AssignedTo = "CONTOSO\andyj"

createReviewTask_TaskProperties1.DueDate = Date.Now.AddDays(1.0)

14. Click the Design surface, and then click Workflow1 to move back to the full workflow

view.

15. Right-click the stateReview activity, and then click AddEventDriven.

16. From the SharePoint Workflow options in the Toolbox, drag an onTaskChanged

item to the stateReview drop area.

17. In the Properties pane, set the Correlation Token to ReviewStateToken.

18. In the Properties pane, click the TaskID property, and then click the ellipsis button

(...).

19. In the Bind 'TaskID' to an activity's property dialog box, on the Bind to an

existing member tab, click createReviewTask_TaskId1, and then click OK.

20. In the Properties pane, click the AfterProperties field, and then click the ellipsis

button (...).

21. In the Bind 'AfterProperties' to an activity's property dialog box, click the Bind

to a new member tab.

22. In the Choose the type of member to create option list, click Create Field, and

then click OK.

23. In the Properties pane, click the BeforeProperties field, and then click the ellipsis

button (...).

24. In the Bind ' BeforeProperties ' to an activity's property dialog box, click the

Bind to a new member tab.

25. In the Choose the type of member to create option list, click Create Field, and

then click OK.

26. In the Properties pane, in the Invoked handler, type onTaskChanged2_Invoked,

and then press Enter.

27. Add the following code.

Page 9: Creating Share Point 2010 State Machine Workflows in Visual Studio 2010

onTaskChanged2_AfterProperties1 = onTaskChanged2.AfterProperties

onTaskChanged2_BeforeProperties1 = onTaskChanged2.BeforeProperties

28. Click the Design tab. From the Toolbox, in the Windows Workflow 3 group, drag an

IfElse activity below the OnTaskedChange2 activity.

29. Open the Workflow1 code view, and add the following code.

Private Sub ReviewFinished(ByVal sender As Object, _

ByVal e As ConditionalEventArgs)

If onTaskChanged2_AfterProperties1.PercentComplete = 1.0 Then

e.Result = True

Else

e.Result = False

End If

End Sub

30. Click the Design tab, and then click the ifElseBranchActivity3. In the Properties

pane, click the Condition property, and select Code Condition in the drop-down list.

31. In the Properties pane, expand the Condition property.

32. In the expanded condition field, select ReviewFinished in the drop-down list.

33. From the Windows Workflow 3 group in the Toolbox, drag an IfElse activity and

add it below the ifElseActivity3 activity in the Drop Activities here area.

This creates a nested If/Else statement.

34. Add the following code in the Workflow1 code view.

Private Sub DocApproved(ByVal sender As Object, _

ByVal e As ConditionalEventArgs)

If onTaskChanged2_AfterProperties1.Description =

"<DIV>Approved</DIV>" Then

e.Result = True

Else

e.Result = False

End If

Page 10: Creating Share Point 2010 State Machine Workflows in Visual Studio 2010

End Sub

35. Click the Design tab, and then click the ifElseBranchActivity5. In the Properties

pane, click the Condition property, and select Code Condition in the drop-down list.

36. In the Properties pane, expand the Condition property. In the expanded condition

field, select DocApproved in the drop-down list.

37. From the Toolbox, drag a SetState activity under the ifElseBranchActivity5

activity.

38. In the Properties pane, click the TargetStateName property, and then select

stateFinished.

39. From the Toolbox, drag a SetState activity under the ifElseBranchActivity6

activity.

40. In the Properties pane, click the TargetStateName property, and then select

stateInProgress.

Figure 4 shows the finished state machine workflow.

Figure 4. Completed state machine workflow

Page 11: Creating Share Point 2010 State Machine Workflows in Visual Studio 2010

Deploying the Project

Finally, deploy the project and test your workflow.

To deploy the project

1. In Solution Explorer, right-click the project, and then click Deploy.

2. Open the SharePoint home page.

3. On the Quick Launch menu, click Projects, and then click Add document.

4. In the Upload Document dialog box, click Browse, select a document, and then

click Open. Click OK in the Upload dialog box.

5. Open the Tasks library, and review the Finish Document task.

6. Edit the Finish Document task, and in the Complete % box, type 100. Click Save.

Note the Review Document task.

7. Edit the Review Document task, set the status to Completed, and set Complete %

to 100. In the Description, type Approved, and then click Save.

Page 12: Creating Share Point 2010 State Machine Workflows in Visual Studio 2010

8. Open the Projects document library and note that the document workflow is complete.

The State Machine Workflow project in Visual Studio 2010 provides a graphical design surface

in which a workflow can be built.

The Initial State has one activity of SetState that takes the workflow directly to the

stateInProgress state.

The stateInProgress state has a task activity that generates a new task titled "Finish

Document" and assigns the task to a specified user.

The stateInProgress state has an onTaskChanged activity that is invoked when the

task changes. The inTaskChanged activity has an IfElse statement that compares the

"percent complete" of the task to 1.0 (100%).

If the condition is true, the workflow transitions to the next state (stateReview). If it is

false, the workflow remains at this state.

In the stateReview state, a task is generated with a title of "Review Document" as

part of the state initialization, and again this task is assigned to a specified user.

The stateReview state is invoked when the task changes, and an IfElse statement

compares the "percent complete" of this task with 100 percent. As before, when the

task is 100 percent complete, the workflow continues.

When the task is 100 percent complete, a nested IfElse statement is reached within

the stateReview state. The code compares the text that appears in the task

description to the string "<DIV>Approved</DIV>".

If the string matches, the stage is considered complete and the workflow continues to

StateFinished. If the string does not match, the state returns to stateInProgress.