演练:将 SharePoint Designer 可重用工作流导入 Visual Studio

本演练演示如何将 SharePoint Designer 2010 中创建的可重用工作流导入到 Visual Studio SharePoint 工作流项目中。

在 SharePoint Designer 中创建的工作流(即,声明性工作流)由 XML 语句组成,而非由代码组成。 SharePoint Designer 2010 引入了可重用工作流,它们是可由 SharePoint 站点中的不同列表使用的可移植的声明性工作流。

在 Visual Studio 2010 中创建的工作流(如顺序工作流和状态机工作流)称为“代码工作流”。 代码工作流由 XML 文件和代码模块组成,用户可以在这些文件和模块中自定义工作流的行为。

通过 Visual Studio 2010,您可以导入在 SharePoint Designer 2010 中创建的可重用工作流,并将其转换为代码工作流,以便在 SharePoint 站点中使用。

本演练将演示以下任务:

  • 在 SharePoint Designer 中创建一个简单的可重用工作流。

  • 将 SharePoint Designer 可重用工作流导出到一个 .wsp 文件中,然后再将其导入到 SharePoint 中。

  • 使用“导入可重用工作流”项目将 .wsp 文件导入到 Visual Studio 中。

  • 通过添加代码修改工作流。

  • 在 SharePoint 站点中使用导入的工作流。

提示

对于在以下说明中使用的某些 Visual Studio 用户界面元素,您的计算机可能会显示不同的名称或位置。这些元素取决于您所使用的 Visual Studio 版本和您所使用的设置。有关更多信息,请参见 Visual Studio 设置

系统必备

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

创建目标 SharePoint 子站点

首先创建两个新的 SharePoint 子站点:一个用于承载来自 SharePoint Designer 的可重用工作流,另一个用于承载转换后的工作流。

创建 SharePoint 子站点

  1. 在 SharePoint Designer 2010 中,单击**“文件”菜单上的“打开站点”**。

  2. 在**“打开站点”对话框中,浏览至要在其中创建工作流的 SharePoint 站点,或者使用默认值 http://系统名称/,然后单击“打开”**。

    此时将显示主页。

  3. 在**“子站点”部分中,单击“新建”**。

  4. 在**“新建”对话框中,选择左窗格中的“SharePoint 模板”,再选择右窗格中的“团队站点”**。

  5. 在**“指定您的网站位置”框中,用 SPD1 替换 URL 中的“subsite”一词,然后单击“确定”**。

    这将在 SharePoint Designer 中打开新的子站点。 关闭此 SharePoint Designer 实例并返回到第一个实例(首要站点)。

  6. 重复步骤 3 至步骤 5 以创建第二个子站点,这次将用 SPD2 替换 URL 中的**“subsite”**一词。

创建 SharePoint Designer 可重用工作流

由于 SharePoint 不包括可用于此示例的任何可重用工作流,因此您将创建一个可重用工作流。 在此简单工作流中,当某个用户在“任务”列表中输入某个具有特定标题的新任务时,将向该用户分配此任务。

创建 SharePoint Designer 可重用工作流

  1. 在**“子站点”部分中单击“SPD1”**站点以对其进行修改。

  2. 单击功能区上的**“可重用工作流”**。

    将出现“创建可重用工作流”向导。

  3. 在**“名称”**框中,键入“SPD 任务工作流”。

  4. 在**“内容类型”框中,单击“任务”,再单击“确定”**。

    该工作流将在 SharePoint Designer 工作流设计器中打开。

  5. 确保选中步骤 1 并单击功能区上的**“条件”按钮,然后从条件列表中选择“如果当前项字段等于值”**。

    这将添加名为**“如果字段等于值”**的新条件。

  6. 单击**“如果字段等于值”条件中的“字段”**链接。

  7. 在值的列表中,选择**“标题”**。

  8. 单击**“如果字段等于值”条件中的“值”**链接。

  9. 在框中输入“新任务”。

    条件语句现在显示为**“如果当前项:标题等于新任务”**。

  10. 单击条件语句下面的行,再单击功能区上的**“操作”按钮,然后从操作列表中选择“设置当前项目中的字段”**。

  11. 单击**“将字段设置为值”操作中的“字段”链接,然后选择“分配对象”**。

  12. 单击**“将字段设置为值”操作中的“值”链接,从现有用户和组的列表中选择“创建项目的用户”,单击“添加”按钮,再单击“确定”**。

    操作语句现在显示为**“将分配对象设置为当前项目:创建者”**。

