在 Visual Studio 2005 中创建 Office SharePoint Server 2007 工作流
为 Microsoft Office SharePoint Server 2007 创建工作流时,可以选择创建允许用户使用各种技术与工作流进行交互的各种表单。本演练演示如何使用 Microsoft Office InfoPath 2007 创建这些表单。只有当您也在使用 Microsoft Office SharePoint Server 2007 时,才可以选择使用 Microsoft Office InfoPath 2007。对于 Windows SharePoint Services 3.0,必需使用 ASPX 表单从工作流发起人那里收集数据。通过使用 Microsoft Office InfoPath 2007,用户能够通过 2007 Microsoft Office system 客户端应用程序(如 Microsoft Office Excel 2007、Microsoft Office Word 2007、Microsoft Office PowerPoint XML 格式 和 InfoPath Forms Services)以及 Web 浏览器与工作流进行交互。
在本演练中,我们创建一个使用 InfoPath 表单的简单工作流。工作流将任务分配给所选的用户,并等待该用户完成任务。工作流使用一个自定义 InfoPath 表单向启动工作流的用户收集初始数据,并使用另一个表单让指派的用户可以编辑工作流任务并将任务标记为已完成。
下面是本演练中描述的任务:
- 设计自定义 InfoPath 表单以用于启动工作流和编辑任务。
- 从现有的工作流活动创建工作流。
- 在自定义表单和工作流自身之间传递信息。
- 使用工作流活动创建、更新和完成工作流任务。
先决条件
若要完成本演练,需要安装以下软件:
- Microsoft Visual Studio 2005 Tools for the 2007 Microsoft Office System,带有 Visual Studio 2005 Extensions for Windows Workflow Foundation。
- Microsoft Office SharePoint Server 2007
- Microsoft Office InfoPath 2007
- Microsoft Office SharePoint Server 2007 软件开发工具包 (SDK)
|
如同进行所有 Microsoft Office SharePoint Server 2007 开发一样,应当使用与要部署代码的环境极其相似的开发环境来创建工作流。 由于不一定总能使用开发者资源完整地复制一个生产环境,因此请确保这两个环境尽可能相似,这样才会大大简化开发和调试过程。例如,特定于 Microsoft Office SharePoint Server 2007 的工作流活动要求必须在用来开发工作流的计算机上安装 Windows SharePoint Services 和 Microsoft Office SharePoint Server 2007。 |
方案
在本演练中创建的示例工作流是一个基本工作流。当用户启动该工作流时,Microsoft Office SharePoint Server 2007 显示一个自定义初始表单,使用此表单可以从启动工作流的用户处收集三部分信息。以下信息将用于处理工作流:
- 工作流应将任务分配给的人员的Windows SharePoint Services 登录名。
- 用于完成任务的任何说明。
- 工作流启动者希望提供的任何其他注释。
之后,工作流创建任务并将其分配给指定的用户。该用户可以使用自定义任务编辑表单来编辑工作流任务。任务编辑表单包含一个复选框,用户可利用它将任务标记为已完成。每次用户编辑任务时,工作流会再次确定用户是否已将任务标记为已完成。在用户将任务标记为已完成之后,工作流会在 Microsoft Office SharePoint Server 2007 中将任务标记为已完成,然后结束工作流活动。
后续步骤
步骤 1:创建工作流初始表单
使用 Microsoft Office InfoPath 2007,可以创建在 2007 Microsoft Office system 客户端应用程序(例如 Microsoft Office Excel 2007、Microsoft Office Word 2007、Microsoft Office PowerPoint XML 格式 和 InfoPath Forms Services 自身)以及 Web 浏览器中运行的工作流表单。
此过程中的步骤发生在如何:为 Office SharePoint Server 2007 中的工作流设计 InfoPath 表单中所述过程之后。
|
此过程假定您熟悉如何向 Microsoft Office InfoPath 2007 表单添加控件和配置这些控件。 |
创建工作流程初始表单
- 打开 Microsoft Office InfoPath 2007。在"填写表单"对话框中单击"设计表单"。
- 在"设计表单"对话框中选择"空白",再选择"仅启用浏览器兼容性功能",然后单击"确定"。
- 在"设计任务"窗格中单击"控件"。
-
在该表单上,添加下列控件,以便捕获工作流需要的信息:
- 在表单图面上,键入 Assign Task To:,按 Enter,然后将文本框控件拖到表单上的标签下。右键单击该文本框控件,然后选择"文本框属性"。在"字段名"中键入 assignee,然后单击"确定"。
- 键入 Instructions:,按 Enter,然后将另一个文本框控件拖到表单上。右键单击该文本框控件,然后选择"文本框属性"。在"字段名"中键入 instructions,然后单击"确定"。
- 键入 Comments:,按 Enter,然后将另一个文本框控件拖到表单上。右键单击该文本框控件,然后选择"文本框属性"。在"字段名"中键入 comments,然后单击"确定"。
- 将按钮控件拖到表单上。右键单击该按钮控件,然后选择"按钮属性"。在"常规"选项卡上的"标签"中键入 submit,然后单击"确定"。
完成后,表单应该如下图所示。
注意,我们已命名了文本字段"assignee"、"instructions"和"comments"。稍后将使用这些文本字段名来填充从工作流代码中的 onWorkflowActivated 活动调用的 SPWorkflowActivationProperties。当表单将其数据提交给 Microsoft Office SharePoint Server 2007 后,Office SharePoint Server 2007 会启动一个新的工作流实例,并将这些自定义属性作为名称/值对添加到 SPWorkflowActivationProperties 对象。然后,工作流代码可以通过访问这些名称/值对来检索数据。
有关详细信息,请参阅如何:设计使用关联和初始数据的工作流表单。
-
为表单字段集合指定唯一的名称。在"设计任务"窗格中单击"数据源"。您会看到您在表单设计器上为控件输入的字段名。右键单击"myFields",然后选择"属性"。在"字段或组属性"对话框中,为"名称"属性键入 InitForm。
在此过程中的晚些时候,您将提取此表单的架构以创建架构 (.xsd) 文件。然后,此架构将成为您在"onWorkflowActivation"活动中创建和引用的类的基础。表单字段集合名称将成为架构文件的根元素名称,而根据架构文件生成的类将与架构文件根元素同名。
按照前面的操作为字段集合指定唯一的名称,而不是使用默认名称 myfields,这将帮助确保根据表单架构文件生成的类也具有唯一的名称。当对反序列化多个表单的工作流进行编程时,这一点尤为重要。
-
为"Submit"按钮添加规则:一条规则负责向宿主环境(在本例中为 Office SharePoint Server 2007)提交表单信息,另一条规则负责在用户单击"Submit"后关闭表单。
- 右键单击此按钮,然后选择"按钮属性"。
- 在"按钮属性"对话框中的"常规"选项卡上,单击"规则",再单击"添加"。
- 单击"添加操作",然后单击"使用数据连接进行提交"。单击"添加"。
- 在"数据连接向导"中选择"新建连接"和"提交数据",然后单击"下一步"。
- 在"如何提交数据"下选择"提交到宿主环境",然后单击"下一步"。单击"完成",然后单击"确定"。
- 添加另一个规则:在"规则"对话框中,单击"添加",再单击"添加操作"。
- 从预定义操作的列表中选择"关闭表单"。确保没有选中"如果更改没有保存,则提示用户保存"。
- 单击"确定",退出各个对话框。
-
将表单的安全级别设置为"域"。
- 在"工具"菜单上选择"表单选项",然后选择"安全和信任"。
- 清除"自动确定安全级别",然后选择"域"。
-
发布表单。
- 保存表单。
- 在"文件"菜单上单击"发布"。
- 在"发布向导"中选择"网络位置",然后单击"下一步"。
- 浏览到要发布表单的网络位置,然后单击"确定"。
- 在"表单名称"中键入"InitiationForm",然后单击"下一步"。
- 单击"下一步"。
|
不要为表单指定备用路径。这样做会引发错误,使您无法将表单发布到服务器。 |
- 单击"发布",然后单击"关闭"。
-
根据表单架构 (.xsd) 文件生成新的类文件。
-
在"文件"菜单上单击"另存为源文件"。浏览到要保存表单源文件的位置,然后单击"确定"。
InfoPath 会将表单源文件集合(包括架构文件)保存到指定位置。表单架构文件总是命名为 myschema.xsd。
-
使用 Microsoft .NET Framework 2.0 命令行工具 xsd.exe 来根据表单架构生成新的类文件。
默认情况下,Visual Studio 2005 将 xsd.exe 命令行工具安装到以下位置(其中 C: 表示您的硬盘):
C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin
- 打开"Visual Studio 命令提示"窗口。单击"开始"按钮,选择"所有程序",选择"Microsoft Visual Studio 2005",再选择"Visual Studio 工具",然后单击"Visual Studio 2005 命令提示"。
-
导航至表单架构 (.xsd) 文件的所在位置,然后运行以下命令:
复制代码
xsd myschema.xsd /c /l:CS
或
复制代码
xsd myschema.xsd /c /l:VB
具体取决于您用于开发工作流的语言。
此命令根据表单架构生成新的类文件。将使用架构文件名称创建该文件。在此示例中,名称将为 myschema.cs。在该文件中创建的基类将与架构的根元素同名,架构的根元素与表单字段集合同名。在此演练中,名称为"InitForm"。
- 在 Visual Studio 中向工作流项目添加这个新的类文件。
-
步骤 2:创建工作流任务编辑表单
步骤 2:创建工作流任务编辑表单
接下来,您需要创建一个表单,使工作流用户能够与分配给他们的工作流任务进行交互。
演练中的此步骤将遵循如何:设计工作流任务表单以使用任务数据中介绍的过程。
|
此过程假定您熟悉向 Microsoft Office InfoPath 2007 表单添加控件和配置这些控件。 |
先决条件
步骤 1:创建工作流初始表单
创建工作流任务编辑表单
- 打开 Microsoft Office InfoPath 2007。
- 在"入门"对话框中,单击"设计表单模板"。
- 在"设计表单模板"对话框中,确保选中"表单模板"单选按钮。选择"空白"模板,然后单击"确定"。
- 在"设计任务"窗格中,单击"控件"。将以下控件添加到表单中:
控件类型 |
名称 |
数据类型 |
文本框 |
说明 |
文本(字符串) |
复选框 |
isFinished |
True/False(布尔值) |
按钮 |
确定 |
N/A |
- 完成后,表单应类似于下图。
-
将规则添加到"确定"按钮。
- 右键单击添加到表单中的按钮,然后选择"按钮属性"。
- 在"按钮属性"对话框的"常规"选项卡上单击"规则"。
- 在"规则"对话框中,单击"添加"。
- 在"规则"对话框中,单击"添加操作",然后单击"使用数据连接进行提交"。单击"添加"。
- 在"数据连接向导"中选择"新建连接"和"仅提交数据",然后单击"下一步"。
- 在"如何提交数据"下选择"提交到宿主环境,如 ASP.NET 网页或宿主应用程序",然后单击"下一步"。单击"完成",然后单击"确定"。
- 添加另一规则:在"规则"对话框中单击"添加",然后单击"添加操作"。
- 从预定义操作的列表中选择"关闭表单"。确保没有选中"如果更改没有保存,则提示用户保存"。
|
因为此表单用于与工作流进行交互,所以您希望阻止 Office InfoPath 2007 提示用户进行保存。选择它可能会导致在执行工作流过程中引发异常 |
- 单击"确定",退出各个对话框。
-
为工作流任务架构创建架构文件。
将工作流任务架构作为辅助数据源添加到您的表单中,使 Microsoft Office SharePoint Server 2007 能够为该表单提供任务数据,这用于在加载该表单后预写入字段值。第一步是创建表示工作流任务架构的 XML 架构文件。有关详细信息,请参阅如何:设计工作流任务表单以使用任务数据。
- 使用所选的文本编辑器或使用 Visual Studio 创建一个名为 ItemMetadata.xml 的文件。
|
文件名 ItemMetadata.xml 区分大小写。 |
-
向该文件中添加以下元素:
Xml
复制代码
<?xml version="1.0" encoding="utf-8"?>
<z:row xmlns:z="#RowsetSchema"/>
-
在 ItemMetadata.xml 文件中,定义您要在表单中用作数据的每个任务属性 (Property)。为此,请将前缀 ows_ 添加为属性 (Attribute),并添加任务属性 (Property) 的名称。将属性 (Attribute) 设置为等于空字符串。
在本例中,您要显示用户在初始表单中输入的说明。请记住,创建工作流任务时这些说明已作为扩展属性添加到工作流任务中。
下面的代码演示如何从代码访问扩展的属性。
C#
复制代码
private void createTask(object sender, EventArgs e)
{
…
taskProps.ExtendedProperties["instructions"] = instructions;
}
因此您需要为 instructions 任务属性 (Property) 添加属性 (Attribute)。已完成的 ItemMetadata.xml 应包含以下文本。
Xml
复制代码
<z:row xmlns:z="#RowsetSchema"
ows_instructions=""
/>
- 将已完成的 ItemMetadata.xml 文件保存到您的硬盘中。
-
将工作流任务架构作为辅助数据源添加到您的表单中。
- 在 Microsoft Office InfoPath 2007 的"设计任务"窗格中,选择"数据源",再单击"管理数据连接"。
- 在"数据连接"对话框中单击"添加"。
- 在"数据连接向导"中,选择"新建连接"和"接收数据"。单击"下一步"。
- 选择"XML 文档",然后单击"下一步"。
- 浏览到您保存 ItemMetadata.xml 文件的位置,选择该位置,单击"打开"。单击"下一步"。
- 选择"将数据包含为表单模板中的资源文件",再单击"下一步"。
-
输入 ItemMetadata.xml 作为数据连接名称,确保选中"在打开表单时自动检索数据"。单击"完成",然后单击"关闭"。
您将 ItemMetadata.xml 文件作为资源文件包含在表单模板中后,在工作流解决方案中不再需要该文件。
|
任务表单需要 ItemMetadata.xml 作为辅助数据源。如果未添加 ItemMetadata.xml 作为辅助数据源,则表单在打开时将生成错误。 |
-
将"Instructions"文本框控件数据绑定到工作流任务架构中的说明元素。
- 双击"Instructions"文本框控件。
- 在"属性"对话框的"数据"选项卡上的"默认值"下,单击"公式"按钮。
- 在"插入公式"对话框中,单击"插入域或组"。
- 在"选择域或组"对话框中,选择 ItemMetadata 数据连接。
- 选择 ows_instructions 元素。
-
单击"确定"。在"插入公式"对话框中,单击"确定"。在"文本框属性"对话框中,单击"确定"。
"Instructions"文本框控件此时绑定到 instructions 工作流任务属性。当 Microsoft Office SharePoint Server 2007 加载您的任务表单时,该表单将在文本框中显示任务说明。
- 请注意,我们使用了布尔值将一个名为"isFinished"的复选框添加到表单中。此时它成为工作流任务的扩展属性,并由 Office SharePoint Server 2007 传递给工作流。请记住,每次用户编辑任务时,工作流代码将响应任务更改事件,并使用此属性来确定任务是否已完成。
- C#
- 复制代码
- private void onTaskChanged(object sender, EventArgs e)
- {
- notFinished =
- !bool.Parse(afterProps.ExtendedProperties["isFinished"].ToString());
- }
-
将表单的安全级别设置为"域"。
- 在"工具"菜单上单击"表单选项"。
- 在"表单选项"对话框内的"类别"列表中,单击"安全和信任"。
- 在"安全级别"下,清除"自动确定安全级别"复选框,然后单击"域"。
- 单击"确定"以保存所做的更改并关闭"表单选项"对话框。
-
发布表单。
- 在"文件"菜单上,单击"另存为"。在"另存为"对话框中,键入 TaskForm.xsn 作为文件名。将表单保存到您所选择的位置。在将来的步骤中,您将浏览至该位置以将文件作为资源添加到工作流项目中。
- 在"文件"菜单上单击"发布"。
- 在"发布向导"中选择"网络位置",然后单击"下一步"。
- 单击"浏览"。
- 在"浏览"对话框中,导航到想在其中发布表单的文件夹。键入 TaskForm 作为文件名,然后单击"确定"。
- 在"发布向导"中,键入 TaskForm 作为表单模板名称并单击"下一步"。
- 单击"发布",然后单击"关闭"。
步骤 3:创建工作流
在此演练的前两部分中,通过 Microsoft Office InfoPath 2007 创建了工作流启动和任务编辑表单。在此演练的最后一步,您将使用 Visual Studio 2005 Designer for Windows Workflow Foundation 创建一个顺序工作流项目和该工作流的代码组件。
先决条件
为完成此演练,必须完成以下过程:
- 步骤 1:创建工作流初始表单
- 步骤 2:创建工作流任务编辑表单
|
与所有 Microsoft Office SharePoint Server 2007 开发工作一样,您应使用与将要部署代码的环境非常相似的开发环境来创建工作流。尽管使用开发资源并非总是能够完全复制生产环境,但确保这两种环境尽可能相似将可以大大简化开发和调试过程。例如,特定于 Microsoft Office SharePoint Server 2007 的工作流活动要求在用于开发工作流的计算机上安装 Windows SharePoint Services 和 Microsoft Office SharePoint Server 2007。 |
创建新的 Office SharePoint Server 2007 工作流项目
- 打开 Visual Studio 2005。
- 在"文件"菜单上,选择"新建",然后单击"项目"。
- 在"新建项目"窗口中,查看"项目类型"窗格以查找开发语言选项。
- 展开您将用于开发工作流的语言。
- 选择"SharePoint"选项。
- 在"模板"窗格中,选择"SharePoint 顺序工作流"。
-
命名您的项目,然后单击"确定"。
Visual Studio 2005 Designer for Windows Workflow Foundation 将打开一个新的工作流项目。该工作流项目中包含所需的 Windows SharePoint Services 3.0 引用,并且工具箱上包含专门针对 Windows SharePoint Services 3.0 工作流设计的工作流活动。
-
若要以编程方式访问表示您在前两个过程中创建的表单的 XML 架构,请将您之前创建的类文件添加到项目中。
在解决方案资源管理器中,右键单击您的项目名称。选择"添加",然后选择"现有项"。使用"添加现有项"对话框,浏览到您在其中创建您的 InitForm.cs 文件或 InitForm.vb 文件的位置并单击"添加"。
添加和配置工作流活动
既然已经创建了新的工作流项目,那么现在让我们开始设计工作流。
在此工作流中,共有 5 个活动。
活动 |
说明 |
OnWorkflowActivated |
在激活工作流时执行。 |
CreateTask |
创建新工作流任务,并将其分配给用户。 |
While |
执行它包含的活动,直到某个特定条件不再为 true。 |
OnTaskChanged |
在工作流任务被修改时执行。 |
CompleteTask |
将工作流任务设置为已完成。 |
设置 OnWorkflowActivation 活动的属性
-
设置 OnWorkflowActivated 活动的 Invoked 属性。
在使用 Windows SharePoint Services 顺序工作流项目模板创建了您的工作流项目时,Visual Studio 2005 会自动将第一个活动添加到您的设计图面,并在代码隐藏文件中创建一种方法。此第一个活动被称为 OnWorkflowActivated,默认名称为 onWorkflowActivated1。所有 Windows SharePoint Services 3.0 工作流都必须使用此活动启动。
|
如果未显示工作流的图形表示形式,请在解决方案资源管理器中双击 Workflow1.cs 文件。如果工作流设计器仍然没有预填充 OnWorkflowActivated 活动,请确保您使用了正确的 Windows SharePoint Services 顺序工作流模板。 |
- 在工作流设计器窗口中,选择"onWorkflowActivated1 活动"。
- 在"属性"窗口中,为 Invoked 属性键入 onWorkflowActivated,然后按 Enter。Visual Studio 将打开代码隐藏文件并创建 OnWorkflowActivated 方法(如果它尚不存在)。
|
请注意,在属性窗口中,CorrelationToken 和 Path 属性分别设置为 workflowToken 和 workflowProperties。它们都是工作流变量,工作流引擎使用它们将数据传送到适当的工作流实例。激活工作流实例时,将初始化 workflowProperties 变量对象。它包含所有工作流公用的属性,如工作流实例标识符 (ID) 和运行工作流实例的列表项。还可以包含传递给自定义工作流启动表单的自定义属性。在这种情况下,workflowProperties 变量将包含工作流实例的启动属性。 |
-
确保代码文件包含正确的引用。如果不存在正确的引用,请添加以下 using 语句。
C#
复制代码
using System.Xml;
using System.Xml.Serialization;
using Microsoft.SharePoint.Workflow -
将以下字符串变量声明添加到 Workflow1 类
C#
复制代码
private String assignee = default(String);
private String instructions = default(String);
private String comments = default(String); -
将下面的代码添加到 Workflow1 类文件
复制代码
namespace WorkflowLibrary1
{
public sealed partial class Workflow1: SharePointSequentialWorkflowActivity
{
public Workflow1()
{
InitializeComponent(); }
public Guid workflowID = default(System.Guid);
public Microsoft.SharePoint.Workflow.SPWorkflowActivationProperties
workflowProps = new
Microsoft.SharePoint.Workflow.SPWorkflowActivationProperties();
}
-
将下面的代码添加到 onWorkflowActivated 方法。
C#
复制代码
private void onWorkflowActivated(object sender, ExternalDataEventArgs e)
{
workflowID = workflowProps.WorkflowId;
XmlSerializer serializer = new XmlSerializer(typeof(InitForm));
XmlTextReader reader = new XmlTextReader (new System.IO.StringReader(workflowProps.InitiationData));
InitForm initform = (InitForm) serializer.Deserialize(reader);
assignee = initform.assignee;
instructions = initform.instructions;
comments = initform.comments;
}
添加 CreateTask 活动
- 从 Visual Studio 2005 工具箱的 Windows SharePoint Services 部分,将 CreateTask 活动拖到工作流设计图面上,并放到 onWorkflowActivated1 活动的正下方。
-
设置 CreateTask 活动属性。
- 选择 CreateTask 活动后,查看"属性"窗口。
- 为 CorrelationToken 属性键入 taskToken。
- 为 MethodInvoking 属性键入 createTask。
|
请注意,taskToken、taskId 和 taskProps 都是变量名称。taskToken 变量是相关令牌,使 Office SharePoint Server 2007 可将数据传送到工作流实例中的适当任务。taskId 变量是 GUID,用于标识工作流实例中的任务。taskProps 变量中包含用于初始化该任务的属性。 |
-
确保您的代码文件具有以下声明。Visual Studio 2005 应自动创建这些声明,但如果不存在,请添加它们。
复制代码
public Microsoft.SharePoint.Workflow.SPWorkflowTaskProperties afterProps = new Microsoft.SharePoint.Workflow.SPWorkflowTaskProperties();public Microsoft.SharePoint.Workflow.SPWorkflowTaskProperties beforeProps = new Microsoft.SharePoint.Workflow.SPWorkflowTaskProperties();
-
将下面的代码添加到代码隐藏页面。
C#
复制代码
private void createTask(object sender, EventArgs e)
{
taskID = Guid.NewGuid();
taskProps.Title = "Demo Task";
taskProps.AssignedTo = assignee;
taskProps.Description = instructions;
taskProps.ExtendedProperties["comments"] = comments;
taskProps.ExtendedProperties["instructions"] = instructions;
}
在工作流程的这一阶段,任务已创建并已分配给某个用户。此时,您必须添加活动,使工作流等待该用户完成任务。您将使用表示工作流的逻辑流控制的活动来实现此目的。
添加 While 活动
-
从 Visual Studio 2005 工具箱中,将 While 活动拖到工作流设计图面上,并放到 createTask1 活动的正下方。
只要 While 活动所评估的条件结果解析为 true,就会使其中的活动进行循环。在此示例中,您将使用该活动循环执行任务编辑事件,直到用户明确表示完成任务为止。
-
设置 While 活动属性。
-
将 Condition 属性设置为 Code Condition。
当您将此属性设置为 Code Condition 时,表示对于该工作流,已创建了一个自定义函数并且该函数应当用于处理 while1 活动。
如果将 Condition 子属性设置为 notFinished,将指定应当运行的方法。该方法必须返回一个布尔值。
-
添加 OnTaskChanged 活动
- 从 Visual Studio 2005 工具箱中,将 OnTaskChanged 活动拖到工作流设计图面上,并放入 while1 活动循环中。
-
设置 onTaskChanged1 活动的属性。
- 展开 AfterProperties 属性集合。为 Name 属性键入 Workflow1,为 Path 属性键入 afterProps。
- 展开 BeforeProperties 属性集合。为 Name 属性键入 Workflow1,为 Path 属性键入 beforeProps。
- 为 CorrelationToken 属性键入 taskToken,为 CorrelationTokenPath 属性键入 Workflow1。
- 为 Invoked 属性键入 onTaskChanged。在执行 onTaskChanged1 活动时,将调用此方法。
- 展开 TaskId 属性集合。为 Name 属性键入 Workflow1,为 Path 属性键入 taskId。
|
请注意,CorrleationToken 和 TaskId 属性将设置为 createTask1 活动中使用的变量。该设置会将此活动绑定到 createTask1 活动创建的同一任务,并确保工作流接收到正确任务的更改事件。 另请注意,afterProps 和 beforeProps 是对象变量。afterProps 变量表示任务更改事件发生之后的任务属性,而 beforeProps 表示任务更改事件发生之前的任务属性。 |
-
Visual Studio 2005 会自动将相应的变量声明添加到工作流代码。但是,如果它们未自动创建,请将下面的代码添加到类中。
C#
复制代码
public Microsoft.SharePoint.Workflow.SPWorkflowTaskProperties afterProps = new Microsoft.SharePoint.Workflow.SPWorkflowTaskProperties();
public Microsoft.SharePoint.Workflow.SPWorkflowTaskProperties beforeProps = new Microsoft.SharePoint.Workflow.SPWorkflowTaskProperties(); -
将代码添加到 onTaskChanged 方法。
-
将以下变量声明添加到工作流分部类:
C#
复制代码
private bool isFinished = false
- 添加代码以设置 isFinished 变量。此信息将通过任务编辑表单传递到工作流。
-
|
请记住,任务编辑表单包含一个名为 isFinished 的复选框。该复选框值是一个布尔值,作为自定义属性存储在 afterProps 变量中。onTaskChanged 方法需要访问 afterProps 变量中的这一自定义属性。 |
- C#
- 复制代码
- private void onTaskChanged(object sender, ExternalDataEventArgs e)
{
isFinished = bool.Parse(afterProps.ExtendedProperties["isFinished"].ToString());
}
-
将代码添加到 notFinished 方法。
每次更改任务时,while1 活动都会调用此方法以确定是否满足它的条件。只要 ConditionalEventArgs 对象的 Result 属性的计算结果为 true,while1 活动就会继续等待。
添加设置 ConditionalEventArgs 对象的 Result 属性的代码。
C++
复制代码
private void notFinished(object sender, ConditionalEventArgs e)
{
e.Result
}现在,用户每次编辑该任务时,onTaskChanged1 活动都会处理任务更改事件。它将调用 onTaskChanged 方法,该方法将检查任务属性并设置 isFinished 变量,以表示用户是否已将任务标记为已完成。然后 while1 活动将调用 notFinished 方法,该方法将事件的结果设置为 isFinished 变量的相反值。如果 isFinished 返回 false,事件结果将设置为 true,并且 while1 活动将继续等待任务更改;如果 isFinished 等于 true,事件结果将设置为 false,并且 while1 活动将完成,工作流将继续进行下一个活动。
添加 CompleteTask 活动
- 从 Visual Studio 2005 工具箱中,将 CompleteTask 活动拖到工作流设计图面上,并放到 while1 活动的正下方。
-
设置 CompleteTask 活动属性。
- 为 CorrelationToken 属性键入 taskToken。
- 为 CorrelationToken Path 属性键入 Workflow1。
- 为 TaskId Name 属性键入 Workflow1,为 TaskId Path 属性键入 taskId。
|
请注意,CorrelationToken 和 TaskId 属性设置为 createTask1 活动中使用的变量。这会将该活动绑定到 createTask1 活动创建的同一任务。 |
您已完成了工作流,现在可以测试、调试和部署工作流及其随附的表单了。
后续步骤
若要使工作流可与 Office SharePoint Server 2007 中的文档库相关联,您还必须编译工作流程序集,将工作流安装为一项功能,并在选定网站上激活该工作流功能。
有关执行这些后续步骤的信息,请参阅 Windows SharePoint Services 软件开发工具包 (SDK) 中的如何:部署工作流模板。
将工作流与文档库或列表关联后,可以使用 Visual Studio 2005 Designer for Windows Workflow Foundation 调试工作流。有关详细信息,请参阅 Windows SharePoint Services 软件开发工具包 (SDK) 中的如何:调试 Windows SharePoint Services 工作流程。
该文章仅为学习之用,文章转载于MSDN