常见工作流框架
SELECT entity.* from ACT_RU_IDENTITYLINK entity
LEFT JOIN ACT_RU_TASK task on entity.TASK_ID_=task.ID_
where task.PROC_INST_ID_ = 'd23f0750-1f2c-11eb-963b-04d4c4aaba78'
Flowable条件表达式、排他网关、并行网关
1.条件表达式
使用流程变量,设置连线需要的流程变量名称及条件 i n f o = = ‘ 重 要 ’ , {info==‘重要’}, info==‘重要’,{}中的内容为boolean类型,用于判断是否执行该连线。启动流程实例时,传入对应的流程变量info的值,流程会按照设置的条件进行流转。
2.排他网关
1) 一个排他网关对应一个以上信息流;
2)由排他网关流出的顺序刘都有个conditionExpression元素(以.xml形式打开),在内部维护返回boolean类型的决策结果;
3)排他网关只会返回一条结果。当刘晨执行到排他网关时,流程引擎会自动检索网关出口,从上到下检索(xml)如果发现第一条决策结果为true或者没有设置条件(默认为成立),则流出;
4)如果没有任何一个出口符合条件,则抛出异常;
5)使用流程变量,设置连线的条件,并按照连线的条件执行工作流,如果没有条件符合的,以默认的连线离开。
3.并行网关
顾名思义,就是通过这个网关,可以把一个顺序流分成多个顺序流来执行,然后再通过这个网关,把分出来的多条顺序流合并为一个顺序流继续执行。
flowable集成
<dependency>
<groupId>org.flowable</groupId>
<artifactId>flowable-spring-boot-starter</artifactId>
<version>6.4.1</version>
</dependency>
#关闭定时任务JOB
flowable.async-executor-activate=false
#将databaseSchemaUpdate设置为true。当Flowable发现库与数据库表结构不一致时,会自动将数据库表结构升级至新版本。
flowable.database-schema-update=false
flowable常见API及其demo
1.流程图部署
@Test
public void testDeploy() {
Deployment deployment4 = repositoryService.createDeployment().name("borrowing_form.v1").addClasspathResource("bpmn/borrowing_form.v1.bpmn").deploy();
System.out.println("Deploy successfullly, deployId:" + deployment4.getId() + "; deployName:" + deployment4.getName());
}
2.根据流程定义的key查看流程定义列表
public void testGetAllProcessDefinition(){
ProcessDefinitionQuery query = repositoryService.createProcessDefinitionQuery();
query.processDefinitionKey("reimbursement_form");
query.orderByProcessDefinitionVersion().desc();
query.listPage(0, 10);
List<ProcessDefinition> list = query.list();
for (ProcessDefinition processDefinition : list) {
System.out.println(processDefinition.getId());
}
}
3.查询流程定义
public void findProcessDefinition(){
List<ProcessDefinition> list = repositoryService//与流程定义和部署对象相关的Service
.createProcessDefinitionQuery().latestVersion()//创建一个流程定义查询
/*指定查询条件,where条件*/
//.deploymentId(deploymentId)//使用部署对象ID查询
//.processDefinitionId(processDefinitionId)//使用流程定义ID查询
//.processDefinitionKey(processDefinitionKey)//使用流程定义的KEY查询
//.processDefinitionNameLike(processDefinitionNameLike)//使用流程定义的名称模糊查询
/*排序*/
//.orderByProcessDefinitionVersion().asc()//按照版本的升序排列
//.orderByProcessDefinitionName().desc()//按照流程定义的名称降序排列
.list();//返回一个集合列表,封装流程定义
//.singleResult();//返回唯一结果集
//.count();//返回结果集数量
//.listPage(firstResult, maxResults)//分页查询
if(list != null && list.size()>0){
for(ProcessDefinition processDefinition:list){
System.out.println("流程定义ID:"+processDefinition.getId());//流程定义的key+版本+随机生成数
System.out.println("流程定义名称:"+processDefinition.getName());//对应HelloWorld.bpmn文件中的name属性值<