保存并部署可重用工作流

由于 Visual Studio 只能导入 .wsp 文件,因此必须先将可重用工作流另存为 .wsp 文件,并将其部署到 SharePoint,然后才能将其导入 Visual Studio 中。

重要说明重要事项

如果您在执行以下过程时接收到运行时错误,则必须在具有对 SharePoint 站点的访问权的系统上执行该过程。

保存并部署可重用工作流

  1. 单击 SharePoint Designer 顶部的**“保存”按钮保存您的进度,然后单击“发布”按钮将工作流部署到 SharePoint 站点“SPD1”**。

  2. 在导航窗格中单击**“工作流”**。

  3. 单击**“可重用工作流”下的“SPD 任务工作流”**。

  4. 在功能区中,单击**“另存为模板”**,以将工作流另存为 .wsp 文件。

  5. 在浏览器中,打开**“SPD1”**SharePoint 站点,查看 SharePoint 中的 .wsp 文件。

  6. 在快速启动栏上单击**“库”**。

  7. 在**“文档库”部分中单击“站点资产”**。

    **“SPD 任务工作流”**文件将与其他站点资产一起列出。

  8. 在列表中单击其名称,这将显示**“文件下载”**对话框。

  9. 在**“文件下载”对话框中单击“保存”**按钮,将 .wsp 文件保存到系统上。

将 .wsp 文件导入到 Visual Studio 中

使用“导入可重用工作流”项目将 .wsp 文件导入到 Visual Studio 中。 此项目将工作流从一个可重用的声明性工作流转换为一个代码工作流。 转换工作流之后,您将使用代码来修改其行为。

