Activiti工作流 OA项目流程
准备学习过程
1.什么是工作流?
工作流:工作流程,业务进行的每个步骤
例子请假:申请 ----------经理审批----------------总经理审批------------人事存档
2.实现方式
1)通过程序编码通过状态更改实现(弊端:流程更改后不能使用)
2)通过Activiti
3.Activiti工作原理
1)读取XML文件 将流程存入表中;
2)读取表中数据,一行一行执行
4.IDEA安装bpmn画图插件 actibpm
1)在idea插件网下载,选中setting中的plugins 通过本地安装插件
5.构建测试项目
1)maven 依赖
<?xml version="1.0" encoding="UTF-8"?>
<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.workflow.activiti</groupId>
<artifactId>activiti</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-engine</artifactId>
<version>7.0.0.Beta1</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring</artifactId>
<version>7.0.0.Beta1</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-bpmn-model</artifactId>
<version>7.0.0.Beta1</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-bpmn-converter</artifactId>
<version>7.0.0.Beta1</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-json-converter</artifactId>
<version>7.0.0.Beta1</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-bpmn-layout</artifactId>
<version>7.0.0.Beta1</version>
</dependency>
<dependency>
<groupId>org.activiti.cloud</groupId>
<artifactId>activiti-cloud-services-api</artifactId>
<version>7.0.0.Beta1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.40</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<!-- log start -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.28</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.12</version>
</dependency>
<!-- log end -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<!--文件读写-->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
</dependencies>
<repositories>
<repository>
<id>alfresco</id>
<name>Activiti Releases</name>
<url>https://artifacts.alfresco.com/nexus/content/repositories/activiti-releases/</url>
<releases>
<enabled>true</enabled>
</releases>
</repository>
</repositories>
<!--指定项目编译版本-->
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
2)log4j.properties
# Set root category priority to INFO and its only appender to CONSOLE. #log4j.rootCategory=INFO, CONSOLE debug info warn error fatal log4j.rootCategory=debug, CONSOLE, LOGFILE # Set the enterprise logger category to FATAL and its only appender to CONSOLE. log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE # CONSOLE is set to be a ConsoleAppender using a PatternLayout. log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n # LOGFILE is set to be a File appender using a PatternLayout. log4j.appender.LOGFILE=org.apache.log4j.FileAppender log4j.appender.LOGFILE.File=d:\axis.log log4j.appender.LOGFILE.Append=true log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout log4j.appender.LOGFILE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n
3)activiti.cfg.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" 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"> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"></property> <property name="url" value="jdbc:mysql:/ip:3306/activiti?nullCatalogMeansCurrent=true"></property> <property name="username" value=""></property> <property name="password" value=""></property> </bean> <bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration"> <!--代表数据源 --> <property name="dataSource" ref="dataSource"/> <!--代表是否生成表结构 --> <property name="databaseSchemaUpdate" value="true" /> </bean> </beans>
如果mysql jar包是6.x版本需要在url后加nullCatalogMeansCurrent=true 如果是5.x版本可以不加;这个配置代表数据库的选择优先级
如果为true则在url中选择;不然遍历数据库
如果出现中文乱码 在url后加characterEncoding=UTF-8
注意:在xml配置文件中配置数据库URL时,要使用&的转义字符也就是&
全局流程变量三种设置方式
1.启动流程实例赋予
2.完成Task时设置
3.runtimeService.setVariable(流程实例ID)
4.TaskService.setVariable(任务id)
组任务处理
一个任务可以有多个候选处理人,处理任务前要拾取任务,如果拾取后不想出处理可以归还任务到组里
组任务测试
@Test public void testTeamTask(){ //1.流程部署 //2.启动流程实例 //3.任务处理 //4.组任务处理 //4.1查询组任务 ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine(); TaskService taskService = defaultProcessEngine.getTaskService(); List<Task> list = taskService.createTaskQuery().processDefinitionKey("my_process1").taskCandidateUser("lisi").list(); for (Task task: list ) { if(task.getAssignee()==null){ System.out.println("说明当前任务属于组任务"); } //4.2拾取组任务 taskService.claim(task.getId(),"zhangsan"); //4.3归还任务(归还前根据处理人名称去查询任务,确定task不为null在归还,也是任务交接) taskService.setAssignee(task.getId(),null); //5完成任务 Task task1 = taskService.createTaskQuery().processDefinitionKey("").taskAssignee("").singleResult(); taskService.complete(task1.getId()); } }

浙公网安备 33010602011771号