转:http://blog.csdn.net/gxiangzi/article/details/8444590

本来想一篇文章把流程开发介绍完的,后来发现实在是太多了,只好分成两部分了。上一篇很简单的介绍了下k2流程的设计和配置,希望大家的流程都已经发布成功了。这部分接着上面讲,主要说一下k2流程api的使用。

我们要在k2web中新建一下几个页面:

  1. LeaveProcess\Startflow.aspx:请假流程发起界面
  2. LeaveProcess\Audit.aspx:请假流程审批界面
  3. index.aspx:流程列表界面
  4. MyWorklist.aspx:我的待办流程列表界面

1.首先贴一下流程处理的公共类,很简单就是打开k2的链接:

  1. using SourceCode.Workflow.Client;
  2. using SourceCode.Workflow.Management;
  3. //以上dll请在解决方案里面引用
  4. namespace K2Web
  5. {
  6. public class K2Util
  7. {
  8. public K2Util() { }
  9. public Connection GetK2Connection()
  10. {
  11. Connection k2con = new Connection();
  12. // Connect to Workflow Server
  13. k2con.Open("SZ-JIANGWX:5252");
  14. return k2con;
  15. }
  16. public WorkflowManagementServer GetK2WorkflowMgr()
  17. {
  18. WorkflowManagementServer wms = new WorkflowManagementServer("SZ-JIANGWX", 5555);
  19. wms.Open();
  20. return wms;
  21. }
  22. }
  23. }
using SourceCode.Workflow.Client;
using SourceCode.Workflow.Management;
//以上dll请在解决方案里面引用 namespace K2Web
{
public class K2Util
{
public K2Util() { } public Connection GetK2Connection()
{
Connection k2con = new Connection();
// Connect to Workflow Server
k2con.Open("SZ-JIANGWX:5252");
return k2con;
} public WorkflowManagementServer GetK2WorkflowMgr()
{
WorkflowManagementServer wms = new WorkflowManagementServer("SZ-JIANGWX", 5555);
wms.Open();
return wms;
}
}
}

2.流程发起界面 Startflow.aspx

前台界面我就不贴了,拉三个textbox分别是我们请假流程的三个参数,后面贴一下后台主要代码。

  1. //提交按钮事件处理程序
  2. protected void btnSave_Click(object sender, EventArgs e)
  3. {
  4. K2Util k2 = new K2Util();
  5. Connection k2con = k2.GetK2Connection();//打开链接
  6. string flowname = @"K2Workflow\LeaveProcess";//发布的流程名称
  7. ProcessInstance pi = k2con.CreateProcessInstance(flowname);
  8. //流程数据赋值
  9. pi.DataFields["请假人"].Value = txtOriginator.Text;
  10. pi.DataFields["请假天数"].Value = txtDays.Text;
  11. pi.DataFields["请假原因"].Value = txtReason.Text;
  12. //设置流程标志 我这里是 发起人姓名+流程名称+发起时间
  13. pi.Folio = txtOriginator.Text+"LeaveProcess" + DateTime.Now.ToString("yyyyMMddHHmm");
  14. //启动流程
  15. k2con.StartProcessInstance(pi);
  16. k2con.Close();//关闭链接
  17. }
   //提交按钮事件处理程序
protected void btnSave_Click(object sender, EventArgs e)
{
K2Util k2 = new K2Util();
Connection k2con = k2.GetK2Connection();//打开链接 string flowname = @"K2Workflow\LeaveProcess";//发布的流程名称
ProcessInstance pi = k2con.CreateProcessInstance(flowname);
//流程数据赋值
pi.DataFields["请假人"].Value = txtOriginator.Text;
pi.DataFields["请假天数"].Value = txtDays.Text;
pi.DataFields["请假原因"].Value = txtReason.Text;
//设置流程标志 我这里是 发起人姓名+流程名称+发起时间
pi.Folio = txtOriginator.Text+"LeaveProcess" + DateTime.Now.ToString("yyyyMMddHHmm");
//启动流程
k2con.StartProcessInstance(pi);
k2con.Close();//关闭链接
}

3.流程审批界面 Audit.aspx

