SharePoint 2010 工作流解决方案:创建带有关联窗体和启动窗体的工作流

创建 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. 在模板列表中,选择工作流关联窗体

1

  

   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. 在模板列表中,选择工作流启动窗体

12

  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

   2. 通过将此活动拖动到设计器中并将其放置在工作流中的“onWorkflowActivated1”活动下方,将此活动添加到工作流中。 这将在设计器中创建一个称作 IfElseActivity1 的活动。

3

   3. 在工具箱中,展开“SharePoint 工作流节点并找到“CreateTask”活动。

4

   4. 通过将此活动拖放到 IfElseActivity1 中的两个 Activity 拖放至此区域之一,将此活动添加到工作流中。

5

   5. 在属性窗口中,为 CorrelationToken 属性输入属性值 taskToken。

   6. 通过单击 CorrelationToken 属性旁边的加号来展开此属性。

   7. 单击 OwnerActivityName 子属性上的下拉箭头并选择 Workflow1。

6

   8. 单击 TaskId 属性,然后单击省略号 按钮以显示绑定属性对话框。

   9. 单击绑定到新成员选项卡,选择创建字段,然后单击确定

13

   10. 单击 TaskProperties 属性,然后单击省略号按钮以显示绑定属性对话框。

   11. 单击绑定到新成员选项卡,选择创建字段,然后单击确定

14

   12. 在工具箱中,展开“SharePoint 工作流节点并找到“LogToHistoryListActivity”活动。

   13. 通过将此活动拖放到 IfElseActivity1 中的另一个 Activity 拖放至此区域,将此活动添加到工作流中。

9

在工作流中添加代码

  接下来,在工作流中添加代码以引入功能。

  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。

10

  7. 在工作流设计器中,右击“logToHistoryListActivity1”活动并选择生成处理程序,以便为 MethodInvoking 事件生成空方法。

11

  8. 将 MethodInvoking 代码替换为下面的内容:

private void logToHistoryListActivity1_MethodInvoking(object sender, EventArgs e)
{
      this.logToHistoryListActivity1.HistoryOutcome = "批准的报销: " + workflowProperties.InitiationData;
 }

  9. 按 F5 调试程序。

将工作流关联到文档库或列表

  接下来,通过将工作流与 SharePoint 网站上的共享文档列表相关联来显示工作流关联窗体。

关联工作流

  1. 在快速启动栏上单击共享文档

  2. 单击库工具功能区选项卡上的,然后单击库设置功能区按钮。

  3. 在权限和管理部分中,单击工作流设置链接,然后单击工作流页上的添加工作流链接

16

  4. 在工作流设置页中的顶部列表中,选择“* - Workflow1”模板。

15

  5. 在下一个字段中,键入 Workflow,然后单击下一步按钮。

  这会将工作流与共享文档列表相关联并显示工作流关联窗体。

  6. 在“提交审批的限额”文本框中,键入 1200,然后单击“完成按钮。

17

启动工作流

  然后将工作流关联到共享文档列表中的某个文档以显示工作流启动窗体。

  1. 在 SharePoint 页上,单击主页按钮,然后通过在快速启动栏上单击共享文档链接来显示 SharePoint 网站上的共享文档列表。

  2. 通过单击页顶部的库工具选项卡上的文档链接,并单击功能区上的上载文档按钮,将新文档上载到共享文档列表中。

  3. 将鼠标指针指向已上载文档以显示下拉箭头。 单击下拉箭头并选择工作流

18

  这将显示工作流启动窗体。 (请注意,“提交审批的限额”框中显示的值是只读的,因为此值是先前在关联窗体中输入的。)

  5. 在“费用总额”文本框中键入 1600,然后单击启动工作流

19

这将再次显示共享文档列表。 将带有“已完成”值的名为“workflow”的新列添加到工作流刚启动的项中。

20

  6. 单击已上载文档旁边的下拉箭头,然后单击工作流以显示工作流状态页。 单击已完成工作流下的值已完成。 这将在任务部分下方列出任务。

21

  7. 单击任务的标题以显示其任务详细信息。

22

  8. 返回到共享文档列表并使用同一文档或其他文档重新启动工作流。

  9. 在启动页上输入一个小于或等于关联页上输入的金额 (1200) 的金额。

   在执行此操作时,会在历史记录列表中创建一个项而不是任务。 该项显示在工作流状态页的工作流历史记录部分中。 请注意历史记录事件的结果列中的消息。 它包含 logToHistoryListActivity1.MethodInvoking 事件中输入的文本,该文本包括已自动审批的金额。

23

说明:此教程只来说明,工作流关联窗体和启动窗体如何使用,内容简单。较复杂的工作流和比较符合实际业务流程的工作流开发会在以后的教程中涉及。

原文地址:https://www.cnblogs.com/yunliang1028/p/2136821.html