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

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

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

在 Visual Studio 2012创建的工作流,例如和状态机工作流,调用 代码工作流。代码工作流由 XML 文件和代码模块组成,用户可以在这些文件和模块中自定义工作流的行为。

Visual Studio 允许您将在 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://SystemName/的值然后选择 确定 按钮。

    此时将显示主页。

  3. 子网站 部分中,选择 新建 按钮。

  4. 新建 对话框中,从左窗格中的列表中选择 SharePoint 模板 ,然后在右窗格的列表中选择 团队网站

  5. 指定网站的位置 框中,用 SPD1 替换 URL 中的 子网站,然后选择 确定 按钮。

    这将在 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. 在操作列表中,选择 设置当前项目中的域

  13. 设置字段值 事件,选择 字段 链接,然后,在列表中,选择 指派给

  14. 设置字段值 事件,选择 链接,然后,在现有用户列表,并且组,选择 创建项目的用户

  15. 选择 添加 按钮,然后选择 确定 按钮。

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

保存并部署可重用工作流

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

重要说明重要事项

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

保存并部署可重用工作流

  1. 在 SharePoint designer 顶部,选择 保存 按钮保存您的进度,然后选择 发布 按钮将工作流部署到 SPD1 SharePoint 网站。

  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. 新建项目 对话框中,展开 SharePoint 节点。Visual C#Visual Basic下,然后选择 2010 年 节点。

  3. 模板 窗格中,选择 导入可重用 SharePoint 2010 工作流 模板,保留项目的名称为 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. 解决方案资源管理器,请删除 导入的其他文件 文件夹。

  9. 在 Elements.xml 文件中,请删除 InstantiationURL="_layouts/IniErkflIP.sspx"。

  10. 解决方案资源管理器,选择 WorkflowImportProject1,然后,在菜单栏上,选择 项目设为启动项目 设置 WorkflowImportProject1 为启动项目。

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

  11. 由于 导入可重用 SharePoint 2010 工作流 模板不导入已导入的工作流的关联属性值,则必须输入。具体方法为:

    1. 解决方案资源管理器,选择 SPD_Workflow_TestFT 节点。

    2. 在某个列表选择属性旁边的省略号 (ASP.NET 移动设计器中的省略号) 按钮,例如 目标列表 属性。

    3. 填充" SharePoint 自定义向导"中填入缺少的值,然后选择 完成 按钮。

  12. 选择 .xoml 文件,然后,在菜单栏上,选择 查看设计器 以便在工作流设计器中导入的工作流。

  13. 工具箱Windows Workflow v3.0 节点,请执行以下步骤之一:

    • 打开 代码 事件的快捷菜单,然后选择 复制。在工作流设计器,打开行的快捷菜单在 SequenceActivity1 活动下方,然后选择 粘贴

    • 从拖到 工具箱代码 事件对工作流设计器,并将其连接到行。SequenceActivity1 事件。

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

  14. 执行下面的某一组步骤:

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

    • CodeActivity1属性 窗口中,将 ExecuteCode 属性的值设置为 codeActivity_ExecuteCode

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

    Imports Microsoft.SharePoint
    Imports System
    
    using Microsoft.SharePoint;
    using System;
    
  16. 用以下内容替换 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. 选择 添加工作流 链接。

  8. 工作流 列表中,选择 WorkflowImportProject1 - " SPD 工作流测试

  9. 名称 框中,输入" SPD 工作流测试,然后选择 确定 按钮。

  10. 在快速启动栏上,选择 任务 列表。

  11. 新任务旁边的下箭头,然后,在列表中,选择 工作流

  12. 启动新工作流 部分,选择 " SPD 工作流测试的链接,然后选择 启动 按钮启动工作流。

    说明说明

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

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

请参见

概念

从现有的 SharePoint 网站导入项

其他资源

开发 SharePoint 解决方案

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