基于SharePoint 2010 创建一个简单的工作流

设想一下这样一个简单的情景:

某个公司里面设定报销限度为1200元。

如果报销限度超过1200,就提交给老板审核。

没有超过的话,系统自动批准。(暂时不考虑重复报销的情况)

   1. 通过指向“文件”菜单上的“新建”并单击“新建项目”,显示“新建项目”对话框。

   2. 展开“Visual C#”下的“SharePoint”节点,然后单击“2010”

   3. 在“模板”窗格中选择“顺序工作流”

image

   4. 在“名称”框中,键入名称,然后单击“确定”。这将显示“SharePoint 自定义向导”

   5. 在“要使用哪个本地网站进行调试?”页中,单击“下一步”以接受默认网站。

此步骤还会将解决方案的信任级别设置为场解决方案(工作流项目的唯一可用选项)。

image

   6. 在“指定用于调试的工作流名称”页上,接受默认名称(“* - Workflow1”)。 保留默认工作流模板类型值(“列表工作流”)。 单击“下一步”

image

   7. 在“是否希望 Visual Studio 在调试会话中自动关联工作流?”页中,清除自动关联工作流模板的框(如果此框已选中)。

利用此步骤,您可以稍后手动将工作流与显示关联窗体的“共享文档”列表关联。

image

   8. 单击“完成”

将关联窗体添加到工作流

接下来,创建一个 .ASPX 关联窗体,当 SharePoint 管理员首次将工作流与文档库或列表相关联时,将显示此窗体。

   1. 单击“解决方案资源管理器”中的“Workflow1”节点。

   2. 单击“项目”菜单上的“添加新项”以显示“添加新项”对话框。

   3. 在该对话框树视图中,展开“Visual C#”,再展开“SharePoint”节点,然后单击“2010”

   4. 在模板列表中,选择“工作流关联窗体”

image

5. 在“名称”文本框中,键入 ExpenseReportAssocForm.aspx。在这个场景中,这个关联窗体主要作用是初始化最大报销费用,这个稍后会有介绍。

6. 单击“添加”按钮将该窗体添加到项目中。

设计关联窗体并对其进行编码

在此过程中,通过在关联窗体中添加控件和代码来引入功能。

1. 在关联窗体 (ExpenseReportAssocForm.aspx) 中,找到具有 ID=”Main” 的 asp:Content 元素。

2. 紧接在此内容元素中的第一行后面添加以下代码,以创建一个用于提示输入费用审批限额 (AutoApproveLimit) 的标签和文本框:

<asp:Label ID="lblAutoApproveLimit" Text="自动批准限制:" runat="server" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<asp:TextBox ID="AutoApproveLimit" runat="server" />
<br /><br />

效果如下:

image

输入框主要是输入限定的金额,将来可以输入1200元的最大限定金额。

3. 展开“解决方案资源管理器”中的“ExpenseReportAssocForm.aspx”文件以显示其从属文件。

4. 右击 ExpenseReportAssocForm.aspx 文件并选择“查看代码”

5. 将 GetAssociationData 方法替换为:

// This method is called when the user clicks the button to associate the workflow.
private string GetAssociationData()
{
    // TODO: Return a string that contains the association data that will be passed to the workflow. Typically, this is in XML format.
return AutoApproveLimit.Text;
}
 

返回的是限制金额数。

将启动窗体添加到工作流

接下来,创建在用户针对文档库或者列表运行工作流时显示的启动窗体。

创建启动窗体

  1. 单击“解决方案资源管理器”中的“Workflow1”节点。

  2. 单击“项目”菜单上的“添加新项”以显示“添加新项”对话框。

  3. 在该对话框树视图中,展开“Visual C#”,再展开“SharePoint”节点,然后单击“2010”

  4. 在模板列表中,选择“工作流启动窗体”

image

  5. 在“名称”文本框中,键入ExpenseReportInitForm.aspx。

  6. 单击“添加”按钮将该窗体添加到项目中。

设计启动窗体并对其进行编码

