在 SharePoint Designer 中创建的工作流(即,声明性工作流)由 XML 语句组成,而非由代码组成。 SharePoint Designer 2010 引入了可重用工作流,它们是可由 SharePoint 站点中的不同列表使用的可移植的声明性工作流。
在 Visual Studio 2010 中创建的工作流(如顺序工作流和状态机工作流)称为“代码工作流”。 代码工作流由 XML 文件和代码模块组成,用户可以在这些文件和模块中自定义工作流的行为。
通过 Visual Studio 2010,您可以导入在 SharePoint Designer 2010 中创建的可重用工作流,并将其转换为代码工作流,以便在 SharePoint 站点中使用。
创建目标 SharePoint 子站点
首先创建两个新的 SharePoint 子站点:一个用于承载来自 SharePoint Designer 的可重用工作流,另一个用于承载转换后的工作流。
- 在 SharePoint Designer 2010 中,单击“文件”菜单上的“打开站点”。
2. 在“打开站点”对话框中,浏览至要在其中创建工作流的 SharePoint 站点,或者使用默认值 http://系统名称/,然后单击“打开”。
3.在“子站点”部分中,单击“新建”。
在“指定您的网站位置”框中,用 SPD1 替换 URL 中的“子网站”一词,然后单击“确定”。
这将在 SharePoint Designer 中打开新的子站点。 关闭此 SharePoint Designer 实例并返回到第一个实例(首要站点)。
重复上面步骤以创建第二个子站点,这次将用 SPD2 替换 URL 中的“子网站”一词。
创建 SharePoint Designer 可重用工作流
由于 SharePoint 不包括可用于此示例的任何可重用工作流,因此您将创建一个可重用工作流。在此简单工作流中,当某个用户在“任务”列表中输入某个具有特定标题的新任务时,将向该用户分配此任务。
- 在“子站点”部分中单击“SPD1”站点以对其进行修改。
- 单击功能区上的“可重用工作流”。
3.在“名称”框中,键入“SPD 任务工作流”。 在“内容类型”框中,单击“任务”,再单击“确定”。该工作流将在 SharePoint Designer 工作流设计器中打开。
4.确保选中步骤 1 并单击功能区上的“条件”按钮,然后从条件列表中选择“如果当前项目域等于值”。
这将添加名为“如果域等于值”的新条件
5. 单击“如果字段等于值”条件中的“域”链接。 单击“标题”
单击“如果字段等于值”条件中的“值”链接。 在框中输入“新任务”。
条件语句现在显示为“如果当前项:标题等于新任务”。
6.单击条件语句下面的行,再单击功能区上的“操作”按钮,然后从操作列表中选择“设置当前项目中的域”。
7.单击“将域设置为值”操作中的“域”链接,然后选择“分配对象”。
8.单击“将域设置为值”操作中的“值”链接,从现有用户和组的列表中选择“创建当前项目的用户”,单击“添加”按钮,再单击“确定”。
操作语句现在显示为“将分配对象设置为当前项目:创建者”。
保存并部署可重用工作流
由于 Visual Studio 只能导入 .wsp 文件,因此必须先将可重用工作流另存为 .wsp 文件,并将其部署到 SharePoint,然后能将其导入 Visual Studio 中。
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#”下的“SharePoint”节点,然后单击“2010”。
3.在“模板”窗格中单击“导入可重用工作流”,将默认的名称修改为“YunCode.Workflow.WorkflowImport”,再单击“确定”。
这将显示“SharePoint 自定义向导”。
4.在“指定用于调试的站点和安全级别”页上,为您先前创建的第二个 SharePoint 子站点输入 URL:http://系统名称/SPD2。
5.在“此 SharePoint 解决方案的信任级别是什么?”部分中,保留选择项为“部署为场解决方案”。
6.在“指定新项目源”页上,浏览到系统上您先前保存 .wsp 文件的位置,然后单击“下一步”。
7.这将显示可导入的可重用工作流的列表。
8.在“选择要导入的项”框中,选择工作流“SPD 任务工作流”,然后单击“完成”。
完成导入操作后,将创建一个名为“YunCode.Workflow.WorkflowImport”的项目,其中包含一个名为“SPD_任务工作流FT”的工作流。 此文件夹中包含工作流的定义文件 Elements.xml 和工作流设计器文件 (.xoml)。 该设计器中包含两个文件:规则文件 (.rules) 和代码隐藏文件
9.由于“导入可重用工作流”不会导入已导入的工作流的关联属性值,因此您必须输入这些值。 具体方法为:
a.在“解决方案资源管理器”中单击“SPD_Workflow_TestFT”工作流项目项。
b.单击“target list (目标列表)”属性旁边的省略号按钮或具有省略号按钮的任何其他属性。
10.右击 .xoml 文件并选择“查看设计器”,以便在工作流设计器中查看导入的工作流。
11.在“工具箱”的“Windows Workflow v3.0”部分中,将“代码”活动拖至设计器并将其放置在“SequenceActivity1”活动之下。
这将在工作流设计器中添加一个名为“CodeActivity1”的活动。在此活动中,您将添加一个代码操作,当用户启动工作流时,该操作会在“通知”列表中创建一个公告。
12.双击“CodeActivity1”以生成事件处理程序并查看代码。
13. 在现有 using 或 Imports 语句的下方添加以下内容:
using Microsoft.SharePoint;
using System;
14.用以下内容替换 codeActivity1_ExecuteCode:
private void codeActivity1_ExecuteCode(object sender, System.EventArgs e)
{
try {
SPSite site = new SPSite("");
SPWeb web = site.OpenWeb("SPD2");
SPList announcementsList = web.Lists["通知"];
SPListItem oListItem = announcementsList.Items.Add();
oListItem["标题"] = "在" + DateTime.Now.ToString() +"分配了一个任务";
oListItem.Update();
}
catch (Exception err)
{ Console.WriteLine("Error: " + err.ToString()); }
}
部署项目并关联工作流
接下来,运行 YunCode.WorkFlow.WorkflowImport以将其部署到 SharePoint 站点,然后将工作流与“任务”列表关联起来,以查看和测试经修改的转换后工作流。
- 在 Visual Studio 中,按 F5 以运行和部署转换的工作流项目。
- 单击快速启动栏上的“任务”以显示任务列表。
- 在“列表工具”功能区上单击“列表”,然后单击“工作流设置”,添加“YunCode.WorkFlow.WorkflowImport”工作流,与列表关联起来。
- 在“列表工具”功能区上单击“项目”,然后单击“新建项目”按钮。
- 在“任务 - 新建项目”对话框的“标题”框中输入“新任务”,然后单击“保存”。
- 此时工作流可以自动启动,如果没有自动启动,可按下面步骤手动启动。
- 单击“新任务”旁边的下拉箭头,并选择“工作流”。
- 在“开始新工作流”部分中,单击针对“SPD任务工作流”的链接,再单击“启动”以启动工作流。
参考连接: