K2 blackpearl 流程开发(二)
转:http://blog.csdn.net/gxiangzi/article/details/8444590
本来想一篇文章把流程开发介绍完的,后来发现实在是太多了,只好分成两部分了。上一篇很简单的介绍了下k2流程的设计和配置,希望大家的流程都已经发布成功了。这部分接着上面讲,主要说一下k2流程api的使用。
我们要在k2web中新建一下几个页面:
- LeaveProcess\Startflow.aspx:请假流程发起界面
- LeaveProcess\Audit.aspx:请假流程审批界面
- index.aspx:流程列表界面
- MyWorklist.aspx:我的待办流程列表界面
1.首先贴一下流程处理的公共类,很简单就是打开k2的链接:
- 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;
- }
- }
- }
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分别是我们请假流程的三个参数,后面贴一下后台主要代码。
- //提交按钮事件处理程序
- 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();//关闭链接
- }
//提交按钮事件处理程序
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列表。前台代码如下:
- <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>
<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>
后台代码:
- 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();
- }
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代码。
- <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>
<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,单击流程名称进入审批页面,前台代码如下:
- <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>
<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>
后台加载数据的代码:
- 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();
- }
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/
K2 blackpearl 流程开发(二)的更多相关文章
- K2 blackpearl 流程开发(一)
转:http://blog.csdn.net/gxiangzi/article/details/8444060 郁闷,今天K2的license过期了,很多东西都没法用了,还得去找PM大大帮忙申请一个. ...
- 使用C#代码审批/转签K2 Blackpearl流程
转:http://www.cnblogs.com/dannyli/archive/2011/08/02/2125302.html 以下是使用代码审批.转签k2 blackpearl流程,初探K2 Bl ...
- 部署K2 Blackpearl流程时出错(由于目标计算机积极拒绝,无法连接)
转:http://www.cnblogs.com/dannyli/archive/2011/12/01/2270118.html 亲,如果你也遇到过这个问题,就请继续往下看哦 在部署K2 Blackp ...
- 使用C#代码发起K2 Blackpearl流程
转:http://www.cnblogs.com/dannyli/archive/2011/08/02/2125285.html 使用C#代码,发起一个K2的流程,其形式和链接SQL Server数据 ...
- 部署K2 Blackpearl流程时出错(与基础事务管理器的通信失败或Communication with the underlying transaction manager has failed.
转:http://www.cnblogs.com/dannyli/archive/2011/12/01/2270222.html 亲,在部署K2流程是,是否遇到这个错误(以下是中.英文错误信息) 中文 ...
- K2 Blackpearl开发技术要点(Part2)
转:http://www.cnblogs.com/dannyli/archive/2012/09/14/2685282.html K2 Blackpearl开发技术要点(Part2)
- K2 Blackpearl开发技术要点(Part1)
转:http://www.cnblogs.com/dannyli/archive/2012/09/14/2685260.html K2 Blackpearl开发技术要点(Part1) 预知后事如何,请 ...
- Slickflow.NET 开源工作流引擎高级开发(二) -- 流程快速测试增值服务工具介绍
前言:流程是由若干个任务节点组成,流转过程就是从一个节点转移到下一个节点,通常需要不断切换用户身份来完成流程的测试,这样使得测试效率比较低下,本文从实战出发,介绍常见的两种快速测试方法,用于提升流程测 ...
- K2 blackpearl 安装
转:http://blog.csdn.net/gxiangzi/article/details/8432188 K2是国外的一款BPM引擎,基于MS的Workflow,关于它的详细介绍在我之前一片博客 ...
随机推荐
- JS创建对象
本人常用的创建对象的方式,仅供参考,欢迎吐槽,谢谢! 创建对象1.对象字面量,即使用大括号,如下: (function(){ var obj = { id: 1, desc: '创建对象测试开始啦!' ...
- Eclipse 修改项目名称
1:修改项目目录下:.project文件 <?xml version="1.0" encoding="UTF-8"?> ...
- eclipse的设置和优化
转载:http://my.oschina.net/zhaoqian/blog/66545 1.eclipse下的编码设置: eclipse 中使用模板新建 JSP,xhtml等 文件时,默认的编码为: ...
- .NET中操作SQLite
C#操作SQLite Database C#下SQLite操作驱动dll下载:System.Data.SQLite C#使用SQLite步骤: (1)新建一个project (2)添加SQLite操作 ...
- Spring与Hibernate整合
Spring与Struts2整合的目的: 让Spring管理Action Spring整合Hinernate的目的: --管理SessionFactory(单例的),数据源 --声明式事务管理 1.首 ...
- HttpServletRequest接口实例化的使用
HttpServletRequ接口的使用和jsp内置对象的request对象非常类似,request对象其实 就是HttpServletRequest接口的一个实例,不过气实例化的过程是自动的,无须自 ...
- Django admin的一些有用定制
Model实例,myapp/models.py: from django.db import models class Blog(models.Model): name = models.CharFi ...
- c# 使用 静态类+xml序列化 保存配置文件
namespace TVCorrectionDataProcess{ [XmlRoot(ElementName = "Config")] public class Co ...
- VS2012 开发SharePoint 2013 声明式workflow action(activity)之 HelloWorld
本文讲述VS2012 开发SharePoint 2013 声明式workflow action 之 HelloWorld. 使用VS2012开发客户化的workflow action是SharePoi ...
- WIN32编程杂记(一)
1.UNREFERENCED_PARAMETER的用处 作用:告诉编译器,已经使用了该变量,不必检测警告! 在VC编译器下,如果您用最高级别进行编译,编译器就会很苛刻地指出您的非常细小的警告.当你生命 ...