对启动窗体进行编码

  1. 在启动窗体 (ExpenseReportInitForm.aspx) 中,找到具有 ID=”Main” 的 asp:Content 元素。

  2. 紧接在此内容元素中的第一行后面添加以下代码,以创建一个显示已在关联窗体中输入的费用审批限额 (AutoApproveLimit) 的标签和文本框,以及另一个提示输入费用总额 (ExpenseTotal) 的标签和文本框:

<asp:Label ID="lblAutoApproveLimit" Text="费用审批限额:" runat="server" />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<asp:TextBox ID="AutoApproveLimit" ReadOnly="true" runat="server" />
<br /><br />

<asp:Label ID="lblExpenseTotal" Text="费用总额:" runat="server" /> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<asp:TextBox ID="ExpenseTotal" runat="server" />
<br /><br />

    3. 展开“解决方案资源管理器”中的“ExpenseReportInitForm.aspx”文件以显示其从属文件。

  4. 右击 ExpenseReportInitForm.aspx 文件并选择“查看代码”

  5. 将 Page_Load 方法替换为以下示例:

protected void Page_Load(object sender, EventArgs e) 
{
    InitializeParams(); 
    this.AutoApproveLimit.Text = workflowList.WorkflowAssociations[new Guid(associationGuid)].AssociationData; 
}
 

这段代码的意思是 费用审批限额框显示初始化好的最大报销限额,如果我们在关联窗口设定最大报销金额为1200,那么这里就会显示1200。

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”活动。

clip_image006

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

clip_image008

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

clip_image010

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

clip_image012

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

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

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

clip_image014

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

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

clip_image016

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

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

clip_image018

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

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

clip_image020

在工作流中添加代码

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

   1. 在 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;
}
 

这段代码的意思是判断申请的金额是否大于最大报销限度。如果条件为真的话,就走领导审批的流程。所以这段代码要关联工作流的某个分支,我们就把“ifElseBranchActivity1”活动关联上这段代码。如接下来的2、3、4所述。

  2. 在工作流设计器中,单击“ifElseBranchActivity1”活动。

  3. 在“属性”窗口中,单击“Condition”属性的下拉箭头并选择 Code Condition。

  4. 通过单击“Condition”属性旁边的加号来展开此属性,然后将其值设置为 checkApprovalNeeded。

clip_image022

接下来我们在这一条分支中写一些具体操作的步骤,让超过限额的报告交给老板审核。如5、6所述。

  5. 在工作流设计器中双击“createTask1”活动,为 MethodInvoking 事件生成一个空方法。

  6. 将 MethodInvoking 方法替换为:

private void createTask1_MethodInvoking(object sender, EventArgs e)
{
    createTask1_TaskId1 = Guid.NewGuid();
    createTask1_TaskProperties1.AssignedTo = "icloud\\administrator";//这里可以设定审核人的帐号,比如说老板的。
createTask1_TaskProperties1.Description = "请批准开支报告";
    createTask1_TaskProperties1.Title = "开支报告需要批准";
}

  7. 接下来我们设定当报销少于限定金额时,系统自动通过审核的流程:在工作流设计器中,右击“logToHistoryListActivity1”活动并选择“生成处理程序”,以便为 MethodInvoking 事件生成空方法。

clip_image024

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

private void logToHistoryListActivity1_MethodInvoking(object sender, EventArgs e)
{
    this.logToHistoryListActivity1.HistoryOutcome = "费用已经获得自动批准,金额 " + workflowProperties.InitiationData + " 元。";
}
 

   9. 按 F5 调试程序。

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

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

关联工作流

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

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

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

clip_image026

  4. 在工作流设置页中的顶部列表中,选择创建好的模板。

image

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

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

  6. 在“提交审批的限额”文本框中,键入 1200,然后单击“关联工作流”按钮。

image

启动工作流

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

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

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

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

image

image

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

  5. 点击“费用批准”链接或图标,开始工作流。在“费用总额”文本框中键入 1600,然后单击“启动工作流”

image

(按照我们代码中的条件,将会启动提交审核人手动审核的分支流程。我们按照6、7步骤可以查看处理后的结果。)

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

image

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

image

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

image

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

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

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

image

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

参考 http://msdn.microsoft.com/zh-cn/library/ee231590.aspx

参考 http://blog.csdn.net/yun_liang1028/article/details/6281397

原文地址:https://www.cnblogs.com/poissonnotes/p/2381866.html