演练:创建和调试 SharePoint 工作流解决方案

此演练演示如何创建基本的顺序工作流模板。工作流检查共享文档库的属性,以确定文档是否已评审。如果文档已评审,则工作流完成。

本演练阐释了以下任务:

  • 在 Visual Studio 中创建 SharePoint 列表定义顺序工作流项目。

  • 创建工作流活动。

  • 处理工作流活动事件。

说明说明

虽然本演练使用的是顺序工作流项目,但过程与状态机工作流项目的过程相同。

另外,以下说明中的某些 Visual Studio 用户界面元素在您的计算机上出现的名称或位置可能会不同。您安装的 Visual Studio 版本以及使用的设置决定了这些元素。有关更多信息,请参见Visual Studio 设置

系统必备

您需要以下组件来完成本演练:

向 SharePoint 共享文档库中添加属性

为跟踪**“共享文档”库中文档的评审状态,我们将为 SharePoint 网站上的共享文档创建三个新属性:Status、Assignee 和 Review Comments。我们在“共享文档”**库中定义这些属性。

向 SharePoint 共享文档库中添加属性

  1. 在 Web 浏览器中打开一个 SharePoint 网站,如 http://<系统名称>/SitePages/Home.aspx。

  2. 在快速启动栏上,选择 *** 共享 ****** 文档 ***

  3. 选择在 *** 库工具 *** 功能区的 *** 库 *** 然后在功能区上的 *** 创建列 *** 按钮创建一个新列。

  4. 将该列命名为"文档状态,将其类型设置为 *** 选择(选择的菜单从) ***,指定以下三个选择,然后选择 *** 好 *** 按钮:

    • 需要评审

    • 评审完成

    • 请求更改

  5. 再创建两列并将它们命名为“受理人”和“评审注释”。将“受理人”列类型设置为单行文本,将“评审注释”列类型设置为多行文本。

使文档无需签出即可编辑

如果无需签出文档即可进行编辑,则测试工作流模板会更容易一些。在下一个过程中,您将配置 SharePoint 网站以达到此目的。

使文档无需签出即可编辑

  1. 在快速启动栏上,选择 *** 共享文档 *** 链接。

  2. *** 库工具 *** 功能区,选择 *** 库 *** 选项卡,然后选择 *** 库设置 *** 按钮显示 *** 文档库设置 *** 页。

  3. *** 常规设置 *** 部分中,选择 *** 版本控制设置 *** 链接显示 *** 版本控制设置 *** 页。

  4. 验证**“要求先签出文档然后再对其进行编辑”的设置是否为“否”**。如果不是,将其更改为 *** 否 *** 然后选择 *** 好 *** 按钮。

  5. 关闭浏览器。

创建 SharePoint 顺序工作流项目

顺序工作流是按顺序执行直到最后一个活动完成的一组步骤。在此过程中,我们将创建一个将应用于“共享文档”列表的顺序工作流。利用此工作流向导,您可以将工作流与网站定义或列表定义关联,并可以确定工作流的启动时间。

创建 SharePoint 顺序工作流项目

  1. 启动 Visual Studio。

  2. 在菜单栏上,依次选择 *** 文件 ***新建项目 显示 *** 新项目 *** 对话框。

  3. 外接 *** SharePoint *** 节点。*** visual C# *** 或 ***** Visual Basic *****下,然后选择 *** 2010年 *** 节点。

  4. *** 模板 *** 窗格中,选择 *** SharePoint 2010项目 *** 模板。

  5. 名称 框中,键入MySharePointWorkflow然后选择 *** 好 *** 按钮。

    这将显示**“SharePoint 自定义向导”**。

  6. *** 指定用于调试的网站和安全级别 *** 页上,选择 *** 部署为场解决方案 *** 选项按钮,然后选择 *** 完成 *** 按钮接受信任级别和默认网站。

    此步骤会将解决方案的信任级别设置为场解决方案(工作流项目的唯一可用选项)。有关更多信息,请参见沙盒解决方案注意事项

  7. *** 解决方案资源管理器 ***,选择项目节点,然后,在菜单栏上,选择 项目*** 添加新项目 ***

  8. *** visual C# *** 或 ***** Visual Basic *****下,展开 *** SharePoint *** 节点,然后选择 *** 2010年 *** 节点。

  9. *** 模板 *** 窗格中,选择 *** 顺序工作流(仅场解决方案) *** 模板,然后选择 *** 添加 *** 按钮。

    这将显示**“SharePoint 自定义向导”**。

  10. 在**“指定用于调试的工作流名称”页上,接受默认名称(“MySharePointWorkflow - Workflow1”)。保留默认工作流模板类型值,*** 列出工作流 *****,然后选择 *** 接下来 *** 按钮。

  11. *** 在调试会话中您是否自动关联的Visual Studio工作流? *** 页上,选择 *** 接下来 *** 按钮接受任何默认设置。

    此步骤会自动将工作流与共享文档库关联。

  12. *** 为您的工作流如何指定启动条件 *** 页上,将默认选项保持选中状态在 *** 所需工作流启动? *** 部分并选择 *** 完成 *** 按钮。

    可利用此页指定工作流启动的时间。默认情况下,当用户在 SharePoint 中手动启动工作流时,或在创建与工作流关联的项时,工作流将启动。

创建工作流活动

工作流包含一个或多个表示要执行的操作的活动。使用工作流设计器可为工作流安排活动。在此过程中,我们将向工作流中添加两个活动:HandleExternalEventActivity 和 OnWorkFlowItemChanged。这些活动将监视**“共享文档”**列表中文档的评审状态。

