package com.sample;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.jbpm.JbpmConfiguration;
import org.jbpm.JbpmContext;
import org.jbpm.db.GraphSession;
import org.jbpm.db.TaskMgmtSession;
import org.jbpm.graph.def.ProcessDefinition;
import org.jbpm.graph.def.Transition;
import org.jbpm.graph.exe.ProcessInstance;
import org.jbpm.taskmgmt.exe.TaskInstance;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
public class SimpleProcessTest extends HibernateDaoSupport implements ISimpleProcessTest{
private JbpmConfiguration jbpmConfiguration;
public void setJbpmConfiguration(JbpmConfiguration jbpmConfiguration) {
this.jbpmConfiguration = jbpmConfiguration;
}
public SimpleProcessTest() {
}
/**
* 创建JBPM上下文
*
* @return
*/
public JbpmContext getContext() {
JbpmContext jbpmContext = jbpmConfiguration.getCurrentJbpmContext();
if (jbpmContext == null) {
jbpmContext = jbpmConfiguration.createJbpmContext();
}
jbpmContext.setSession(super.getSession());
return jbpmContext;
}
//1.准备
//@Test
public void testSimpleProcess() throws Exception {
JbpmContext jbpmContext = getContext();
// 1.解析流程定义
ProcessDefinition processDefinition = ProcessDefinition
.parseXmlResource("simple/processdefinition.xml");
//2.创建表
jbpmConfiguration.createSchema();
//3.发布流程定义,即将XML中的数据保存到表中
jbpmContext.deployProcessDefinition(processDefinition);
//4.关闭Context,不然事务不提交
jbpmContext.close();
}
//2.启动流程
//@Test
public long start() throws Exception{
//5.获取最新版本的流程定义
ProcessDefinition processDefinition = this.getContext().getGraphSession().findLatestProcessDefinition("simple");
//6.创建流程实例,此时处理[开始]节点
//ProcessInstance processInstance = new ProcessInstance(processDefinition);
ProcessInstance processInstance = this.getContext().newProcessInstance("simple");
//this.getContext().save(processInstance);
//7.发出信号
System.out.println(processInstance.getRootToken().getNode().getName());
processInstance.getRootToken().signal();//执行后处于[启动请假条申请]
System.out.println(processInstance.getRootToken().getNode().getName());
processInstance.signal();//执行后处于[写请假条]
System.out.println(processInstance.getRootToken().getNode().getName());
//this.getContext().close();
return processInstance.getId();
}
//@Test131351387910
//员工写请假条,填写请假原因和请假天数
public void testWrite(long id) throws Exception{
//8.得到指定流程实例(此处为3)
ProcessInstance processInstance = this.getContext().getProcessInstance(id);
//9.定义参数
Map params = new HashMap();
params.put("message", "因为有私事");
params.put("days", 1);
//10.根据流程实例ID和用户名取得该用户的任务实例
TaskMgmtSession taskMgmtSession = getContext().getTaskMgmtSession();
//List<TaskInstance> list = taskMgmtSession.findTaskInstances("李赞红");
List<TaskInstance> list = this.getContext().getTaskList("李赞红");
for(TaskInstance taskInstance : list){
long l = taskInstance.getTaskMgmtInstance().getProcessInstance().getId();
System.out.println(id);
if(l == processInstance.getId()){
taskInstance.getContextInstance().setVariable("bb", "可可");
System.out.println("任务名称:" + taskInstance.getName());
//12.将参数放到任务中
taskInstance.addVariables(params);
//13.进入下一个节点
List<Transition> ts = taskInstance.getAvailableTransitions();
for(Iterator<Transition> iter = ts.iterator(); iter.hasNext(); ){
taskInstance.end(iter.next());
}
}
}
System.out.println(processInstance.getRootToken().getNode().getName());
//this.getContext().close();
}
//经理审批
//@Test
public void testManagerApprove(long id) throws Exception{
ProcessInstance processInstance = this.getContext().getProcessInstance(id);
List<TaskInstance> list = getContext().getTaskMgmtSession().findTaskInstances("张三");
for(TaskInstance taskInstance : list){
if(taskInstance.getTaskMgmtInstance().getProcessInstance().getId() == id){
System.out.println("任务名称:" + taskInstance.getName());
System.out.println(taskInstance.getContextInstance().getVariable("bb"));
Map<String, Object> map = taskInstance.getVariables();
Set<String> keys = map.keySet();
System.out.println("参数列表");
for(Iterator<String> iter = keys.iterator(); iter.hasNext(); ){
String key = iter.next();
if(Utils.isRead(taskInstance, key)){
System.out.println(key + "=" + map.get(key));
}else{
System.out.println(key + "不可读");
}
}
List<Transition> listt = taskInstance.getAvailableTransitions();
for(Iterator<Transition> iter2 = listt.iterator(); iter2.hasNext(); ){
taskInstance.end(iter2.next());
}
taskInstance.setActorId("王八");
}
}
System.out.println(processInstance.getRootToken().getNode().getName());
//this.getContext().close();
}
public void testBossApprove(long id) throws Exception{
ProcessInstance processInstance = this.getContext().getProcessInstance(id);
List<TaskInstance> list = getContext().getTaskMgmtSession().findTaskInstances("李四");
for(TaskInstance taskInstance : list){
if(taskInstance.getTaskMgmtInstance().getProcessInstance().getId() == id){
System.out.println("任务名称:" + taskInstance.getName());
System.out.println("用户:" + taskInstance.getActorId());
Map<String, Object> map = taskInstance.getVariables();
Set<String> keys = map.keySet();
System.out.println("参数列表");
for(Iterator<String> iter = keys.iterator(); iter.hasNext(); ){
String key = iter.next();
if(Utils.isRead(taskInstance, key)){
System.out.println(key + "=" + map.get(key));
}else{
System.out.println(key + "不可读");
}
}
List<Transition> listt = taskInstance.getAvailableTransitions();
for(Iterator<Transition> iter2 = listt.iterator(); iter2.hasNext(); ){
taskInstance.end(iter2.next());
}
}
}
System.out.println(processInstance.getRootToken().getNode().getName());
//this.getContext().close();
}
/**
* 查看关于我的指定流程的经办事项
* @throws Exception
*/
public void viewHandled() throws Exception{
//1.得到指定的流程定义对象
GraphSession graphSession = this.getContext().getGraphSession();
ProcessDefinition processDefinition = graphSession
.findLatestProcessDefinition("simple");
//2.查找该流程定义对象的所有流程实例
List<ProcessInstance> list =
graphSession.findProcessInstances(processDefinition.getId());
//3.假设是查找张三的经办事项
String actorId = "张三";
System.out.println("任务ID\t任务名称\t开始时间\t结束时间\t执行人");
for(ProcessInstance processInstance : list){
//4.获取当前流程实例的任务管理器,并取出任务管理器所管理的任务实例列表
Collection<TaskInstance> coll = processInstance
.getTaskMgmtInstance().getTaskInstances();
for(TaskInstance taskInstance : coll){
//5.判断当前任务是不是由张三完成[注意:是已经完成],如果是,则输出
if(actorId.equals(taskInstance.getActorId()) &&
taskInstance.hasEnded()){
System.out.println(taskInstance.getId() + "\t"
+ taskInstance.getName() + "\t"
+ taskInstance.getStart() + "\t"
+ taskInstance.getEnd() + "\t"
+ taskInstance.getActorId());
}
}
}
}
/**
* 查看指定流程实例的历史记录
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
MyJBPM.rar (48个子文件)
MyJBPM
.project 1KB
bin
simple
gpd.xml 1KB
processdefinition.xml 2KB
processimage.jpg 28KB
jbpm.cfg.xml 299B
log4j.properties 1KB
com
sample
action
MessageActionHandler.class 844B
MyDecisionHandler.class 619B
MyAssignmentHandler.class 917B
SimpleProcessTest.class 9KB
Utils.class 2KB
applicationContext.xml 1KB
hibernate.cfg.xml 9KB
.mymetadata 291B
WebRoot
WEB-INF
web.xml 375B
lib
classes
simple
gpd.xml 1KB
processdefinition.xml 2KB
processimage.jpg 28KB
jbpm.cfg.xml 2KB
log4j.properties 1KB
com
sample
ISimpleProcessTest.class 527B
MyTest.class 902B
action
MessageActionHandler.class 844B
MyDecisionHandler.class 619B
MyAssignmentHandler.class 917B
SimpleProcessTest.class 9KB
Utils.class 2KB
applicationContext.xml 2KB
hibernate.cfg.xml 9KB
META-INF
MANIFEST.MF 39B
spring-form.tld 51KB
.myeclipse
src
test
java
com
sample
ISimpleProcessTest.java 1KB
SimpleProcessTest.java 9KB
Utils.java 951B
MyTest.java 498B
main
jpdl
simple
gpd.xml 1KB
processdefinition.xml 2KB
processimage.jpg 28KB
java
com
sample
action
MessageActionHandler.java 677B
MyDecisionHandler.java 355B
MyAssignmentHandler.java 531B
applicationContext.xml 2KB
config
jbpm.cfg.xml 2KB
log4j.properties 1KB
hibernate.cfg.xml 9KB
spring.tld 13KB
.springBeans 330B
.classpath 2KB
共 48 条
- 1
资源评论
- kingalexander2012-11-20做的不错啊,流程还是很清楚的
liangZhang
- 粉丝: 0
- 资源: 19
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 聊天系统(java+applet).zip
- 毕业设计:基于SSM的mysql-高校学生请假管理系统(源码 + 数据库 + 说明文档)
- 博客系统(struts+hibernate+spring).rar
- c语言学生成绩管理系统源码.zip
- 毕业设计:基于SSM的mysql-网约车用户服务平台(源码 + 数据库 + 说明文档)
- 内容管理系统(hibernate3+struts2+spring2)130224.rar
- 基于Java的班级管理系统课程设计源码
- 内容管理系统(hibernate3+struts2+spring2).rar
- 路由器刷breed Web控制台助手v5.8版本.rar
- Java 在 JEP 12 提供的特性预览
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功