演练:创建和调试 SharePoint 工作流解决方案
此演练演示如何创建基本的顺序工作流模板。 工作流检查共享文档库的属性,以确定文档是否已评审。 如果文档已评审,则工作流完成。
本演练阐释了以下任务:
在 Visual Studio 中创建 SharePoint 列表定义顺序工作流项目。
创建工作流活动。
处理工作流活动事件。
提示
虽然本演练使用的是顺序工作流项目,但过程与状态机工作流项目的过程相同。
另外,以下说明中的某些 Visual Studio 用户界面元素在您的计算机上出现的名称或位置可能会不同。 您安装的 Visual Studio 版本以及使用的设置决定了这些元素。 有关更多信息,请参见 使用设置。
系统必备
您需要以下组件来完成本演练:
支持的 Microsoft Windows 和 SharePoint 版本。 有关更多信息,请参见开发 SharePoint 解决方案的要求。
Visual Studio 2010.
向 SharePoint 共享文档库中添加属性
为跟踪**“共享文档”库中文档的评审状态,我们将为 SharePoint 网站上的共享文档创建三个新属性:Status、Assignee 和 Review Comments。 我们在“共享文档”**库中定义这些属性。
向 SharePoint 共享文档库中添加属性
在 Web 浏览器中打开一个 SharePoint 网站,如 http://<系统名称>/SitePages/Home.aspx。
在快速启动栏上单击**“共享文档”**。
在**“库工具”功能区上单击“库”,然后单击该功能区上的“创建列”**按钮以创建新列。
将该列命名为“文档状态”,将其类型设置为**“选项(要从中选择的菜单)”,指定以下三个选项,然后单击“确定”**:
需要评审
评审完成
请求更改
再创建两列并将它们命名为“受理人”和“评审注释”。 将“受理人”列类型设置为单行文本,将“评审注释”列类型设置为多行文本。
使文档无需签出即可编辑
如果无需签出文档即可进行编辑,则测试工作流模板会更容易一些。 在下一个过程中,您将配置 SharePoint 网站以达到此目的。
使文档无需签出即可编辑
在快速启动栏上单击**“共享文档”**。
在**“库工具”功能区上单击“库”,然后单击“库设置”按钮以显示“文档库设置”**页。
在**“常规设置”部分中,单击“版本控制设置”以显示“版本控制设置”**页。
验证**“要求先签出文档然后再对其进行编辑”的设置是否为“否”。 如果不是这样,请将其更改为“否”,然后单击“确定”**。
关闭浏览器。
创建 SharePoint 顺序工作流项目
顺序工作流是按顺序执行直到最后一个活动完成的一组步骤。 在此过程中,我们将创建一个将应用于“共享文档”列表的顺序工作流。 利用此工作流向导,您可以将工作流与网站定义或列表定义关联,并可以确定工作流的启动时间。
创建 SharePoint 顺序工作流项目
启动 Visual Studio,然后通过指向**“文件”菜单上的“新建”并单击“项目”,显示“新建项目”**对话框。
展开**“Visual C#”或“Visual Basic”下的“SharePoint”节点,然后单击“2010”**。
在**“模板”窗格中选择“顺序工作流”**。
在**“名称”框中,键入 MySharePointWorkflow,然后单击“确定”**。
这将显示**“SharePoint 自定义向导”**。
在**“指定用于调试的网站和安全级别”页中,单击“下一步”**以接受默认站点和信任级别。
此步骤会将解决方案的信任级别设置为场解决方案(工作流项目的唯一可用选项)。 有关更多信息,请参见沙盒解决方案注意事项。
在**“指定用于调试的工作流名称”页上,接受默认名称(“MySharePointWorkflow - Workflow1”)。 保留默认工作流模板类型值“列表工作流”,然后单击“下一步”**。
在**“是否希望 Visual Studio 在调试会话中自动关联工作流?”页中,单击“下一步”**以接受所有默认设置。
此步骤会自动将工作流与共享文档库关联。
在**“指定确定工作流启动方式的条件”页上,将“您希望如何启动工作流?”部分的默认选项保持选中状态,然后单击“完成”**。
可利用此页指定工作流启动的时间。 默认情况下,当用户在 SharePoint 中手动启动工作流时,或在创建与工作流关联的项时,工作流将启动。
创建工作流活动
工作流包含一个或多个表示要执行的操作的活动。 使用工作流设计器可为工作流安排活动。 在此过程中,我们将向工作流中添加两个活动:HandleExternalEventActivity 和 OnWorkFlowItemChanged。 这些活动将监视**“共享文档”**列表中文档的评审状态。
创建工作流活动
工作流应显示在工作流设计器中。 如果不是这样,请双击**“解决方案资源管理器”中的“Workflow1.cs”或“Workflow1.vb”**以打开工作流。
在设计器中,单击选择**“OnWorkflowActivated1”**活动。
在**“属性”窗口中,在“Invoked”**属性旁键入 onWorkflowActivated,然后按 Enter。
代码编辑器将会打开,一个名为“onWorkflowActivated”的事件处理程序方法被添加到 Workflow1 代码文件中。
切换回工作流设计器,打开工具箱,然后展开**“Windows Workflow v3.0”**节点。
从**“工具箱”的“Windows Workflow v3.0”节点拖动一个“While”活动,并将该活动与“onWorkflowActivated1”**活动下的行连接。
单击选择**“WhileActivity1”**活动。
在**“属性”窗口中,将“Condition”**设置为“代码定义”。
展开**“Condition”属性,在“Condition”**属性旁键入 isWorkflowPending,然后按 Enter。
代码编辑器将会打开,一个名为 isWorkflowPending 的方法被添加到 Workflow1 代码文件中。
切换回工作流设计器,打开工具箱,然后展开**“SharePoint 工作流”**节点。
从**“工具箱”的“SharePoint 工作流”节点拖动一个“OnWorkflowItemChanged”活动,并将该活动与“whileActivity1”**活动中的行连接。
单击选择**“onWorkflowItemChanged1”**活动。
在**“属性”**窗口中,如下表所示设置属性。
Property
值
CorrelationToken
workflowToken
Invoked
onWorkflowItemChanged
处理活动事件
最后,检查每个活动后文档的状态。 如果文档已经过评审,则工作流将完成。
处理活动事件
在 Workflow1.cs 或 Workflow1.vb 中,将以下字段添加到 Workflow1 类的顶部。 在活动中使用此字段可确定工作流是否已完成。
Dim workflowPending As Boolean = True
Boolean workflowPending = true;
将下面的方法添加到 Workflow1 类中。 此方法检查“文档”列表的 Document Status 属性的值,以确定文档是否已评审。 如果 Document Status 属性设置为 Review Complete,checkStatus 方法就将 workflowPending 字段设置为 false 以指示工作流可以完成。
Private Sub checkStatus() If CStr(workflowProperties.Item("Document Status")) = "Review Complete" Then workflowPending = False End If End Sub
private void checkStatus() { if ((string)workflowProperties.Item["Document Status"] == "Review Complete") workflowPending = false; }
将下面的代码添加到 onWorkflowActivated 和 onWorkflowItemChanged 方法以调用 checkStatus 方法。 当工作流开始时,onWorkflowActivated 方法调用 checkStatus 方法以确定文档是否已评审。 如果文档尚未评审,则工作流继续。 保存文档时,onWorkflowItemChanged 方法再次调用 checkStatus 方法以确定文档是否已评审。 如果 workflowPending 字段设置为 true,则工作流继续运行。
Private Sub onWorkflowActivated(ByVal sender As System.Object, ByVal e As System.Workflow.Activities.ExternalDataEventArgs) checkStatus() End Sub Private Sub onWorkflowItemChanged(ByVal sender As System.Object, ByVal e As System.Workflow.Activities.ExternalDataEventArgs) checkStatus() End Sub
private void onWorkflowActivated(object sender, ExternalDataEventArgs e) { // Check the status. checkStatus(); } private void onWorkflowItemChanged(object sender, ExternalDataEventArgs e) { // Check the status. checkStatus(); }
向 isWorkflowPending 方法中添加以下代码以检查 workflowPending 属性的状态。 每次保存文档时,**“whileActivity1”活动都会调用 isWorkflowPending 方法。 此方法检查 ConditionalEventArgs 对象的 Result 属性,以确定“WhileActivity1”**活动应继续还是完成。 如果该属性设置为 true,则活动继续。 否则,活动完成并且工作流也完成。
Private Sub isWorkflowPending(ByVal sender As System.Object, ByVal e As System.Workflow.Activities.ConditionalEventArgs) e.Result = workflowPending End Sub
private void isWorkflowPending(object sender, ConditionalEventArgs e) { e.Result = workflowPending; }
保存项目。
测试 SharePoint 工作流模板
启动调试器时,Visual Studio 将工作流模板部署到 SharePoint Server,并将该工作流与**“共享文档”列表相关联。 若要测试工作流,请从“共享文档”**列表中的某个文档启动工作流的一个实例。
测试 SharePoint 工作流模板
在 Workflow1.cs 或 Workflow1.vb 中,在**“onWorkflowActivated”**方法旁设置一个断点。
按 F5 生成并运行解决方案。
SharePoint 网站将出现。
在 SharePoint 中的导航窗格中单击**“共享文档”**。
在**“共享文档”页中,单击“库工具”选项卡上的“文档”,然后单击“上载文档”**按钮以上载文档。
在**“上载文档”对话框中,单击“浏览”按钮,选择任何文档文件,单击“打开”,然后单击“确定”**。
这会将选定文档上载到**“共享文档”**列表中并启动工作流。
在 Visual Studio 中,确认调试器是否在 onWorkflowActivated 方法旁的断点处停止。
按 F5 继续执行。
虽然您可以在此处更改文档的设置,但此时请单击**“保存”**以保留这些文档设置的默认值。
这将返回到默认 SharePoint 网站的**“共享文档”**页。
在**“共享文档”页中,验证“MySharePointWorkflow”列下方的值是否设置为“正在进行中”**。 这指示工作流正在进行中,文档在等待评审。
在**“共享文档”页中,指向该文档,单击向下箭头,然后单击“编辑属性”**。
将**“文档状态”设置为“评审完成”,然后单击“保存”**。
这将返回到默认 SharePoint 网站的**“共享文档”**页。
在**“共享文档”页中,验证“MySharePointWorkflow”列下方的值是否设置为“评审完成”**。 这指示工作流已完成,文档已评审。
后续步骤
可从以下主题中了解有关如何创建工作流模板的更多信息:
若要了解有关 SharePoint 工作流活动的更多信息,请参见 Workflow Activities for SharePoint Foundation(SharePoint Foundation 的工作流活动)。
若要了解有关 Windows Workflow Foundation 活动的更多信息,请参见 System.Workflow.Activities Namespace(System.Workflow.Activities 命名空间)。