从 .wsp 文件导入工作流并进行修改

  1. 在 Visual Studio 中,通过指向**“文件”菜单上的“新建”并单击“新建项目”,显示“新建项目”**对话框。

  2. 展开**“Visual C#”“Visual Basic”下的“SharePoint”节点,然后单击“2010”**。

  3. 在**“模板”窗格中单击“导入可重用工作流”,保留项目的名称为“WorkflowImportProject1”,再单击“确定”**。

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

  4. 在**“指定用于调试的站点和安全级别”**页上,为您先前创建的第二个 SharePoint 子站点输入 URL:http://系统名称/SPD2。

  5. 在**“此 SharePoint 解决方案的信任级别是什么?”部分,将所选内容保持为“部署为场解决方案”**。

    有关沙盒化解决方案与场解决方案的更多信息,请参见沙盒解决方案注意事项

  6. 在**“指定新项目源”页上,浏览到系统上您先前保存 .wsp 文件的位置,然后单击“下一步”**。

    提示

    单击此页上的“完成”后,将导入 .wsp 文件中的所有可用项。

    这将显示可导入的可重用工作流的列表。

  7. 在**“选择要导入的项”框中,选择工作流“SPD 任务工作流”,然后单击“完成”**。

    完成导入操作后,将创建一个名为**“WorkflowImportProject1”的项目,其中包含一个名为“SPD_Workflow_TestFT”**的工作流。 此文件夹中包含工作流的定义文件 Elements.xml 和工作流设计器文件 (.xoml)。 该设计器中包含两个文件:规则文件 (.rules) 和代码隐藏文件(.cs 或 .vb,具体取决于项目的编程语言)。

  8. 将工作流项目项**“WorkflowImportProject1”**设置为启动项。

    这将在调试项目时立即显示列表。

  9. 由于**“导入可重用工作流”**不会导入已导入的工作流的关联属性值,因此您必须输入这些值。 具体方法为:

    1. 在**“解决方案资源管理器”中单击“SPD_Workflow_TestFT”**工作流项目项。

    2. 单击**“目标列表”**属性旁边的省略号 (ASP.NET 移动设计器中的省略号) 按钮或具有省略号按钮的任何其他属性。

    3. 在“SharePoint 自定义向导”中填入缺少的值。 完成上述操作后,单击**“完成”**。

  10. 右击 .xoml 文件并选择**“查看设计器”**,以便在工作流设计器中查看导入的工作流。

  11. 在“工具箱”的**“Windows Workflow v3.0”部分中,将“代码”活动拖至设计器并将其放置在“SequenceActivity1”**活动之下。

    这将在工作流设计器中添加一个名为**“CodeActivity1”**的活动。 在此活动中,您将添加一个代码操作,当用户启动工作流时,该操作会在“公告”列表中创建一个公告。

  12. 双击**“CodeActivity1”**以生成事件处理程序并查看代码。

  13. 在现有 using 或 Imports 语句的下方添加以下内容:

    Imports Microsoft.SharePoint
    Imports System
    
    using Microsoft.SharePoint;
    using System;
    
  14. 用以下内容替换 codeActivity1_ExecuteCode:

    Private Sub codeActivity1_ExecuteCode(ByVal sender As System.Object, ByVal e As System.EventArgs)
        Try
            ' Get reference to SharePoint site.
            Dim site As SPSite = New SPSite("http://MyServer")
            Dim web As SPWeb = site.OpenWeb("SPD2/")
            ' Get reference to Announcements list.
            Dim announcementsList As SPList = web.Lists("Announcements")
            ' Add announcement to Announcements list for the Task.
            Dim oListItem As SPListItem = announcementsList.Items.Add
            oListItem("Title") = ("Assigned task on " + DateTime.Now.ToString)
            oListItem.Update()
        Catch err As Exception
            Console.WriteLine(("Error: " + err.ToString))
        End Try
    End Sub
    
    private void codeActivity1_ExecuteCode(object sender, System.EventArgs e)
    {
    
        try
        {
            // Get reference to SharePoint site.
            SPSite site = new SPSite("http://MyServer");
            SPWeb web = site.OpenWeb("SPD2/");
            // Get reference to Announcements list.
            SPList announcementsList = web.Lists["Announcements"];
    
            // Add announcement to Announcements list for the Task.
            SPListItem oListItem = announcementsList.Items.Add();
            oListItem["Title"] = "Assigned task on " + DateTime.Now.ToString();
            oListItem.Update();
        }
    
        catch (Exception err)
        {
            Console.WriteLine("Error: " + err.ToString());
        }        
    }
    

部署项目并关联工作流

接下来,运行 WorkflowImportProject1 以将其部署到 SharePoint 站点,然后将工作流与“任务”列表关联起来,以查看和测试经修改的转换后工作流。

部署项目并关联工作流

  1. 在 Visual Studio 中,按 F5 以运行和部署转换的工作流项目。

  2. 单击快速启动栏上的**“任务”**以显示任务列表。

  3. 在**“列表工具”功能区上单击“项目”,然后单击“新建项目”**按钮。

  4. 在**“任务 - 新建项目”对话框的“标题”框中输入“新任务”,然后单击“保存”**。

  5. 通过单击**“列表工具”功能区上的“列表”按钮并单击“列表设置”,显示“列表设置”**页。

  6. 在**“权限和管理”部分中单击“工作流设置”**链接。

    这将出现**“添加工作流”**页。

  7. 在**“工作流”列表中选择“WorkflowImportProject1 - SPD 工作流测试”**。

  8. 在**“名称”框中输入“SPD 工作流测试”,然后单击“确定”**。

  9. 在快速启动栏上单击**“任务”**。

  10. 单击**“新建任务”旁边的下拉箭头,并选择“工作流”**。

  11. 在**“开始新工作流”部分中,单击针对“SPD 工作流测试”的链接,再单击“启动”**以启动工作流。

    提示

    或者,可以通过运行工作流设置向导并将工作流设置为自动关联,自动将工作流与列表关联起来。

    请注意,工作流将执行两项操作:在任务的**“分配对象”列中显示您的姓名,并在“公告”**列表中显示公告。

请参见

概念

从现有的 SharePoint 网站导入项

其他资源

开发 SharePoint 解决方案

为 Web 部件或应用程序页创建可重用控件