创建工作流活动

  1. 工作流应显示在工作流设计器中。如果不是这样,请打开 *** Workflow1.cs ****** Workflow1.vb ****** 解决方案资源管理器 ***

  2. 在设计器中,选择 *** OnWorkflowActivated1 *** 事件。

  3. 属性 窗口中,键入onWorkflowActivated在 *** 调用 *** 属性旁边,然后选择enter键。

    代码编辑器将会打开,一个名为“onWorkflowActivated”的事件处理程序方法被添加到 Workflow1 代码文件中。

  4. 切换回工作流设计器,打开工具箱,然后展开**“Windows Workflow v3.0”**节点。

  5. 在 ***** 工具箱 *****的 *** Windows workflow v3.0 *** 节点,请执行下列操作之一组步骤:

    1. 打开 *** while *** 事件的快捷菜单,然后选择 复制。在工作流设计器,打开行的快捷菜单在 *** onWorkflowActivated1 *** 活动下方,然后选择 *** 粘贴 ***

    2. 从拖到 *** 工具箱 ****** while *** 事件对工作流设计器,并连接到事件。行。*** onWorkflowActivated1 *** 事件。

  6. 选择 *** WhileActivity1 *** 事件。

  7. 属性 窗口中,将设置为 *** 情况 *** 代码行为。

  8. 外接 *** 情况 *** 属性,则子 *** 情况 *** 属性旁键入isWorkflowPending,然后选择enter键。

    代码编辑器将会打开,一个名为 isWorkflowPending 的方法被添加到 Workflow1 代码文件中。

  9. 切换回工作流设计器,打开工具箱,然后展开**“SharePoint 工作流”**节点。

  10. 在 ***** 工具箱 *****的 *** SharePoint工作流 *** 节点,请执行下列操作之一组步骤:

    • 打开 *** OnWorkflowItemChanged *** 事件的快捷菜单,然后选择 复制。在工作流设计器,打开行的快捷菜单在 *** whileActivity1 *** 事件中,然后选择 *** 粘贴 ***

    • 从拖到 *** 工具箱 ****** OnWorkflowItemChanged *** 事件对工作流设计器,并连接到事件。在 *** whileActivity1 *** 活动中的行。

  11. 选择 *** onWorkflowItemChanged1 *** 事件。

  12. 在**“属性”**窗口中,如下表所示设置属性。

    属性

    CorrelationToken

    workflowToken

    Invoked

    onWorkflowItemChanged

处理活动事件

最后,检查每个活动后文档的状态。如果文档已经过评审,则工作流将完成。

处理活动事件

  1. 在 Workflow1.cs 或 Workflow1.vb 中,将以下字段添加到 Workflow1 类的顶部。在活动中使用此字段可确定工作流是否已完成。

    Dim workflowPending As Boolean = True
    
    Boolean workflowPending = true;
    
  2. 将下面的方法添加到 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;
    }
    
  3. 将下面的代码添加到 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();
    }
    
  4. 向 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;
    }
    
  5. 保存项目。

测试 SharePoint 工作流模板

启动调试器时,Visual Studio 将工作流模板部署到 SharePoint Server,并将该工作流与**“共享文档”列表相关联。若要测试工作流,请从“共享文档”**列表中的某个文档启动工作流的一个实例。

测试 SharePoint 工作流模板

  1. 在 Workflow1.cs 或 Workflow1.vb 中,在**“onWorkflowActivated”**方法旁设置一个断点。

  2. 选择F5键生成并运行解决方案。

    SharePoint 网站将出现。

  3. 在SharePoint中的导航窗格中,选择 *** 共享文档 *** 链接。

  4. *** 共享文档 *** 页上,选择在 *** 库工具 *** 选项的 *** 文档 *** 链接,然后选择 *** 上载文档 *** 按钮。

  5. *** 上载文档 *** 对话框中,选择 浏览 按钮,选择任何文件,选择 打开 按钮,然后选择 *** 好 *** 按钮。

    这会将选定文档上载到**“共享文档”**列表中并启动工作流。

  6. 在 Visual Studio 中,确认调试器是否在 onWorkflowActivated 方法旁的断点处停止。

  7. 选择F5键继续执行。

  8. 您可以在此处更改文档的设置,但是,暂时保留它们在默认通过选择 *** 保存 *** 按钮。

    这将返回到默认 SharePoint 网站的**“共享文档”**页。

  9. *** 共享文档 *** 页上,确认在 *** MySharePointWorkflow – Workflow1 *** 列中的值设置为 *** 正在进行 ***。这指示工作流正在进行中,文档在等待评审。

  10. *** 共享文档 *** 页上,选择文档,选择显示的箭头,然后选择 *** 编辑属性 *** 菜单项。

  11. 设置 *** 存档状态 ****** 查看完整 ***,然后选择 *** 保存 *** 按钮。

    这将返回到默认 SharePoint 网站的**“共享文档”**页。

  12. *** 共享文档 *** 页上,确认在 *** 存档状态 *** 列中的值设置为 *** 查看完整 ***。刷新 *** 共享文档 *** 页并验证在 *** MySharePointWorkflow – Workflow1 *** 列中的值设置为 *** 完成 ***。这指示工作流已完成,文档已评审。

后续步骤

可从以下主题中了解有关如何创建工作流模板的更多信息:

请参见

其他资源

创建 SharePoint 工作流解决方案

SharePoint 项目和项目项模板

生成和调试 SharePoint 解决方案