1.processdefinition.xml
<?xml version="1.0" encoding="UTF-8"?>
<process-definition xmlns="urn:jbpm.org:jpdl-3.2" name="qingjia">
<task>
<controller>
<variable name="flag"></variable>
</controller>
</task>
<start-state name="申请">
<task name="getInformation">
<controller>
<variable name="name"></variable>
<variable name="beginTime"></variable>
<variable name="duringTime"></variable>
</controller>
</task>
<transition name="to_pingshen" to="评审">
<action name="getReason"
class="com.qingjia.action.GetReasonAction">
<reason>get ill</reason>
</action>
</transition>
</start-state>
<task-node name="评审">
<task name="getResult">
<controller>
<variable name="result"></variable>
</controller>
</task>
<transition to="end" name="to_end">
<action name="printlnReasult"
class="com.qingjia.action.PrintlnReasultAction">
</action>
</transition>
</task-node>
<end-state name="end"></end-state>
</process-definition>
2.processdefinition.jpg
3.GetReasonAction.java
package com.qingjia.action;
import org.jbpm.graph.def.ActionHandler;
import org.jbpm.graph.exe.ExecutionContext;
public class GetReasonAction implements ActionHandler {
private static final long serialVersionUID = 1L;
private String reason;
public String getReason() {
return reason;
}
public void setReason(String reason) {
this.reason = reason;
}
public void execute(ExecutionContext executionContext) throws Exception {
executionContext.getContextInstance().setVariable("resaon", reason);
// 将前台输入的"name"属性值传进来
String name = (String) executionContext.getContextInstance()
.getVariable("name");
// 设置全局变量
executionContext.getContextInstance().setVariable("flag", "shengqing");
System.out.println(name);
System.out.println(reason);
System.out.println((String) executionContext.getContextInstance()
.getVariable("flag"));
}
}
PrintlnReasultAction.java
package com.qingjia.action;
import org.jbpm.graph.def.ActionHandler;
import org.jbpm.graph.exe.ExecutionContext;
public class PrintlnReasultAction implements ActionHandler {
private static final long serialVersionUID = 1L;
public void execute(ExecutionContext executionContext) throws Exception {
Object result = executionContext.getContextInstance().getVariable(
"result");
if (result.equals("Yes")) {
System.out.println("This holiday is agreed!");
} else {
System.out.println("This holiday is disagreed!");
}
executionContext.getContextInstance().setVariable("flag", "pingshen");
System.out.println((String) executionContext.getContextInstance()
.getVariable("flag"));
}
}
QianTai.java
package com.qingjia.action;
import org.jbpm.JbpmConfiguration;
import org.jbpm.JbpmContext;
import org.jbpm.context.exe.ContextInstance;
import org.jbpm.graph.def.ProcessDefinition;
import org.jbpm.graph.exe.ProcessInstance;
import org.jbpm.graph.exe.Token;
public class QianTai {
private JbpmConfiguration config;
private JbpmContext context;
private ProcessDefinition processDefinition;
/**
* 初始化ProcessDefinition
*/
public QianTai() {
config = JbpmConfiguration.getInstance();
context = config.createJbpmContext();
processDefinition = context.getGraphSession()
.findLatestProcessDefinition("qingjia");
}
/**
* 创建流程,进行请假申请
*
* @return 流程ID
*/
long shenqing() {
ProcessInstance processInstance = processDefinition
.createProcessInstance();
ContextInstance contextInstance = processInstance.getContextInstance();
// 填写请假单,与jbpm引擎交互
contextInstance.setVariable("name", "xiaoming");
contextInstance.setVariable("beginTime", "080426");
contextInstance.setVariable("duringTime", "5");
long ID = processInstance.getId();
return ID;
}
/**
* 得到流程的令牌"token"
*/
Token executeProcess(long ID) {
ProcessInstance processInstance = context.loadProcessInstance(ID);
Token token = processInstance.getRootToken();
return token;
}
/**
* 填写审批意见
*/
void pingshen(long ID) {
ProcessInstance processInstance = context.loadProcessInstance(ID);
ContextInstance contextInstance = processInstance.getContextInstance();
// 输入评审意见
contextInstance.setVariable("result", "NO");
}
/**
* 流程执行总过程
*/
public static void main(String[] args){
//前台实例调用各个方法
QianTai qianTai = new QianTai();
long id=qianTai.shenqing();
Token token=qianTai.executeProcess(id);
//执行"to_pingshen" 中的action
token.signal("to_pingshen");
System.out.println((String)token.getProcessInstance().getContextInstance().getVariable("flag"));
//进行请假评审
qianTai.pingshen(id);
//执行"to_end" 中的action
token.signal("to_end");
System.out.println((String)token.getProcessInstance().getContextInstance().getVariable("flag"));
System.out.println("Process"+id+" id end!");
}
}
说明:(1)使流程一步一步执行,利用的是Single(),而调用这个方法有2种方式:
ProcessInstance.single();
由ProcessInstance先得到Token(即流程执行的“令牌”),再调用该Token.Single();
(2)得到节点的方式有(但是无法得到该节点的Variable):
Token.getNode():得到当前节点;
ProcessDefinition.getNode(“”):利用节点名得到任意节点;
(3) Variable的设计原则及Variable的获得方法:
要在节点间传递的Variable设计为全局的==》在<ProceseeDefinition>中加入<task><controller><variable>;
要在节点内与Transition间传递的Variable要放在节点中==》在相应节点中加入<task><controller><variable>;
==》获得总流程中的Variable:ProcessInstance.getContextInstance()
Token. getContextInstance()
得到Variable就要通过ContextInstance.get/setVariable()
==》获得Action中的Variable:ExecutionContext.getContextInstance()
在Action中也可以定义Variable,<名字是任意的>;
(4)在“ProjectName/src/main”下建类其实质是在“ProjectName/src/main/java”下建,
- 大小: 16.7 KB
分享到:
相关推荐
**jbpm入门实践** jbpm 是一款开源的工作流管理系统,主要用于设计、执行和管理业务流程。本文主要针对jbpm 5.2版本进行入门实践,适合初级用户学习。首先,我们要进行必要的安装与配置。 **一、jbpm的准备工作** ...
【jbpm4.4 工程项目实例】是一个...通过深入学习和实践这个“jbpm4.4 工程项目实例”,开发者不仅可以掌握jbpm的基本用法,还能了解到如何将工作流管理技术融入到实际的Web应用中,提升企业级应用的流程自动化能力。
【jbpm项目实练】是针对企业流程管理(Business Process Management, BPM)工具jbpm的一次实际操作练习,尤其适合初学者入门。jbpm是一个开源的BPM平台,它提供了全面的工作流和业务流程管理功能,包括流程设计、...
自己的apache maven 仓库放了3个jar 文件. 博文链接:https://chenjin.iteye.com/blog/153407
【jbpmOA项目代码经典】是一个关于jbpm流程引擎与OA(Office Automation)系统整合的实践案例,结合了zTree框架的应用。jbpm是Java Business Process Management的缩写,是一款开源的工作流管理系统,用于实现业务流程...
**jbpm4.4项目测试源码解析** jbpm4.4是一款基于Java的企业级工作流管理系统,由JBoss公司开发。它提供了强大的业务流程管理(BPM)和工作流服务,帮助企业构建灵活且可扩展的流程应用。本源码下载主要针对jbpm4.4...
这个简单的JBPM4项目源码提供了一个完整的web工程,旨在帮助开发者理解并实践如何在实际开发中应用JBPM4。 **一、JBPM4核心概念** 1. **流程定义(Process Definition)**: 在JBPM4中,业务流程以BPMN2(Business ...
SSH (Struts2 + Spring + Hibernate) 是一个广泛使用的Java Web开发框架,它结合了Struts的MVC...对于开发者来说,具备良好的面向对象设计能力和实践经验,以及一定的业务分析能力,能够更好地理解和实施这样的项目。
【jbpm4.4项目】是一个基于JBPM4.4版本的工作流管理系统示例,它为初学者提供了深入了解和实践企业级工作流管理系统的入口。JBPM(Java Business Process Management)是一个开源的工作流和业务流程管理系统,它允许...
"JBPM最佳实践.txt"则可能包含了一系列在实际项目中运用jbpm时的最佳实践建议,如性能优化、流程设计原则、错误处理策略等,旨在帮助开发者避免常见问题,提升项目的质量和效率。 通过这些文档,学习者可以全面了解...
jbpm应用开发指面(胡奇).pdf可能是胡奇专家对jbpm应用开发的实践经验分享,可能包含了最佳实践、常见问题解决方案和案例研究。开发者可以从中学到如何在实际项目中有效地运用jbpm,以及如何解决开发过程中遇到的...
这个JBPM5.4与SSH的完整项目案例,旨在帮助开发者理解如何在实际项目中结合使用这些技术,实现高效、可维护的业务流程管理。通过学习和实践这个案例,你可以提升自己在企业级应用开发方面的能力。
总之,【jbpm4web请假例子】是一个实用的学习资源,它让开发者能够在实践中掌握JBPM4工作流管理系统和Eclipse开发环境的结合使用,从而提升在企业级应用开发中的流程自动化能力。通过深入研究和实践,可以进一步理解...
jbpm4.4 shh2 项目示例是基于jbpm4.4版本与SSH2(Struts2、Spring和Hibernate)集成的一个实战项目。...该项目提供了一个学习和实践业务流程自动化管理的平台,有助于开发者深入理解jbpm和SSH2的集成应用。
在描述中提到的博客链接指向了iteye上的一篇关于jbpm的博文,虽然具体内容无法直接展示,但可以推测博主可能分享了如何将jbpm与Struts2框架整合的实践经验和技巧。Struts2是一个流行的Java Web应用程序框架,它提供...