准备工作:开启mysql数据库服务并已生成jbpm数据库。
1、建立工程并在工程中建立工作流程,流程图如下:
流程定义的代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<process name="leaveHoliday" xmlns="http://jbpm.org/4.3/jpdl">
<start g="120,0,92,52" name="start1">
<transition name="to 申请" to="申请"/>
</start>
<task g="96,96,92,52" name="申请">
<transition g="-53,-17" name="to 经理审批" to="经理审批"/>
</task>
<decision expr="#{content}" g="120,324,92,52" name="exclusive1">
<transition g="-47,-17" name="to end1" to="end1"/>
<transition g="349,348:-53,-17" name="to 老板审批" to="老板审批"/>
</decision>
<end g="120,504,48,48" name="end1"/>
<task g="300,384,92,52" name="老板审批">
<transition g="351,528:-47,-17" name="to end1" to="end1"/>
</task>
<task g="96,216,92,52" name="经理审批">
<transition g="-83,-17" name="to exclusive1" to="exclusive1"/>
<transition g="313,243;314,120:-53,-17" name="to 申请" to="申请"/>
</task>
</process>
2、编写测试代码,如下:
package com.tc.test;
import java.util.Iterator;
import java.util.List;
import org.jbpm.api.Configuration;
import org.jbpm.api.ExecutionService;
import org.jbpm.api.HistoryService;
import org.jbpm.api.ProcessEngine;
import org.jbpm.api.ProcessInstance;
import org.jbpm.api.RepositoryService;
import org.jbpm.api.TaskService;
import org.jbpm.api.history.HistoryProcessInstance;
import org.jbpm.api.task.Task;
public class JbpmTest {
/**
* @param args
*/
public static void main(String[] args) {
//depaly();
//createExecute();
showHistory();
showExecution();
showTask();
}
/**
* 部署工作流程
*/
public static void depaly(){
ProcessEngine pe=new Configuration().buildProcessEngine();
RepositoryService rs=pe.getRepositoryService();
rs.createDeployment().addResourceFromClasspath("leaveHoliday.jpdl.xml").deploy();
}
/**
* 创建工作流程实例
*/
public static void createExecute(){
//leaveHoliday.170001 =null null
//leaveHoliday-1
ProcessEngine pe=new Configuration().buildProcessEngine();
ExecutionService es=pe.getExecutionService();
ProcessInstance pi=es.startProcessInstanceByKey("leaveHoliday");
System.out.println("pi id:"+pi.getId()+" =key:"+pi.getKey()+" name:"+pi.getName()+" =ProcessDefinitionId:"+pi.getProcessDefinitionId());
}
/**
* 展示历史流程信息
*/
public static void showHistory(){
ProcessEngine pe=new Configuration().buildProcessEngine();
HistoryService hs=pe.getHistoryService();
//获取所有流程历史记录信息并输出
System.out.println("****************history********************");
List<HistoryProcessInstance> hiss=hs.createHistoryProcessInstanceQuery().list();
for (Iterator iterator = hiss.iterator(); iterator.hasNext();) {
HistoryProcessInstance historyProcessInstance = (HistoryProcessInstance) iterator
.next();
//null =leaveHoliday-1 leaveHoliday.160001active
System.out.println("key:"+historyProcessInstance.getKey()+" ProcessDefinitionId:"+historyProcessInstance.getProcessDefinitionId()
+" ProcessInstanceId:"+historyProcessInstance.getProcessInstanceId()+" state:"+historyProcessInstance.getState());
}
}
/**
* 展示当前引擎中待处理流程
*/
public static void showExecution(){
ProcessEngine pe=new Configuration().buildProcessEngine();
ExecutionService es=pe.getExecutionService();
//获取某个特定的流程实例
ProcessInstance res=es.createProcessInstanceQuery().processInstanceId("leaveHoliday.170001").uniqueResult();
System.out.println("----------------------待执行的流程实例信息----------------------------");
List<ProcessInstance> pl=es.createProcessInstanceQuery().list();
for (Iterator iterator = pl.iterator(); iterator.hasNext();) {
ProcessInstance processInstance = (ProcessInstance) iterator.next();
System.out.println("id:"+processInstance.getId()+" key : "+processInstance.getKey()+" name :"+processInstance.getName()
+" ProcessDefinitionId:"+processInstance.getProcessDefinitionId()+" state:"+processInstance.getState());
}
}
/**
* 展示所有待处理任务信息
*/
public static void showTask(){
System.out.println("----------------------------task---------------------------------");
ProcessEngine pe=new Configuration().buildProcessEngine();
TaskService ts=pe.getTaskService();
//查找指定流程实例的任务
Task t=ts.createTaskQuery().processInstanceId("leaveHoliday.170001").uniqueResult();
System.out.println(t.getId()+":"+t.getName()+":"+t.getActivityName()+":"+t.getDescription()+":"+t.getExecutionId());
List<Task> ls=ts.createTaskQuery().list();
for (Iterator iterator = ls.iterator(); iterator.hasNext();) {
Task task = (Task) iterator.next();
System.out.println("id:"+task.getId()+" name:"+task.getName()+" getActivityName:"
+task.getActivityName()+" getDescription:"+task.getDescription()+" executionId:"+task.getExecutionId());
}
}
}
相关推荐
文档包括程序的安装,以及简单程序的案例 jBPM 用户手册 第一章 概述 第二章 安装 第三章 流程 - 第四章 BPMN2.0 - 第五章 API - 第六章 人工任务 - 第七章 领域 - 规范流程 - 第八章 持久化 - 第九章 控制台 - ...
),action中将会调用到API里 executionContext.leaveNode(String transitionName),transitionName即这里的leaving transition名字。 C、创建新的执行路径: 很典型的就是fork node。流程在这里会分叉,产生新的...
此外,本篇还可以帮助读者快速上手jBPM4、使用jBPM4开发企业流程应用,包括安装和配置jBPM4、使用jBPM图形化流程设计器(GPD)设计流程、把流程部署到服务器上去、使用jBPM 4 Service API控制流程、掌握jBPM流程定义...
简单通俗的讲,使用了规则引擎就把业务需求实现那部分独立出来,并使用一种新的“编程”方式实现业务逻辑。而这种新的“编程”方式可以快速灵活响应变化,甚至让业务人员直接参与到业务需求的逻辑实现与验证,与传统...
里面有关于jbpm4.4相关的文档,api,操作手册已经一个简单的web工程实例, 刚接触的人很有帮助
bpm-identity-3.1.2.jar为JBPM的用户权限验证包,如使用系统自身 ... by zhxp791008 2008-02-25 回复 (9) FormPanel 问题 做了一个登陆的界面 我想加个验证码 效果如下: 这个验证码的图片是放在 一个textfield里面...
Shiro 是一个用 Java 语言实现的框架,通过一个简单易用的 API 提供身份验证和授权,更安全,更可靠 D ehcache 分布式缓存; 是一个纯Java的进程内缓存框架,具有快速、精干等特点,广泛使用的开源Java分布式缓存。 E ...
对Demo的使用介绍在官方文档的后面才开始介绍,这里建议应用跑起来之后,先自己试试手(可看后面介绍Demo如何使用的章节),看看如何跑一个流程、整个流程是怎么流的、并随时关注数据库表里的数据的变化等,对以后的...
是一个纯Java的进程内缓存框架,具有快速、精干等特点,广泛使用的开源Java分布式缓存。 E 微信接口开发(后续会加入Activiti5 工作流 )赠送一个jbpm工作流大型ERP系统(含OA、财务、分销)参考学习 F WebSocket 通信...
1.8 使用工厂Bean和Utility Schema定义集合 29 1.8.1 问题 29 1.8.2 解决方案 29 1.8.3 工作原理 29 1.9 用依赖检查属性 31 1.9.1 问题 31 1.9.2 解决方案 32 1.9.3 工作原理 32 1.10 用@Required...
1.8 使用工厂Bean和Utility Schema定义集合 29 1.8.1 问题 29 1.8.2 解决方案 29 1.8.3 工作原理 29 1.9 用依赖检查属性 31 1.9.1 问题 31 1.9.2 解决方案 32 1.9.3 工作原理 32 1.10 用@Required...
通过一个简单的业务流程,介绍了基本的Activiti概念和API。
这四张表很常见,基本的组织机构管理,关于用户认证方面建议还是自己开发一套,组件自带的功能太简单,使用中有很多需求难以满足 3.3.5:通用数据表 1)act_ge_bytearray 二进制数据表 2)act_ge_property 属性数据表...