前台界面没有太大变化,发起界面的三个textbox换成了label用以展示数据,此外另外加了一个dropdownlist,用以加载审批活动的  Action列表。前台代码如下:

  1. <table style="width: 50%;">
  2. <tr>
  3. <td align="right">
  4. 请假人:
  5. </td>
  6. <td align="left">
  7. <asp:Label ID="txtOriginator" runat="server"></asp:Label>
  8. </td>
  9. </tr>
  10. <tr>
  11. <td align="right">
  12. 请假天数:
  13. </td>
  14. <td align="left">
  15. <asp:Label ID="txtDays" runat="server"></asp:Label>天
  16. </td>
  17. </tr>
  18. <tr>
  19. <td align="right">
  20. 请假原因:
  21. </td>
  22. <td align="left">
  23. <asp:Label ID="txtReason" runat="server"></asp:Label>
  24. </td>
  25. </tr>
  26. <tr>
  27. <td align="right">
  28. 审批意见:
  29. </td>
  30. <td align="left">
  31. <asp:TextBox ID="txtManager" runat="server"></asp:TextBox>
  32. </td>
  33. </tr>
  34. <tr>
  35. <td align="right">
  36. <asp:DropDownList ID="dopAction" runat="server">
  37. </asp:DropDownList>
  38. </td>
  39. <td>
  40. <asp:Button ID="btnSave" runat="server" Text="提交" OnClick="btnSave_Click" />
  41. </td>
  42. </tr>
  43. </table>
   <table style="width: 50%;">
<tr>
<td align="right">
请假人:
</td>
<td align="left">
<asp:Label ID="txtOriginator" runat="server"></asp:Label>
</td>
</tr>
<tr>
<td align="right">
请假天数:
</td>
<td align="left">
<asp:Label ID="txtDays" runat="server"></asp:Label>天
</td>
</tr>
<tr>
<td align="right">
请假原因:
</td>
<td align="left">
<asp:Label ID="txtReason" runat="server"></asp:Label>
</td>
</tr>
<tr>
<td align="right">
审批意见:
</td>
<td align="left">
<asp:TextBox ID="txtManager" runat="server"></asp:TextBox>
</td>
</tr> <tr>
<td align="right">
<asp:DropDownList ID="dopAction" runat="server">
</asp:DropDownList>
</td>
<td>
<asp:Button ID="btnSave" runat="server" Text="提交" OnClick="btnSave_Click" />
</td>
</tr>
</table>

后台代码:

  1. protected void Page_Load(object sender, EventArgs e)
  2. {
  3. K2Util k2 = new K2Util();
  4. Connection k2con = k2.GetK2Connection();
  5. //根据SN号获取流程
  6. string sn = Request.QueryString["SN"];
  7. WorklistItem wi = k2con.OpenWorklistItem(sn);
  8. ProcessInstance pi = wi.ProcessInstance;
  9. //获取流程数据
  10. txtOriginator.Text = pi.DataFields["请假人"].Value.ToString();
  11. txtDays.Text = pi.DataFields["请假天数"].Value.ToString();
  12. txtReason.Text = pi.DataFields["请假原因"].Value.ToString();
  13. //加载活动Action列表
  14. dopAction.DataSource = wi.Actions;
  15. dopAction.DataTextField = "Name";
  16. dopAction.DataBind();
  17. k2con.Close();
  18. }
  19. protected void btnSave_Click(object sender, EventArgs e)
  20. {
  21. K2Util k2 = new K2Util();
  22. Connection k2con = k2.GetK2Connection();
  23. //根据SN获取流程
  24. string sn = Request.QueryString["SN"];
  25. WorklistItem wi = k2con.OpenWorklistItem(sn);
  26. ProcessInstance pi = wi.ProcessInstance;
  27. //设置审批意见
  28. pi.DataFields["经理审批意见"].Value = txtManager.Text.Trim();
  29. //执行Action操作
  30. wi.Actions[dopAction.Text].Execute();
  31. //提交按钮灰掉
  32. btnSave.Enabled = false;
  33. k2con.Close();
  34. }
 protected void Page_Load(object sender, EventArgs e)
{
K2Util k2 = new K2Util();
Connection k2con = k2.GetK2Connection();
//根据SN号获取流程
string sn = Request.QueryString["SN"];
WorklistItem wi = k2con.OpenWorklistItem(sn);
ProcessInstance pi = wi.ProcessInstance;
//获取流程数据
txtOriginator.Text = pi.DataFields["请假人"].Value.ToString();
txtDays.Text = pi.DataFields["请假天数"].Value.ToString();
txtReason.Text = pi.DataFields["请假原因"].Value.ToString();
//加载活动Action列表
dopAction.DataSource = wi.Actions;
dopAction.DataTextField = "Name";
dopAction.DataBind(); k2con.Close();
} protected void btnSave_Click(object sender, EventArgs e)
{
K2Util k2 = new K2Util();
Connection k2con = k2.GetK2Connection(); //根据SN获取流程
string sn = Request.QueryString["SN"];
WorklistItem wi = k2con.OpenWorklistItem(sn);
ProcessInstance pi = wi.ProcessInstance; //设置审批意见
pi.DataFields["经理审批意见"].Value = txtManager.Text.Trim();
//执行Action操作
wi.Actions[dopAction.Text].Execute();
//提交按钮灰掉
btnSave.Enabled = false;
k2con.Close();
}

