右键单击 stateReview 活动,然后单击 AddStateInitialization。
在工具箱的"SharePoint 工作流"选项中,将 CreateTask 活动拖动到"stateInitializationActivity1"拖放区域。
在"属性"窗格中,单击 (Name) 属性并将它重命名为 createReviewTask。
在"属性"窗格的 CorrelationToken 属性中,键入 ReviewStateToken,并按 Enter。
在"属性"窗格中,展开 CorrelationToken 属性,并在"OwnerActivityName"列表中,选择"stateReview"。
在"属性"窗格中,单击 TaskID,然后单击省略号按钮 (...)。
在"将‘TaskID’绑定到活动的属性"对话框中,单击"绑定到新成员"选项卡。
在"选择要创建的成员的类型"选项列表中,单击"创建字段",然后单击"确定"。
在"属性"窗格中,单击 TaskProperties 属性,然后单击省略号按钮 (...)。
在"将‘TaskProperties’绑定到活动的属性"对话框中,单击"绑定到新成员"选项卡。
在"选择要创建的成员的类型"选项列表中,单击"创建字段",然后单击"确定"。
在"属性"窗格的 MethodInvoking 处理程序中,键入 createReviewTask_MethodInvoking,然后按 Enter。
添加以下代码。
createReviewTask_TaskId1 = Guid.NewGuid()
createReviewTask_TaskProperties1.Title = "Review Document"
createReviewTask_TaskProperties1.AssignedTo = "CONTOSO\andyj"
createReviewTask_TaskProperties1.DueDate = Date.Now.AddDays(1.0)
createReviewTask_TaskId1 = Guid.NewGuid();
createReviewTask_TaskProperties1.Title = "Review Document";
createReviewTask_TaskProperties1.AssignedTo = @"CONTOSO\andyj";
createReviewTask_TaskProperties1.DueDate = DateTime.Now.AddDays(1.0);
单击"设计"图面,然后单击"Workflow1"以返回完整工作流视图。
右键单击 stateReview 活动,然后单击"AddEventDriven"。
在工具箱的"SharePoint 工作流"选项中,将"onTaskChanged"项拖动到"stateReview"拖放区域。
在"属性"窗格中,将"CorrelationToken"设置为"ReviewStateToken"。
在"属性"窗格中,单击 TaskID 属性,然后单击省略号按钮 (...)。
在"将‘TaskID’绑定到活动的属性"对话框中的"绑定到现有成员"选项卡上,单击"createReviewTask_TaskId1",然后单击"确定"。
在"属性"窗格中,单击"AfterProperties"字段,然后单击省略号按钮 (...)。
在"将‘AfterProperties’绑定到活动的属性"对话框中,单击"绑定到新成员"选项卡。
在"选择要创建的成员的类型"选项列表中,单击"创建字段",然后单击"确定"。
在"属性"窗格中,单击"BeforeProperties"字段,然后单击省略号按钮 (...)。
在"将‘BeforeProperties’绑定到活动的属性"对话框中,单击"绑定到新成员"选项卡。
在"选择要创建的成员的类型"选项列表中,单击"创建字段",然后单击"确定"。
在"属性"窗格的 Invoked 处理程序中,键入 onTaskChanged2_Invoked,然后按 Enter。
添加以下代码。
onTaskChanged2_AfterProperties1 = onTaskChanged2.AfterProperties
onTaskChanged2_BeforeProperties1 = onTaskChanged2.BeforeProperties
onTaskChanged2_AfterProperties1 = onTaskChanged2.AfterProperties;
onTaskChanged2_BeforeProperties1 = onTaskChanged2.BeforeProperties;
单击"设计"选项卡。在工具箱的"Windows 工作流 3"组中,将 IfElse 活动拖动到 OnTaskedChange2 活动下。
打开"Workflow1"代码视图,并添加以下代码。
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
private void ReviewFinished(object sender, ConditionalEventArgs e)
{
if (onTaskChanged2_AfterProperties1.PercentComplete == 1.0)
{
e.Result = true;
}
else
{
e.Result = false;
}
}
单击"设计"选项卡,然后单击"ifElseBranchActivity3"。在"属性"窗格中,单击 Condition 属性,并在下拉列表中选择"代码条件"。
在"属性"窗格中,展开 Condition 属性。
在展开的条件字段中,在下拉列表中选择"ReviewFinished"。
从工具箱的"Windows 工作流 3"组中,拖动 IfElse 活动,并将它添加到 ifElseActivity3 活动下的"在此处放置活动"区域。
这将创建嵌套 If/Else 语句。
在"Workflow1"代码视图中,添加以下代码。
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
End Sub
private void DocApproved(object sender, ConditionalEventArgs e)
{
if (onTaskChanged2_AfterProperties1.Description == "<DIV>Approved</DIV>")
{
e.Result = true;
}
else
{
e.Result = false;
}
}
单击"设计"选项卡,然后单击"ifElseBranchActivity5"。在"属性"窗格中,单击 Condition 属性,并在下拉列表中选择"代码条件"。
在"属性"窗格中,展开 Condition 属性。在展开的条件字段中,在下拉列表中选择"DocApproved"。
在工具箱中,将 SetState 活动拖动到 ifElseBranchActivity5 活动下。
在"属性"窗格中,单击 TargetStateName 属性,然后选择"stateFinished"。
在工具箱中,将 SetState 活动拖动到 ifElseBranchActivity6 活动下。
在"属性"窗格中,单击 TargetStateName 属性,然后选择"stateInProgress"。
图 4 显示完成的状态机工作流。
图 4. 完成的状态机工作流