IDEA创建Activiti工作流开发
一、 安装Activiti插件
1. 首先打开FIle的setting功能,搜索Plugins:
2. 输入actiBPM,然后点击搜索:
3. 点击安装、应用:
安装好之后点击apply(应用),之后重启idea
二、 创建Activiti工作流并导出流程图图片
1. 重启IDEA之后,点击File文件中的New下的BpmnFile:
2. 给这个文件起好名字后拖动右边的图标到左边:
3. 把鼠标放到节点中心,中心会变成黑白扇形:
4. 拖拽连线到另一个图标进行画图:
5. 左键单击节点就会出现左边的修改按钮:
Id命名规范: 要以字母或下划线 () 字符开头,后接 XML 规范中允许的任意字母、数字、重音字符、变音符号、句点 (.)、连字符 (-) 和下划线 () 的组合。
否则》》》(报org.activiti.bpmn.exceptions.XMLException: cvc-datatype-valid.1.2.1: '' 不是 'NCName' 异常)
6. 接着修改文件的后缀名为.xml:
打开该文件可以看到,流程图以xml代码格式呈现(当然也可以在重命名改回去)
7. 接着右键该文件:
如果没有出现图中的按钮,可以按快捷键Ctrl+alt+Shift+U,按了以后,以后这个图标就会出现了
8. 导出图片
可以点击该按钮保存这图片,后缀名自己设置下.png
三、 解决图片乱码bug
如果图片中有中文会出现乱码,需要在这两个文件下的后面都加上
-Dfile.encoding=UTF-8
然后重启IDEA,把原来的PNG图片删掉,再生成一次就不会出现乱码了
四、 测试(test)工作流开发
1. 引入pom.xml依赖
2. 在src/main/resources下面新建一个BPMN文件
(同上文操作的创建工作流)
3. 画完流程图之后要更改对应元素的name和assignee,Id
然后点击空白地方,把流程ID和名称改掉,如下图:
4. 之后把数据库建好,建一个activiti.cfg.xml在resource下面
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">
5. 新建一个java类,用来生成表
@Test
public void crateTable(){
ProcessEngine processEngine = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml").buildProcessEngine();
}
运行这个类之后数据库里面会生成24张表, 23-25张表都是有可能的,我这里是生成了24张表,多了一张act_evt_log,事件处理日志表。最主要的还是那23张表
6. 之后就可以开始部署流程
代码:
ProcessEngine processEngine= ProcessEngines.getDefaultProcessEngine();
//部署流程
@Test
public void deployProcess(){
RepositoryService repositoryService=processEngine.getRepositoryService();
DeploymentBuilder builder=repositoryService.createDeployment();
builder.addClasspathResource("myWork.bpmn");
builder.deploy();
}
部署之后就可以在act_re_procdef表中看到对相应的流程信息
7. 启动流程
代码:
ProcessEngine processEngine= ProcessEngines.getDefaultProcessEngine();
@Test
public void startProcess(){
RuntimeService runtimeService=processEngine.getRuntimeService();
runtimeService.startProcessInstanceByKey("myProcess_1");
}
启动流程之后就会有相应的任务产生,存在act_ru_task表中,可以查看任务节点
代码:
ProcessEngine processEngine= ProcessEngines.getDefaultProcessEngine();
@Test
public void queryProcess(){
TaskService taskService=processEngine.getTaskService();
String assigne="student";
List
int size=tasks.size();
for(int i=0;i Task task=tasks.get(i); } for (Task task:tasks){ System.out.println("taskId=" +"流程任务节点信息ID:"+ task.getId() + ",taskName:" +"流程任务节点名称ID:" +task.getName() + ",assignee:" + "流程任务节点接受人:"+task.getAssignee() + ",createTime:" +"流程任务节点创建时间:"+ task.getCreateTime()); } } 首次运行的时候这个没有输出,因为第一次运行的时候扫描act_ru_task的表里面是空的,但第一次运行完成之后里面会添加一条记录,之后每次运行里面都会添加一条记录 8. 查询流程明细定义明细 代码: ProcessEngine processEngine= ProcessEngines.getDefaultProcessEngine(); @Test public void queryProcdef(){ RepositoryService repositoryService=processEngine.getRepositoryService(); ProcessDefinitionQuery query=repositoryService.createProcessDefinitionQuery(); query.processDefinitionKey("myProcess_1"); List System.out.println(">>>>>>>>>>>>>>>>>>>>>"); for (ProcessDefinition pd:pds){ System.out.println("ID:"+pd.getId()+",NAME:"+pd.getName()+ ",KEY:"+pd.getKey()+",VERSION:"+pd.getVersion()+ ",RESOURCE_NAME:"+pd.getResourceName()+ ",DGRM_RESOURCE_NAME:"+pd.getDiagramResourceName()); } } 9. 审核过程完成任务节点审批 代码: ProcessEngine processEngine= ProcessEngines.getDefaultProcessEngine(); @Test public void startProcessApproval(){ TaskService taskService=processEngine.getTaskService(); //taskId 就是查询任务中的 ID String taskId="2504"; //完成请假申请任务 taskService.complete(taskId); } 10. 流程详细步骤: 部署流程》》》》》》启动流程》》》》》》查询用户id》》》》用户完成任务》》》流程结束 五、 生成流程报表 流程部署表 SELECT * FROM `act_re_deployment` 流程定义表 SELECT * FROM `act_re_procdef` 资源文件表 SELECT * FROM `act_ge_bytearray` 系统配置表 SELECT * FROM `act_ge_property` 启动流程实例涉及到的表 流程实例运行时 执行对象表 SELECT * FROM `act_ru_execution` 流程实例运行时 身份联系表 SELECT * FROM `act_ru_identitylink` 流程实例运行时 用户任务表 SELECT * FROM `act_ru_task` 活动节点历史表 SELECT * FROM `act_hi_actinst` 身份联系表 历史 SELECT * FROM `act_hi_identitylink` 流程实例表 历史 SELECT * FROM `act_hi_procinst` 历史任务表 SELECT * FROM `act_hi_taskinst`