4.流程列表界面 index.aspx

用户进入的向导页面,只有一些html代码。

  1. <body>
  2. <form id="form1" runat="server">
  3. <h3>
  4. K2 flow list:</h3>
  5. <div style="margin-left: 100px">
  6. <a href="DemoProcess/start.aspx" target="_blank">DemoProcess</a>
  7. <br />
  8. <a href="LeaveProcess/Startflow.aspx" target="_blank">LeaveProcess</a>
  9. </div>
  10. <div>
  11. <h3>
  12. <a href="MyWorklist.aspx" target="_blank">MyWorklist</a></h3>
  13. </div>
  14. </form>
  15. </body>
<body>
<form id="form1" runat="server">
<h3>
K2 flow list:</h3>
<div style="margin-left: 100px">
<a href="DemoProcess/start.aspx" target="_blank">DemoProcess</a>
<br />
<a href="LeaveProcess/Startflow.aspx" target="_blank">LeaveProcess</a>
</div>
<div>
<h3>
<a href="MyWorklist.aspx" target="_blank">MyWorklist</a></h3>
</div>
</form>
</body>

5.我的待办页面  MyWorklist.aspx

此页面展示当前登录用户的待办列表,前台是一个repeater,单击流程名称进入审批页面,前台代码如下:

  1. <table style="width: 95%">
  2. <tr>
  3. <th>
  4. Folio
  5. </th>
  6. <th>
  7. SerialNumber
  8. </th>
  9. <th>
  10. ProcessName
  11. </th>
  12. <th>
  13. ActivityName
  14. </th>
  15. <th>
  16. EventName
  17. </th>
  18. <th>
  19. StartDate
  20. </th>
  21. </tr>
  22. <asp:Repeater ID="Mylist" runat="server">
  23. <ItemTemplate>
  24. <tr>
  25. <td>
  26. <%#DataBinder.Eval(Container.DataItem, "Folio").ToString()%>
  27. </td>
  28. <td>
  29. <%#DataBinder.Eval(Container.DataItem, "SerialNumber").ToString()%>
  30. </td>
  31. <td>
  32. <%#DataBinder.Eval(Container.DataItem, "ProcessName").ToString()%>
  33. </td>
  34. <td>
  35. <%#DataBinder.Eval(Container.DataItem, "ActivityName").ToString()%>
  36. </td>
  37. <td>
  38. <%#DataBinder.Eval(Container.DataItem, "EventName").ToString()%>
  39. </td>
  40. <td>
  41. <%#DataBinder.Eval(Container.DataItem, "StartDate", "{0:yyyy-MM-dd HH:mm}")%>
  42. </td>
  43. </tr>
  44. </ItemTemplate>
  45. </asp:Repeater>
  46. </table>
  <table style="width: 95%">
<tr>
<th>
Folio
</th>
<th>
SerialNumber
</th>
<th>
ProcessName
</th>
<th>
ActivityName
</th>
<th>
EventName
</th>
<th>
StartDate
</th>
</tr>
<asp:Repeater ID="Mylist" runat="server">
<ItemTemplate>
<tr>
<td>
<%#DataBinder.Eval(Container.DataItem, "Folio").ToString()%>
</td>
<td>
<%#DataBinder.Eval(Container.DataItem, "SerialNumber").ToString()%>
</td>
<td>
<%#DataBinder.Eval(Container.DataItem, "ProcessName").ToString()%>
</td>
<td>
<%#DataBinder.Eval(Container.DataItem, "ActivityName").ToString()%>
</td>
<td>
<%#DataBinder.Eval(Container.DataItem, "EventName").ToString()%>
</td>
<td>
<%#DataBinder.Eval(Container.DataItem, "StartDate", "{0:yyyy-MM-dd HH:mm}")%>
</td>
</tr>
</ItemTemplate>
</asp:Repeater>
</table>

