创建 SharePoint 顺序工作流项目
首先,在 Visual Studio 中创建一个顺序工作流项目。 顺序工作流是一系列步骤,这些步骤按顺序执行,直到最后一项活动完成。 在此过程中,您将创建一个应用于 SharePoint 中的“共享文档”列表的顺序工作流。 利用此工作流的向导,您可以将此工作流与网站或列表定义关联,并可以确定工作流的启动时间。
1. 通过指向“文件”菜单上的“新建”并单击“新建项目”,显示“新建项目”对话框。
2. 展开“Visual C#”下的“SharePoint”节点,然后单击“2010”。
3. 在“模板”窗格中选择“顺序工作流”。
4. 在“名称”框中,键入名称,然后单击“确定”。
这将显示“SharePoint 自定义向导”。
5. 在“要使用哪个本地网站进行调试?”页中,单击“下一步”以接受默认网站。
此步骤还会将解决方案的信任级别设置为场解决方案(工作流项目的唯一可用选项)。
6. 在“指定用于调试的工作流名称”页上,接受默认名称(“* - Workflow1”)。 保留默认工作流模板类型值(“列表工作流”)。 单击“下一步”。
7. 在“是否希望 Visual Studio 在调试会话中自动关联工作流?”页中,清除自动关联工作流模板的框(如果此框已选中)。
利用此步骤,您可以稍后手动将工作流与显示关联窗体的“共享文档”列表关联。
8. 单击“完成”。
将关联窗体添加到工作流
接下来,创建一个 .ASPX 关联窗体,当 SharePoint 管理员首次将工作流与文档库或列表相关联时,将显示此窗体。
1. 单击“解决方案资源管理器”中的“Workflow1”节点。
2. 单击“项目”菜单上的“添加新项”以显示“添加新项”对话框。
3. 在该对话框树视图中,展开“Visual C#”,再展开“SharePoint”节点,然后单击“2010”。
4. 在模板列表中,选择“工作流关联窗体”。
5. 在“名称”文本框中,键入 Workflow1AssociationForm.aspx。
6. 单击“添加”按钮将该窗体添加到项目中。
设计关联窗体并对其进行编码
在此过程中,通过在关联窗体中添加控件和代码来引入功能。
1. 在关联窗体 (Workflow1AssociationForm.aspx) 中,找到具有 ID=”Main” 的 asp:Content 元素。
2. 紧接在此内容元素中的第一行后面添加以下代码,以创建一个用于提示输入费用审批限额 (AutoApproveLimit) 的标签和文本框:
<asp:Label ID="lblAutoApproveLimit" Text="提交审批的限额:" runat="server" /> <asp:TextBox ID="AutoApproveLimit" runat="server" />
3. 展开“解决方案资源管理器”中的“Workflow1AssociationForm.aspx”文件以显示其从属文件。
4. 右击 Workflow1AssociationForm.aspx 文件并选择“查看代码”。
5. 将 GetAssociationData 方法替换为:
private string GetAssociationData() { return this.AutoApproveLimit.Text; }
将启动窗体添加到工作流
接下来,创建在用户针对文档库或者列表运行工作流时显示的启动窗体。
创建启动窗体
1. 单击“解决方案资源管理器”中的“Workflow1”节点。
2. 单击“项目”菜单上的“添加新项”以显示“添加新项”对话框。
3. 在该对话框树视图中,展开“Visual C#”,再展开“SharePoint”节点,然后单击“2010”。
4. 在模板列表中,选择“工作流启动窗体”。
5. 在“名称”文本框中,键入Workflow1InitiationForm.aspx。
6. 单击“添加”按钮将该窗体添加到项目中。
设计启动窗体并对其进行编码
对启动窗体进行编码
1. 在启动窗体 (Workflow1InitiationForm.aspx) 中,找到具有 ID=”Main” 的 asp:Content 元素。
2. 紧接在此内容元素中的第一行后面添加以下代码,以创建一个显示已在关联窗体中输入的费用审批限额 (AutoApproveLimit) 的标签和文本框,以及另一个提示输入费用总额 (ExpenseTotal) 的标签和文本框:
<asp:Label ID="lblAutoApproveLimit" Text="提交审批的限额:" runat="server" /> <asp:TextBox ID="AutoApproveLimit" ReadOnly="true" runat="server" /> <br /><br /> <asp:Label ID="lblExpenseTotal" Text="费用总额:" runat="server" /> <asp:TextBox ID="ExpenseTotal" runat="server" /> <br /><br />
3. 展开“解决方案资源管理器”中的“Workflow1InitiationForm.aspx”文件以显示其从属文件。
4. 右击 Workflow1InitiationForm.aspx 文件并选择“查看代码”。
5. 将 Page_Load 方法替换为以下示例:
protected void Page_Load(object sender, EventArgs e) { InitializeParams(); this.AutoApproveLimit.Text = workflowList.WorkflowAssociations[new Guid(associationGuid)].AssociationData; }
6. 将 GetInitiationData 方法替换为以下示例:
// This method is called when the user clicks the button to start the workflow. private string GetInitiationData() { // TODO: Return a string that contains the initiation data that // will be passed to the workflow.Typically, this is in XML format. return this.ExpenseTotal.Text; }
自定义工作流
通过双击项目中的 Workflow1,在工作流设计器中显示工作流。
1. 在工具箱中,展开“Windows Workflow v3.0”节点,并找到“IfElse”活动。
2. 通过将此活动拖动到设计器中并将其放置在工作流中的“onWorkflowActivated1”活动下方,将此活动添加到工作流中。 这将在设计器中创建一个称作 IfElseActivity1 的活动。
3. 在工具箱中,展开“SharePoint 工作流”节点并找到“CreateTask”活动。
4. 通过将此活动拖放到 IfElseActivity1 中的两个“将 Activity 拖放至此”区域之一,将此活动添加到工作流中。
5. 在“属性”窗口中,为 CorrelationToken 属性输入属性值 taskToken。
6. 通过单击 CorrelationToken 属性旁边的加号来展开此属性。
7. 单击 OwnerActivityName 子属性上的下拉箭头并选择 Workflow1。
8. 单击 TaskId 属性,然后单击省略号 按钮以显示“绑定属性”对话框。
9. 单击“绑定到新成员”选项卡,选择“创建字段”,然后单击“确定”。
10. 单击 TaskProperties 属性,然后单击省略号按钮以显示“绑定属性”对话框。
11. 单击“绑定到新成员”选项卡,选择“创建字段”,然后单击“确定”。
12. 在工具箱中,展开“SharePoint 工作流”节点并找到“LogToHistoryListActivity”活动。
13. 通过将此活动拖放到 IfElseActivity1 中的另一个“将 Activity 拖放至此”区域,将此活动添加到工作流中。
在工作流中添加代码
接下来,在工作流中添加代码以引入功能。
1. 在工作流设计器中双击“createTask1”活动,为 MethodInvoking 事件生成一个空方法。
2. 将 MethodInvoking 方法替换为:
private void createTask1_MethodInvoking(object sender, EventArgs e) { createTask1_TaskId1 = Guid.NewGuid(); createTask1_TaskProperties1.AssignedTo = " CONTOSO//administrator"; createTask1_TaskProperties1.Description = "请批准报销费用"; createTask1_TaskProperties1.Title = "审批报销费用"; }
3. 在 MethodInvoking 方法下添加以下示例:
private void checkApprovalNeeded(object sender, ConditionalEventArgs e) { bool approval = false; if (Convert.ToInt32(workflowProperties.InitiationData) > Convert.ToInt32(workflowProperties.AssociationData)) { approval = true; } e.Result = approval; }
4. 在工作流设计器中,单击“ifElseBranchActivity1”活动。
5. 在“属性”窗口中,单击“Condition”属性的下拉箭头并选择 Code Condition。
6. 通过单击“Condition”属性旁边的加号来展开此属性,然后将其值设置为 checkApprovalNeeded。
7. 在工作流设计器中,右击“logToHistoryListActivity1”活动并选择“生成处理程序”,以便为 MethodInvoking 事件生成空方法。
8. 将 MethodInvoking 代码替换为下面的内容:
private void logToHistoryListActivity1_MethodInvoking(object sender, EventArgs e) { this.logToHistoryListActivity1.HistoryOutcome = "批准的报销: " + workflowProperties.InitiationData; }
9. 按 F5 调试程序。
将工作流关联到文档库或列表
接下来,通过将工作流与 SharePoint 网站上的“共享文档”列表相关联来显示工作流关联窗体。
关联工作流
1. 在快速启动栏上单击“共享文档”。
2. 单击“库工具”功能区选项卡上的“库”,然后单击“库设置”功能区按钮。
3. 在“权限和管理”部分中,单击“工作流设置”链接,然后单击“工作流”页上的“添加工作流”链接。
4. 在工作流设置页中的顶部列表中,选择“* - Workflow1”模板。
5. 在下一个字段中,键入 Workflow,然后单击“下一步”按钮。
这会将工作流与“共享文档”列表相关联并显示工作流关联窗体。
6. 在“提交审批的限额”文本框中,键入 1200,然后单击“完成”按钮。
启动工作流
然后将工作流关联到“共享文档”列表中的某个文档以显示工作流启动窗体。
1. 在 SharePoint 页上,单击“主页”按钮,然后通过在快速启动栏上单击“共享文档”链接来显示 SharePoint 网站上的“共享文档”列表。
2. 通过单击页顶部的“库工具”选项卡上的“文档”链接,并单击功能区上的“上载文档”按钮,将新文档上载到“共享文档”列表中。
3. 将鼠标指针指向已上载文档以显示下拉箭头。 单击下拉箭头并选择“工作流”。
这将显示工作流启动窗体。 (请注意,“提交审批的限额”框中显示的值是只读的,因为此值是先前在关联窗体中输入的。)
5. 在“费用总额”文本框中键入 1600,然后单击“启动工作流”。
这将再次显示“共享文档”列表。 将带有“已完成”值的名为“workflow”的新列添加到工作流刚启动的项中。
6. 单击已上载文档旁边的下拉箭头,然后单击“工作流”以显示工作流状态页。 单击“已完成工作流”下的值“已完成”。 这将在“任务”部分下方列出任务。
7. 单击任务的标题以显示其任务详细信息。
8. 返回到“共享文档”列表并使用同一文档或其他文档重新启动工作流。
9. 在启动页上输入一个小于或等于关联页上输入的金额 (1200) 的金额。
在执行此操作时,会在历史记录列表中创建一个项而不是任务。 该项显示在工作流状态页的“工作流历史记录”部分中。 请注意历史记录事件的“结果”列中的消息。 它包含 logToHistoryListActivity1.MethodInvoking 事件中输入的文本,该文本包括已自动审批的金额。
说明:此教程只来说明,工作流关联窗体和启动窗体如何使用,内容简单。较复杂的工作流和比较符合实际业务流程的工作流开发会在以后的教程中涉及。