分类 工作流activiti 下的文章

本文中使用maven+eclipse搭建activiti-5.14的开发环境

一、创建maven工程
创建一个普通的java工程,pom文件的内容如下

<project xmlns="http://maven.apache.org/POM/4.0.0"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.lyy</groupId>
<artifactId>activtiviti-study-01</artifactId>
<version>0.0.1-SNAPSHOT</version>

<dependencies>
    <dependency>
        <groupId>org.activiti</groupId>
        <artifactId>activiti-engine</artifactId>
        <version>5.14</version>
    </dependency>

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.26</version>
    </dependency>

    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>

    <dependency>
        <groupId>c3p0</groupId>
        <artifactId>c3p0</artifactId>
        <version>0.9.1.2</version>
        <type>jar</type>
        <scope>compile</scope>
    </dependency>
</dependencies>

</project>
二、添加activiti的配置文件
在工程的resources目录下创建activiti的配置文件,名称为activiti.cfg.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名称的流程引擎配置对象 -->
<bean id="processEngineConfiguration"
    class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
    <property name="jdbcDriver" value="com.mysql.jdbc.Driver"></property>
    <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/activiti_01"></property>
    <property name="jdbcUsername" value="root"></property>
    <property name="jdbcPassword" value="root"></property>
    <property name="databaseSchemaUpdate" value="true"></property>
</bean>

</beans>
三、测试
新建一个测试类,添加如下代码,

public class Test1 {


/**
 * 测试环境是否可用
 */
@Test
public void test1() {
ProcessEngineConfiguration configuration = ProcessEngineConfiguration.createProcessEngineConfigurationFromResourceDefault();
System.out.println(configuration);
}

}
运行测试方法test1,如果正常执行,并输出ProcessEngineConfiguration对象的地址,则表示开发环境搭建成功。

四、总结
用maven搭建activiti的开发环境,需要先引入activiti的依赖

<dependency>

<groupId>org.activiti</groupId>
<artifactId>activiti-engine</artifactId>
<version>5.14</version>

</dependency>
因为要操作数据库,所以需要引入msql的驱动和数据库连接池

<dependency>

<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.26</version>

</dependency>
<dependency>

<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
<type>jar</type>
<scope>compile</scope>

</dependency>
标签: activiti
https://www.cnblogs.com/chengxuxiaoyuan/p/11992601.html

大部分的业务流程都会有人的参与,用户任务是最常用的任务,在流程图中使用userTask元素定义用户任务。

当流程到达用户任务时该任务会被分配到特定用户或者用户组,这就是给用户任务分配权限。这个分配权限指的是分配后可以通过activiti提供的任务查询api根据用户或者用户组来查询到这个任务。

一、使用JUEL表达式分配权限

juel表达式指定候选人.png

一个任务可以设置多个候选人,候选人在业务上指的是有权对该任务进行操作的群体。在流程图上使用juel表达式分配候选人的方法如下
<userTask id="sid-31845D76-A308-4442-AE19-4AA4238DB39A" name="juel表达式分配候选人" activiti:candidateUsers="${candidateUsers}"></userTask>

这里的candidateUsers是一个流程变量,以list的形式存放了候选人列表。

//使用juel表达式指定候选人

    List<String> candidateUsers=new ArrayList<>();
    candidateUsers.add("zhangsan");
    candidateUsers.add("lisi");
    Map<String,Object> variableMap=new HashMap<>();
    variableMap.put("candidateUsers",candidateUsers);
    ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("juel-candidateUser2",variableMap);
    System.out.println(processInstance);

权限分配成功后就可以使用activiti提供的任务查询api来根据候选人查询任务

List<Task> list = taskService.createTaskQuery().taskCandidateUser("lisi").list();

    for (Task task : list) {
        System.out.println(task.getName());
    }

1.2 给用户任务分配候选组

liucheng.png

候选组的概念和候选人类似,用来把一个群体的人指定为一个任务的权限人,对应的是activiti中的用户组,分配一个用户组id到某个任务上,可以指定整个组的人为该任务的候选人,在流程图上指定候选组的方式和指定候选人类似

1.3 给用户任务分配代理人
候选组的概念和候选人类似,用来把一个群体的人指定为一个任务的权限人,对应的是activiti中的用户组,分配一个用户组id到某个任务上,可以指定整个组的人为该任务的候选人,在流程图上指定候选组的方式和指定候选人类似
<userTask id="juel-candidateGroup" name="juel表达式指定候选组" activiti:candidateGroups="${candidateGroup}"></userTask>
这里的candidateGroup也是一个流程变量,其中存放了用户组id的lsit集合

Map<String,Object> map=new HashMap<>();

    List<String> groupList=new ArrayList<>();
    groupList.add("项目经理");
    groupList.add("测试");
    map.put("candidateGroup",groupList);
    runtimeService.startProcessInstanceByKey("juel-candidateGroup2",map);

注意这个用户组在activiti的群组表中可以不存在。

可以使用任务查询api查询群组对应的任务
List<Task> list = taskService.createTaskQuery().taskAssignee("jerry").list();

    for (Task task : list) {
        System.out.println(task.getName());
    }

与候选人和候选组不同的是,代理人会被设置到任务表act_ru_task的ASSIGNEE_字段中

上面的juel表达式中放置的都是一个流程变量,流程变量中存的是集合或者字符串,实际上也可以在流程变量中存一个JavaBean对象,然后在juel表达式中调用这个对象的方法和或者属性,调用属性时需要提供属性的get方法,并且属性要是public的,调用方式如下

${authBean.getAssignee}
${authBean.getCandidateUsers}
原文地址:https://www.cnblogs.com/chengxuxiaoyuan/p/13760913.html

https://www.bilibili.com/video/BV1Fp4y19729?p=18

一、几张历史表的简单介绍

1.1 act_hi_procinst 流程实例表
流程实例的历史数据会被保存到act_hi_procinst表中,只要流程被启动,就会将流程实例的数据写入到act_hi_procinst表中,并且一个流程只会写入一条数据。该表中会记录流程的开始id和结束id

1.2 act_hi_actinst 历史行为表
历史行为表会记录流程所走过的每一个节点,包括开始节点和结束节点

1.3 act_hi_taskinst 历史任务表
历史任务表会记录流程走过的每一个任务节点,但像开始节点和结束节点这类不会被记录

二、历史数据的查询
通过activiti提供的历史数据查询api来查询流程和任务的历史数据

2.1 历史流程实例查询
activiti提供了HistoricProcessInstanceQuery接口来查询流程实例历史表

2.2 历史行为查询
activiti提供了HistoricActivityInstanceQuery接口来查询历史行为表

2.3 历史任务查询
activiti提供了HistoricTaskInstanceQuery接口来查询历史任务表

通过这几个接口中提供的查询方法可以完成对流程的历史数据查询。

代码详解:public TableDataInfo findTodoTasks(TaskVo taskVo){}

涉及表:
ACT_RU_TASK 运行时任务节点表
ACT_RU_IDENTITYLINK 任务参与者数据表,主要存储当前节点参与者的信息
ACT_ID_MEMBERSHIP 用户与组的关联表,用来实现多对多