一,安装插件
1,下载activiti-eclipse-plugin插件,解压到eclipse的dropins下
https://www.activiti.org/
2,在线安装
eclipse > help > install new software... > add..
name: activiti url: https://www.activiti.org/designer/update/
3,创建流程图
new—》other
二,activiti配置
activiti-context.xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
<!-- 配置流程引擎配置对象 -->
<bean id="processEngineConfiguration"
class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
<property name="jdbcDriver" value="com.mysql.jdbc.Driver" />
<property name="jdbcUrl" value="" />
<property name="jdbcUsername" value="" />
<property name="jdbcPassword" value="" />
<property name="databaseSchemaUpdate" value="true" />
</bean>
<!-- 配置一个流程引擎工厂bean,用于创建流程引擎对象 -->
<bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
<!-- 通过set方法注入流程引擎配置对象 -->
<property name="processEngineConfiguration" ref="processEngineConfiguration" />
</bean>
</beans>
2,获取流程引擎
@Test
public void testActiviti() {
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
}
3,部署
log4j.properties
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.err
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=c:\mylog.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
log4j.rootLogger=info, stdout
创建流程图
测试方法
@Test
public void testDeploy() {
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//获取部署构建器对象
DeploymentBuilder deployment = processEngine.getRepositoryService()
.createDeployment();
//加载流程定义文件
deployment.addClasspathResource("test.bpmn");
deployment.addClasspathResource("test.png");
//部署
Deployment deploy = deployment.deploy();
System.out.println(deploy.getId());
}
4,查询流程定义列表
@Test
public void testQuery() {
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
ProcessDefinitionQuery query = processEngine.getRepositoryService()
.createProcessDefinitionQuery();
//添加过滤条件
query.processDefinitionKey("ceshi");
//添加排序
query.orderByProcessDefinitionVersion().desc();
//分页
query.listPage(0, 5);
List<ProcessDefinition> list = query.list();
for (ProcessDefinition process : list) {
System.out.println(process.getId());
}
}
三,执行流程
@Test
public void testProcessInstance() {
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
String id = "ceshi:4:304";
//根据流程定义id启动一个流程实例
ProcessInstance processInstance = processEngine.getRuntimeService()
.startProcessInstanceById(id);
System.out.println(processInstance.getId());
}
2,查询任务列表
@Test
public void testQueryTask() {
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
TaskQuery query = processEngine.getTaskService().createTaskQuery();
String assignee = "李四";
query.taskAssignee(assignee);
List<Task> list = query.list();
for (Task task : list) {
System.out.println(task.getId()+"-->"+task.getName());
}
}
3,办理任务
@Test
public void testHandleTask() {
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
String taskId="702";
processEngine.getTaskService().complete(taskId);
}
四、流程操作
1,部署zip
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
@Test
public void testDeploy() {
DeploymentBuilder deployment = processEngine.getRepositoryService().createDeployment();
ZipInputStream zip = new ZipInputStream(this.getClass()
.getClassLoader().getResourceAsStream("test.zip"));
deployment.addZipInputStream(zip);
Deployment deploy = deployment.deploy();
System.out.println(deploy.getId());
}
2,查询部署列表
@Test
public void testQueryDeploy() {
DeploymentQuery query = processEngine.getRepositoryService().createDeploymentQuery();
List<Deployment> list = query.list();
for (Deployment deployment : list) {
System.out.println(deployment.getId());
}
}
3,删除部署信息
@Test
public void testDeleteDeploy() {
String id="1";
processEngine.getRepositoryService().deleteDeployment(id, true);
}
4,获取流程定义文件名和输入流
@Test
public void test() {
String deployId = "1001";
List<String> names = processEngine.getRepositoryService()
.getDeploymentResourceNames(deployId);
for (String name : names) {
System.out.println(name);
InputStream inputStream = processEngine.getRepositoryService()
.getResourceAsStream(deployId, name);
}
}
5,根据流程定义id获取图片
@Test
public void test() throws Exception {
String processDefinitionId="ceshi:5:1004";
InputStream pngInputStream = processEngine.getRepositoryService()
.getProcessDiagram(processDefinitionId);
FileUtils.copyInputStreamToFile(pngInputStream, new File("d:\\my.png"));
}
6,根据流程定义key启动实例
@Test
public void test() throws Exception {
String key = "ceshi";
ProcessInstance processInstance = processEngine.getRuntimeService()
.startProcessInstanceByKey(key);
System.out.println(processInstance.getId());
}
7,查询实例列表
@Test
public void test() throws Exception {
ProcessInstanceQuery query = processEngine.getRuntimeService()
.createProcessInstanceQuery();
List<ProcessInstance> list = query.list();
for (ProcessInstance processInstance : list) {
System.out.println(processInstance.getId()+" "+processInstance.getActivityId());
}
}
8,结束流程实例
@Test
public void test() throws Exception {
String id="1101";
processEngine.getRuntimeService().deleteProcessInstance(id, "test");
}
9,直接将流程向下执行一步
@Test
public void test() throws Exception {
String excutionId = "1201";
processEngine.getRuntimeService().signal(excutionId);
}
10,查询最新版本的流程定义列表
@Test
public void testQueryNewestDef() {
ProcessDefinitionQuery query = processEngine.getRepositoryService()
.createProcessDefinitionQuery();
query.orderByProcessDefinitionVersion().asc();
List<ProcessDefinition> list = query.list();
Map<String, ProcessDefinition> map = new HashMap<String, ProcessDefinition>();
for (ProcessDefinition pd : list) {
map.put(pd.getKey(), pd);
}
List<ProcessDefinition> newList = new ArrayList<>(map.values());
for (ProcessDefinition processDefinition : newList) {
System.out.println(processDefinition.getName()+" "+processDefinition.getVersion());
}
}
11,activiti提供的 对象
RepositoryService:操作流程定义,bpmn,png等静态资源
RuntimeService:操作流程实例(启动、查询、结束流程实例)
TaskService:操作任务(查询任务、办理任务)
HistoryService:操作历史数据
Deployment:act_re_deployment
ProcessDefinition:act_re_procdef
ProcessInstance:act_ru_execution
Task:act_ru_task
12,网页版流程设计
在tomcat下启动:activiti-explorer.war(文件夹名不能中文)
用户名/密码:kermit/kermit