后台加载数据的代码:

  1. protected void Page_Load(object sender, EventArgs e)
  2. {
  3. Connection k2con = new Connection();
  4. // Connect to Workflow Server
  5. k2con.Open("SZ-JIANGWX:5252");
  6. //获取当前登录用户的待办列表
  7. Worklist wl = k2con.OpenWorklist();
  8. //create a data table
  9. DataTable dt = new DataTable();
  10. //add some columns
  11. dt.Columns.Add("Folio");
  12. dt.Columns.Add("SerialNumber");
  13. dt.Columns.Add("ProcessName");
  14. dt.Columns.Add("ActivityName");
  15. dt.Columns.Add("EventName");
  16. dt.Columns.Add("StartDate");
  17. foreach (WorklistItem wli in wl)
  18. {
  19. //create a new row, with columns defined
  20. DataRow dr = dt.NewRow();
  21. //add values from worklist + sub-objects
  22. dr["SerialNumber"] = wli.SerialNumber;
  23. dr["ProcessName"] = "<a href=" + wli.Data.ToString() + " target='_blank'>" + wli.ProcessInstance.FullName + "</a>";
  24. dr["ActivityName"] = wli.ActivityInstanceDestination.Name;
  25. dr["EventName"] = wli.EventInstance.Name;
  26. dr["StartDate"] = wli.EventInstance.StartDate.ToString();
  27. dr["Folio"] = wli.ProcessInstance.Folio;
  28. //add the data row to the data table
  29. dt.Rows.Add(dr);
  30. }
  31. //bind data table to grid
  32. Mylist.DataSource = dt;
  33. Mylist.DataBind();
  34. k2con.Close();
  35. }
   protected void Page_Load(object sender, EventArgs e)
{
Connection k2con = new Connection();
// Connect to Workflow Server
k2con.Open("SZ-JIANGWX:5252");
//获取当前登录用户的待办列表
Worklist wl = k2con.OpenWorklist();
//create a data table
DataTable dt = new DataTable();
//add some columns
dt.Columns.Add("Folio");
dt.Columns.Add("SerialNumber");
dt.Columns.Add("ProcessName");
dt.Columns.Add("ActivityName");
dt.Columns.Add("EventName");
dt.Columns.Add("StartDate"); foreach (WorklistItem wli in wl)
{
//create a new row, with columns defined
DataRow dr = dt.NewRow();
//add values from worklist + sub-objects
dr["SerialNumber"] = wli.SerialNumber;
dr["ProcessName"] = "<a href=" + wli.Data.ToString() + " target='_blank'>" + wli.ProcessInstance.FullName + "</a>";
dr["ActivityName"] = wli.ActivityInstanceDestination.Name;
dr["EventName"] = wli.EventInstance.Name;
dr["StartDate"] = wli.EventInstance.StartDate.ToString();
dr["Folio"] = wli.ProcessInstance.Folio;
//add the data row to the data table
dt.Rows.Add(dr);
} //bind data table to grid
Mylist.DataSource = dt;
Mylist.DataBind();
k2con.Close();
}

6.运行流程:index进入startflow页面,startflow填写数据发起流程,index页面进入myworklist页面,myworklist页面单击待办列表进入审批页面。

7.这些api都是最常用的几个api,时间所限只能简单写成这样,最起码最简单的一个k2流程可以跑起来了,哈哈,下面推荐一些k2的学习链接和书。

电子书:K2_Blackpearl_产品白皮书.pdf   k2产品的基础介绍

Wrox.Professional.K2.blackpearl.Feb.2009.eBook-DDU.pdf    wrox出版的k2教程书,经典书,详细介绍了k2的开发知识,我正在看此书。

学习链接:http://www.cnblogs.com/kaixuanpisces/category/149223.html

http://www.cnblogs.com/hqbird/archive/2010/06/23/1763665.html

http://www.cnblogs.com/dannyli/

http://www.cnblogs.com/shanyou/

http://www.k2underground.com/

