在此非常感谢的人:linliangyi2007:http://linliangyi2007.iteye.com/blog/176345 主要是参考的是他的内容;
还有就是:http://www.blogjava.net/chengang/category/12967.html。以及网上其他的孜孜不倦贡献的人们。
这次模仿写的是:请假的流程:
<?xml version="1.0" encoding="UTF-8"?>
<process-definition xmlns="urn:jbpm.org:jpdl-3.1" name="testone">
<swimlane name="bossswimlane" >
<assignment class="com.firstflow.task.BossAssignmentHandler"></assignment>
</swimlane>
<start-state name="开始">
<transition name="申请开始" to="填写病假申请单">
</transition>
</start-state>
<task-node name="填写病假申请单">
<task name="填写申请内容">
<controller>
<variable name="days"></variable>
</controller>
<assignment class="com.firstflow.task.NewLeaveAssignmentHandler">
</assignment>
</task>
<transition to="天数判定" name="病假申请填写完成"></transition>
</task-node>
<decision name="天数判定">
<transition to="经理审批" name="天数小于5天">
<condition expression='#{days lt 5}'></condition>
</transition>
<transition to="总经理审批" name="天数大于或等于5天">
<condition expression='#{days ge 5}'></condition>
</transition>
</decision>
<task-node name="经理审批">
<task name="经理开始审批">
<controller>
<variable name="fork"></variable>
</controller>
<assignment actor-id="manager" ></assignment>
</task>
<transition to="总经理审批" name="经理审批通过"></transition>
<transition to="结束" name="经理审批未通过"></transition>
</task-node>
<task-node name="总经理审批">
<task name="总经理开始审批" swimlane="bossswimlane"></task>
<transition to="发通知" name="总经理审批通过"></transition>
<transition to="结束" name="总经理审批未通过"></transition>
</task-node>
<node name="发通知">
<action class="com.firstflow.action.NoteProcessActoinHandler"></action>
<transition to="结束"></transition>
</node>
<end-state name="结束"></end-state>
</process-definition>
现在再定义相应的类:
BossAssignmentHandler : 动态委派总经理审批的类
public class BossAssignmentHandler implements AssignmentHandler {
/**
*
*/
private static final long serialVersionUID = 8742291098601946988L;
@Override
public void assign(Assignable assignable, ExecutionContext executionContext)
throws Exception {
/*
* 动态委派
*/
ContextInstance ci = executionContext.getContextInstance();
String user = (String)ci.getVariable("boss");
//由于 参数“boss”这里没有添加。所以在这里就写死。。。
assignable.setActorId("boss");
}
}
NewLeaveAssignmentHandler 给发起申请的人的任务
public class NewLeaveAssignmentHandler implements AssignmentHandler {
/**
* 填写申请
*/
private static final long serialVersionUID = 8742291098601946988L;
@Override
public void assign(Assignable assignable, ExecutionContext executionContext)
throws Exception {
/*
* 将填写申请单的任务分配给流程发起人
*/
ContextInstance ci = executionContext.getContextInstance();
String user = (String)ci.getVariable("actor");
assignable.setActorId(user);
}
}
NoteProcessActoinHandler 审批通过 发通知的类
public class NoteProcessActoinHandler implements ActionHandler {
/**
*
*/
private static final long serialVersionUID = -7942030378343202920L;
@Override
public void execute(ExecutionContext executionContext) throws Exception {
ContextInstance ci = executionContext.getContextInstance();
String user = (String)ci.getVariable("actor");
Integer days = (Integer)ci.getVariable("days");
System.out.println(new Date() + " 员工 " + user + " 请假 " + days + " 天, 已批准!!!");
/*
* 这句别漏了,否则流程不会向下走哒
*/
executionContext.leaveNode();
}
}
当这些都定义好之后。就是要发布这个流程到数据库中了。
DesployTest1 类就是把流程发布到数据库中去,当然首先要一点就是你先要把jbpm的类映射到数据库中去。
public class DesployTest1 {
/**
* @param args
*/
public static void main(String[] args) {
JbpmConfiguration config = JbpmConfiguration.getInstance();
// 创建一个 jbpm 容器
JbpmContext jbpmContext = config.createJbpmContext();
// 由 processdefinition.xml 生成相对应的流程定义类 ProcessDefinition
InputStream is = null;
try {
is = new FileInputStream("src/main/jpdl/firstflow1/processdefinition.xml");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
ProcessDefinition processDefinition = ProcessDefinition.parseXmlInputStream(is);
// 利用容器的方法将流程定义数据部署到数据库上
jbpmContext.deployProcessDefinition(processDefinition);
// 关闭 jbpmContext
jbpmContext.close();
System.out.println("OK");
}
}
现在就是测试类了:
MyFlowProcessDBTest 就是测试的类
public class MyFlowProcessDBTest {
/*
* 初始化jBPM配置
* 包含对Hibernate的数据库初始化
*/
static JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance();
public static void main(String[] args){
MyFlowProcessDBTest test = new MyFlowProcessDBTest();
test.testApplication();
// test.test6000YuanApplication();
// test.test7000YuanApplication();
}
public void testApplication(){
ProcessInstance pi = createProcessInstance("lecord");
submitApplication("lecord" , 6);
approveByManager(true);
approveByBoss(true);
checkTasks(pi);
}
/**
* 生成流程实例
*/
protected ProcessInstance createProcessInstance(String user){
System.out.println("==请假流程开始==");
JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext();
try {
GraphSession graphSession = jbpmContext.getGraphSession();
/*
* 从数据库获取指定的流程定义
*/
ProcessDefinition pdf = graphSession.findLatestProcessDefinition("testone");
//生成流程实例
ProcessInstance pi = pdf.createProcessInstance();
//设置流程发起人
pi.getContextInstance().createVariable("actor", user);
//触发流程转向
pi.signal();
/*
* 保存流程实例
*/
jbpmContext.save(pi);
return pi;
}finally{
jbpmContext.close();
}
}
/**
* 填写提交申请单
* @param money
*/
@SuppressWarnings("unchecked")
protected void submitApplication(String actorId , int days){
System.out.println("==填写请假内容==");
JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext();
try {
/*
*根据操作者ID,获取属于该操作者的任务集
*/
List<TaskInstance> taskInstances = jbpmContext.getTaskList(actorId);
for(TaskInstance ti : taskInstances){
System.out.println(ti.getCreate());
System.out.println("ti.name = " + ti.getName());
System.out.println("ti.actor = " + ti.getActorId());
ContextInstance ci = ti.getContextInstance();
ci.setVariable("days",new Integer(days));
ti.end();
}
}finally{
jbpmContext.close();
}
}
/**
* 部门经理审批
* @param pass
*/
@SuppressWarnings("unchecked")
protected void approveByManager(boolean pass){
System.out.println("==经理审批==");
JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext();
try{
List<TaskInstance> taskInstances = jbpmContext.getTaskList("manager");
System.out.println(taskInstances.size()+"-------经理该审批的taskInstances---------");
for(TaskInstance ti : taskInstances){
System.out.println("ti.name = " + ti.getName());
System.out.println("ti.actor = " + ti.getActorId());
if(pass){
ti.end("经理审批通过");
}else{
ti.end("经理审批未通过");
}
}
}finally{
jbpmContext.close();
}
}
/**
* 总经理审批
* @param pass
*/
@SuppressWarnings("unchecked")
protected void approveByBoss(boolean pass){
System.out.println("==总经理审批==");
JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext();
try{
List<TaskInstance> taskInstances = jbpmContext.getTaskList("boss");
for(TaskInstance ti : taskInstances){
System.out.println("ti.name = " + ti.getName());
System.out.println("ti.actor = " + ti.getActorId());
if(pass){
ti.end("总经理审批通过");
}else{
ti.end("总经理审批未通过");
}
}
}finally{
jbpmContext.close();
}
}
}
这个只是模仿的做的。还有很多的不足。引用了别人的成功希望别介意哦。。
- 大小: 25.6 KB
分享到:
相关推荐
这个“jbpm的小例子”是一个实际应用的案例,展示了如何利用jbpm构建请假审批流程,涵盖了流程定义、任务交互和审批流程的完整生命周期。对于学习和理解jbpm的工作原理和使用方法,这样的例子具有很高的参考价值。
jbpm演示demo例子
【jbpm4.4请假例子】是一个基于jbpm4.4流程引擎的示例项目,它展示了一个在Eclipse环境中开发的请假流程。jbPM(Java Business Process Management)是一个开源的工作流和业务流程管理框架,它允许开发者设计、执行...
**jBPM4完整例子详解** jBPM4是一个企业级的工作流管理系统,它提供了强大的业务流程管理和工作流实现能力。这个"jBPM4完整例子"是一个基于SSH(Struts2、Spring、Hibernate)框架集成jBPM4.4的请假流程应用,非常...
这个"我自己写的jbpm小例子"旨在帮助用户快速理解jbpm的核心概念和基本操作,以轻松上手这个强大的工具。 首先,让我们深入理解jbpm的主要组件和功能: 1. **流程定义**:jbpm使用BPMN 2.0(Business Process ...
【JBPM_DEMO例子 Hello World】是入门级的教程,主要展示了如何使用JBPM(Java Business Process Management)工作流引擎实现一个简单的“Hello World”流程。这个例子旨在帮助初学者理解JBPM的基本概念和操作流程。...
本例子网上也有,只是有点问题,本人经过修改后想留给第一次学习jbpm的人,希望不让他们为一个问题而花费很长时间. 由于所有的jar包已上传,所以不在用QQ发jar包给各位下载的朋友, 请在以下页面下载本项目的jar包: ...
【JBPM例子】是关于Java Business Process Management System (JBPM) 的一系列示例代码,用于展示如何在实际项目中使用这个工作流引擎。JBPM是一个开源的企业级平台,主要用于管理和执行业务流程。它提供了全面的...
这是本人学习jbpm以来看过的写的最有条理的一个例子,基于现在网上jbpm的例子比较的少,所以上传上来和大家一起分享
【jbpm5完整的例子】是针对企业业务流程管理(Business Process Management, BPM)的一个实践教程,其中涵盖了jbpm5框架的多个核心功能和用法。jbPM是一个开源的工作流管理系统,它提供了强大的流程定义、执行和监控...
JBPM5 完全例子(完全配置)
**jbpm web实例子(完整版)** jbpm(Java Business Process Management)是一个开源的工作流管理系统,用于构建和管理业务流程。它提供了丰富的API、工作流建模工具以及执行引擎,使得开发者能够轻松地实现复杂的...
【jbpm4.4 完整例子】是一个基于servlet和jsp实现的业务流程管理(BPM)系统示例,它展示了jbpm4.4框架的核心功能和应用场景。jbpm是一个开源的工作流和业务流程管理系统,它允许开发者设计、执行、管理和监控业务...
【jbpm4入门例子——在Tomcat6.0下的实现】 jbPM4,全称Java Business Process Management,是一个开源的工作流管理系统,它提供了一整套工具和服务,用于管理业务流程。jbPM4的设计目标是让业务流程的建模、部署、...
**JBPM4.4入门详解** JBPM,全称Java Business Process Management...通过实践这个简单的jsp+servlet例子,你将能够初步掌握如何在实际应用中使用JBPM。在学习过程中,不断探索和实践,逐步提升你的业务流程管理能力。
**jbpm4测试例子(项目中含hsqldb数据库)** jbpm4 是一个开源的工作流管理系统,它提供了业务流程管理(BPM)和工作流服务。jbpm4的测试例子是一个很好的学习资源,帮助开发者了解如何在实际项目中集成和使用jbpm4。...
本入门例子旨在帮助初学者快速理解和应用jbpm。 在jbpm3.2.2中,工作流引擎是核心组件,它负责解析流程定义文件(通常为.bpmn或.jpdl.xml格式),并根据这些定义来执行和管理流程实例。jbpm的工作流引擎具有高度可...
【jbpm5 web整合例子】是一个关于如何将JBPM5工作流引擎与Web应用程序整合的实践项目,适合那些想要在Web环境中使用业务流程管理(BPM)功能的开发者。JBPM5是一个开源的工作流和业务规则管理系统,它提供了一整套...
下面将详细解释这些技术及其在"Seam JBPM Eclipse工程例子"中的应用。 1. **Seam**: Seam是一个全面的Java EE框架,它简化了开发过程,特别是在集成各种Java EE组件方面。Seam提供了模型-视图-控制器(MVC)架构...