Activiti工作流Demo学习总结
我用的是eclipse去实现。
1.首先eclipse要安装activiti的插件,最简单的方法:菜单栏help->install new software->Add
填入以下字段
Name: Activiti BPMN 2.0 designer
Location: http://activiti.org/designer/update/
如图所示进行勾选,完成下载。
之后在工程名右键new->other,当出现以下activiti内容说明下载成功了。
2.然后需要引入activiti的jar包,由于官网不好使,需要网上找一下,这里的链接有
https://github.com/changwensir/Activiti
jar包在lib下,默默感谢分享的Ta。
3.然后就是写具体的代码了
HelloWorld类:
public class HelloWorld {
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
/**部署流程定义*/
@Test
public void deploymentProcessDefinition(){
Deployment deployment = processEngine.getRepositoryService()//与流程定义和部署对象相关的Service
.createDeployment() //创建一个部署对象
.name("helloworld")//添加部署的名称
.addClasspathResource("diagrams/helloworld.bpmn")//从classpath的资源中加载,一次只能加载一个文件
.addClasspathResource("diagrams/helloworld.png")//从classpath的资源中加载,一次只能加载一个文件
.deploy(); //完成部署
System.out.println("部署ID:"+deployment.getId()); //1
System.out.println("部署名称"+deployment.getName()); //helloworld
}
/**启动流程实例**/
@Test
public void startProcessInstance(){
//流程定义的key
String processDefinitionKey ="helloworld";
ProcessInstance pi = processEngine.getRuntimeService()//与正在执行 的流程实例和执行对象相关的Service
.startProcessInstanceByKey(processDefinitionKey); //使用流程定义的key启动流程实例,key对应helloworld.bpmn文件中id的属性值,使用key值启动,默认是按照最新版本的流程定义启动
System.out.println("流程实例ID:"+pi.getId());
System.out.println("流程定义ID:"+pi.getProcessDefinitionId());
}
/**查询当前人的个人任务*/
@Test
public void findMyPersonalTask(){
String assignee = "张三";
List<Task> list = processEngine.getTaskService()//与正在执行的任务管理相关的Service
.createTaskQuery()//创建任务查询
.taskAssignee(assignee)//指定个人任查询,指定办理人
.list();
if(list!=null && list.size()>0){
for(Task task:list){
System.out.println("任务ID:"+task.getId());
System.out.println("任务名称:"+task.getName());
System.out.println("任务的创建时间:"+task.getCreateTime());
System.out.println("任务的办理人:"+task.getAssignee());
System.out.println("流程实例ID:"+task.getProcessInstanceId());
System.out.println("执行对象ID:"+task.getExecutionId());
System.out.println("流程定义ID:"+task.getProcessDefinitionId());
System.out.println("############################################");
}
}
}
/**完成我的任务*/
@Test
public void completeMyPersonalTask(){
//任务ID ,与act_ru_task表的id对应
String taskId = "908";
processEngine.getTaskService().complete(taskId);//与正在执行的任务管理相关的Service
System.out.println("完成任务:任务ID:"+taskId);
}
}
TestActiviti类:
俩种方法,用于创建activiti需要的表,这里用的是mysql
public class TestActiviti {/** 使用代码创建工作流 需要的23张表 */
@Test
public void createTable() {
ProcessEngineConfiguration processEngineConfiguration = ProcessEngineConfiguration
.createStandaloneProcessEngineConfiguration();
processEngineConfiguration.setJdbcDriver("com.mysql.jdbc.Driver");
processEngineConfiguration
.setJdbcUrl("jdbc:mysql://localhost:3306/hzkactiviti?useUnicode=true&characterEncoding=utf8");
processEngineConfiguration.setJdbcUsername("root");
processEngineConfiguration.setJdbcPassword("root");
/*
* public static final String DB_SCHEMA_UPDATE_FALSE = "false";
* 不能自动创建表,需要表存在 public static final String DB_SCHEMA_UPDATE_CREATE_DROP
* = "create-drop";先删除表再创建表 public static final String
* DB_SCHEMA_UPDATE_TRUE = "true";如果表不存在,自动创建表
*/
processEngineConfiguration
.setDatabaseSchemaUpdate(processEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
// 工作流的核心对象,ProcessEngine对象
ProcessEngine processEngine = processEngineConfiguration
.buildProcessEngine();
System.out.println("processEngine:" + processEngine);
}
/** 使用配置文件创建工作流需要的23张表 */
@Test
public void creteTable_2() {
// ProcessEngineConfiguration processEngineConfiguration =
// ProcessEngineConfiguration
// .createProcessEngineConfigurationFromResource("activiti.cfg.xml");
// 工作流的核心对象,ProcessEngine对象
ProcessEngine processEngine = ProcessEngineConfiguration
.createProcessEngineConfigurationFromResource(
"activiti.cfg.xml").buildProcessEngine();
System.out.println("processEngine:" + processEngine);
}
}
activiti.cfg.xml配置文件:
这个是必须的,注意一点是很多网上的资料里jdbcurl是用&而不是& 这样会报错。
<?xml version="1.0" encoding="UTF-8"?>
<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="jdbc:mysql://localhost:3306/hzkactiviti?useUnicode=true&characterEncoding=utf8" />
<property name="jdbcUsername" value="root" />
<property name="jdbcPassword" value="root" />
<property name="databaseSchemaUpdate" value="true" />
</bean>
</beans>
4.画bpmn图,网上最最经典的关系图有木有!然后画好后每次保存都会自动生成png文件
在对应目录下New->Other->Activiti Diagram
然后画工作流图
设置属性
我画的时候系统没有默认显示properti窗口害我一顿找啊 :window->show view->general->properties
5.最后不想让小伙伴不我的后尘上一个文件目录,因为很多人不知道怎么放文件,尤其是resource资源文件,不要弄成普通文件啊。不要弄成普通文件啊。不要弄成普通文件啊。(log4j不影响功能)
6.弄好以上的内容之后,很多人还是不懂Activiti工作流到底是怎么工作的,画好的流图在哪儿用到了,当然笔者也是这么想的,你需要按流程去执行程序
helloworld类中顶一个4个步骤
A:/**部署流程定义*/
B:/**启动流程实例**/
C:/**查询当前人的个人任务*/
D:/**完成我的任务*/
分别单独执行A模块(act_re_deployment,act_re_procdef,act_ge_bytearray,act_ge_property这几个表会有数据生产),B模块(act_ru_execution,act_ru_task,act_ru_identitylink,act_hi_taskinst,act_hi_procinst,act_hi_identitylink,act_hi_actinst,act_ge_property表会用数据产生或变化),D模块(act_ru_task,act_ru_identitylink,act_hi_actinst表会有数据变化) 后相当于流程的“提交申请”完成了,(C模块是查询不涉及表的数据插入)
然后修改D模块的ID值为act_ru_task表中的新ID(原数据会清除,只保留当前流程的数据),再执行D模块,这相当与执行流程的“审核【部门经理】”
最后同理再修改ID值执行D模块,这相当于执行流程的“审核【总经理】”,自此流程执行结束,act_ru_task会清空。
由于项目原因activiti要在idea使用,这里把idea搭建进行补充:
1.idea下载activiti插件
file->settings->plugins 页面上找到Browse repositories,然后搜索ActiBPM,然后下载(以上网上的教程),然而我下载的时候报错了!
报了以下的错误:Plugin actiBPM was not installed: Cannot download 'https://plugins.jetbrains.com/pluginManager/?action=download&id=actiB。。。(截图忘了截)
然后我把https://plugins.jetbrains.com/pluginManager/?action=download&id=actiB。。。俩个单引号之间的url复制出来到浏览器地址栏去手动下载,然后会下一个actibpm.jar的文件,然后file->settings->plugins 找到install plugin from disk。。点击,然后把刚才下载的jar包选中然后apply就可以啦(完全原创解决啊有木有!)
2.发现idea插件有个不好的地方就是画好的bpmn文件不能像eclipse一样自动生成png文件,网上找了一个方法这里再说一遍:
拷贝元bpmn文件修改后缀名为xml,然后右键点击xml->diagrams->show bpmn 2.0 designer,点击显示界面的export to file
选择png格式导出,然后再放到需要的目录下就行了(我觉得很麻烦)