K2 blackpearl 流程开发(二)的更多相关文章

  1. K2 blackpearl 流程开发(一)

    转:http://blog.csdn.net/gxiangzi/article/details/8444060 郁闷,今天K2的license过期了,很多东西都没法用了,还得去找PM大大帮忙申请一个. ...

  2. 使用C#代码审批/转签K2 Blackpearl流程

    转:http://www.cnblogs.com/dannyli/archive/2011/08/02/2125302.html 以下是使用代码审批.转签k2 blackpearl流程,初探K2 Bl ...

  3. 部署K2 Blackpearl流程时出错(由于目标计算机积极拒绝,无法连接)

    转:http://www.cnblogs.com/dannyli/archive/2011/12/01/2270118.html 亲,如果你也遇到过这个问题,就请继续往下看哦 在部署K2 Blackp ...

  4. 使用C#代码发起K2 Blackpearl流程

    转:http://www.cnblogs.com/dannyli/archive/2011/08/02/2125285.html 使用C#代码,发起一个K2的流程,其形式和链接SQL Server数据 ...

  5. 部署K2 Blackpearl流程时出错(与基础事务管理器的通信失败或Communication with the underlying transaction manager has failed.

    转:http://www.cnblogs.com/dannyli/archive/2011/12/01/2270222.html 亲,在部署K2流程是,是否遇到这个错误(以下是中.英文错误信息) 中文 ...

  6. K2 Blackpearl开发技术要点(Part2)

    转:http://www.cnblogs.com/dannyli/archive/2012/09/14/2685282.html K2 Blackpearl开发技术要点(Part2)  

  7. K2 Blackpearl开发技术要点(Part1)

    转:http://www.cnblogs.com/dannyli/archive/2012/09/14/2685260.html K2 Blackpearl开发技术要点(Part1) 预知后事如何,请 ...

  8. Slickflow.NET 开源工作流引擎高级开发(二) -- 流程快速测试增值服务工具介绍

    前言:流程是由若干个任务节点组成,流转过程就是从一个节点转移到下一个节点,通常需要不断切换用户身份来完成流程的测试,这样使得测试效率比较低下,本文从实战出发,介绍常见的两种快速测试方法,用于提升流程测 ...

  9. K2 blackpearl 安装

    转:http://blog.csdn.net/gxiangzi/article/details/8432188 K2是国外的一款BPM引擎,基于MS的Workflow,关于它的详细介绍在我之前一片博客 ...

随机推荐

  1. GCC 静态库和动态库

    转自GCC 静态库和动态库 //hello.c #include void print_hello() { printf("HelloWorld "); } //main.c #i ...

  2. Unity3D角色攻击范围判定和攻击判定

    原地址:http://www.unity蛮牛.com/blog-1801-479.html 第一种方法:运用点乘 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1 ...

  3. CF 295A Greg and Array (两次建树,区间更新,单点查询)

    #include <iostream> #include <stdio.h> #include <string.h> #include <algorithm& ...

  4. form表单中的enctype属性什么意思?

    enctype就是encodetype翻译成中文就是编码类型的意思!multipart/form-data是指表单数据有多部分构成:既有文本数据,又有文件等二进制数据的意思.另外需要注意的是:默认情况 ...

  5. A. Sorting Railway Cars

    A. Sorting Railway Cars time limit per test 2 seconds memory limit per test 256 megabytes input stan ...

  6. Makefile笔记

    一个简单的Makefile描述规则组成: TARGET...:PREREQUISITES... COMMANDS... ... target:规则的目标.通常是程序中间或者最后要生成的文件名,也可以是 ...

  7. 谷歌上不了?hoststool一键搞定host 支持在线更新

    https://hosts.huhamhire.com/ http://serve.netsh.org/pub/ipv4-hosts/

  8. Java API —— DateFormat类

    1.DateFormat类概述         DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间. 是抽象类,所以使用其子类SimpleDateForm ...

  9. 从Uboot到Linux技术内幕

    1. 引言 在专用的嵌入式板子运行 GNU/Linux 系统已经变得越来越流行.一个嵌入式 Linux 系统从软件的角度看通常可以分为四个层次: 1. 引导加载程序.包括固化在固件(firmware) ...

  10. Java开发工具MyEclipse的设置自动联想功能

    最近初学Java,正在使用MyEclipse来编写新的项目,刚开始打开MyEclipse感觉这个工具既陌生又熟悉,熟悉之处在于编辑器的几大共通之处它都具备,比如说基本的设置.编辑区.调试区都是类似的, ...