工作流(activiti7)-简单的介绍和使用(二)

工作流(activiti7)-简单的介绍和使用(二)

工作流(activiti7)教程-简单的介绍和使用(一)

工作流(activiti7)教程-简单的介绍和使用(二)

工作流(activiti7)-进阶使用(流程实例,个人任务,组任务)(三)

工作流(activiti7)-进阶使用(流程变量,网关,监听器,拦截器)(四)

工作流(activiti7)-进阶使用(子流程CallActivity详细使用)(五)

目录

工作流:

1.1环境搭建

1.2添加依赖

1.3添加数据库

1.4流程图介绍和使用

1.5部署流程定义

1.6启动流程实例

1.7流程定义查询

1.8任务处理

1.9任务查询

1.10 历史查询

1.11删除流程定义


工作流:

1.1环境搭建

建好项目后新建activiti.cfg.xml配置文件这个名字是默认名字,加载默认配置文件,修改名字就需要手动代码加载了

本地新建数据库,名字activiti,随便起。。。


<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance" xmlns:context= "http://www.springframework.org/schema/context" xmlns:tx= "http://www.springframework.org/schema/tx" xsi:schemaLocation= "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
  http://www.springframework.org/schema/contex http://www.springframework.org/schema/context/spring-context.xsd 
  http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> <!--数据源配置dbcp--> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/activiti" /> <property name="username" value="root" /> <property name="password" value="root" /> </bean> <!--activiti单独运行的ProcessEngine配置对象(processEngineConfiguration),使用单独启动方式  默认情况下:bean的id=processEngineConfiguration  --> <bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration"> <!--代表数据源--> <property name="dataSource" ref="dataSource"> </property> <!-- <property name="jdbcDriver" value="com.mysql.jdbc.Driver" />  <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/activiti" />  <property name="jdbcUsername" value="root" />  <property name="jdbcPassword" value="root" />--> <!--代表是否生成表结构--> <property name="databaseSchemaUpdate" value="true"/> </bean> </beans>

1.2添加pom依赖




 <?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.wsj.activiti </groupId> 
 <artifactId>activiti </artifactId> 
 <version>1.0-SNAPSHOT </version> 
 <build> 
 <plugins> 
 <plugin> 
 <groupId>org.apache.maven.plugins </groupId> 
 <artifactId>maven-compiler-plugin </artifactId> 
 <configuration> 
 <source>6 </source> 
 <target>6 </target> 
 </configuration> 
 </plugin> 
 </plugins> 
 </build> 
 <properties> 
 <slf4j.version>1.6.6 </slf4j.version> 
 <log4j.version>1.2.12 </log4j.version> 
 </properties> 
 <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>${log4j.version} </version> 
 </dependency> 
 <dependency> 
 <groupId>org.slf4j </groupId> 
 <artifactId>slf4j-api </artifactId> 
 <version>${slf4j.version} </version> 
 </dependency> 
 <dependency> 
 <groupId>org.slf4j </groupId> 
 <artifactId>slf4j-log4j12 </artifactId> 
 <version>${slf4j.version} </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.0 </version> 
 </dependency> 
 <dependency> 
 <groupId>org.activiti </groupId> 
 <artifactId>activiti-spring-boot-starter-basic </artifactId> 
 <version>5.22.0 </version> 
 <scope>compile </scope> 
 </dependency> 
 <!-- <dependency> 
  <groupId>org.activiti</groupId> 
  <artifactId>activiti-engine</artifactId> 
  <version>5.22.0</version> 
  <scope>compile</scope> 
  </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> 
 
 </project> 

1.3添加数据库和介绍

两种;

一:拷贝源码中的数据库

二:代码动态生成(本教程采用方式)




  @Test
  public void creatSql() {
    // 动态创建数据库
    ProcessEngineConfiguration configuration =
        ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml");
    ProcessEngine processEngine = configuration.buildProcessEngine();
    System.out.println(processEngine);
  }

运行后生成了数据库。。。。

数据库的介绍:主要分三部分。。。

第一部分:保存了流程图和流程部署定义的数据,每个流程图都存储,待会下边不熟流程会介绍

其中act_re开头代表的Repository,仓库的意思。说白了就是存储实实在在的流程图的相关信息和数据。。

第二部分 act_hi开头。。。history 历史记录。。。各种历史记录。。

第三部分。。act_ru runtime 运行时的数据,,,(临时数据)流程跑完后就自动删除没有了。。。

1.4流程图介绍和使用

现在我们画一个请假流程来介绍:

左侧是每个图标的相关属性,id,名字等,其中有用的是Assignee字段,设置执行人,请假我设置的是张三,经理审批我设置的李四,下边还有其它属性,有多个用户,用户组(比如需要一个项目组的人执行任务),监听器(对任务的监听)等常用操作。这些也都可以通过代码来配置。

1.5部署流程定义

画完流程图,就需要部署了,也就是保存到数据库。。。

现在执行以下代码来部署流程定义

第一步先配置流程引擎对象获取。默认拿到流程引擎对象,全局对象,其它所有操作都需要它




  ProcessEngine pe;

  @Before
  public void init() {
    // 默认方式拿到流程引擎,配置文件名字必须是"activiti.cfg.xml。。
    pe = ProcessEngines.getDefaultProcessEngine();
    System.out.println("初始化了");
  }




  @Test
  public void test1() {
    // 部署流程,把画好的流程部署到数据库
    DeploymentBuilder deploymentBuilder = pe.getRepositoryService().createDeployment();
    deploymentBuilder.addClasspathResource("diagram/pro1.bpmn");
    deploymentBuilder.addClasspathResource("diagram/pro1.png");
    Deployment deployment = deploymentBuilder.deploy();
    System.out.println(deployment.getId());
  }

控制台打印

刚才说了,流程部署后相关的数据库会在act_re和上面一个个byte数据库存储数据,现在查看。。。

控制台打印的id就是上图表的id,部署id 存储流程的id。和数据。。整个路程的id….

byte表存储流程图和png图片

1.6启动流程实例

部署后就可以启动流程了,,

先查询下流程数据然后根据id启动流程




  @Test
  public void test2() {
    // 部署查询对象----查询部署表act_re_deployment,也就是流程列表。。
    ProcessDefinitionQuery query = pe.getRepositoryService().createProcessDefinitionQuery();
    // query.orderByDeploymenTime().desc();
    query.latestVersion();
    List<ProcessDefinition> list = query.list();
    for (ProcessDefinition processDefinition : list) {

      System.out.println(processDefinition.getId() + "-------" + processDefinition.getName());
    }
  }

  @Test
  public void test3() {
    // 开启流程
    String processDefinitionId = "qjlc:1:4";
    ProcessInstance pi = pe.getRuntimeService().startProcessInstanceById(processDefinitionId);
    // ProcessInstance pi = pe.getRuntimeService().startProcessInstanceByKey(); //多种方式请求
    System.out.println(pi.getId());
  }

查询流程列表,,,可以看到查询到id和数据库的存储的数据一一对应

根据id启动流程

启动后可以看到有一个2051的id。。。现在去查询数据库。。。

流程实例初始化历史表

当前运行的任务表,现在流程启动的了,到请假申请了。。。

当前任务的执行人信息

执行表,,流程里面画了两个任务,一个请假,一个审批

流程定义历史表,启动流程后走了开始和第一个流程,所以存储了两条数据。。。这里存储的是整个流程所有节点的历史数据

任务历史表,当前走到了第一个任务。。。所以只有一条。。。

1.7流程定义查询

刚才已经查询了一下列表。。。。。参考上面代码

1.8任务处理

流程启动了。到第一个任务了,也就是张三请假。。所以需要张三来处理下,也就是提交请假申请。。




  @Test
  public void test4() {
    // 查询指派人下的任务
    TaskQuery taskQuery = pe.getTaskService().createTaskQuery();
    // String assignee = "张三"; 指定人就是当前人下的任务,不指定人就是所有任务
    // taskQuery.taskAssignee(assignee);

    taskQuery.orderByTaskCreateTime().desc();
    List<Task> list = taskQuery.list();
    for (Task task : list) {
      String id = task.getId();
      String name = task.getName();
      String assignee2 = task.getAssignee();
      System.out.println(id + "---" + name + "----" + assignee2);
    }
  }

  @Test
  public void test5() {
    // 执行任务
    String taskId = "2505";
    pe.getTaskService().complete(taskId);
  }

先查询任务列表

更具查询的id执行任务。。

这样张三的流程就处理完了,目前任务到了李四审批那里

1.9任务查询

上面已经写了,这里再写一次李四的信息

先查询列表,发下变成了李四了。。然后执行。。这样整个任务就执行结束了。。。。

流程执行结束了,,,查看并分析数据库。。。。

任务跑完了。。。这样act_ru的表数据都没有了。。。

这个表存储的漱所有节点信息,上面有介绍。。。开始-任务-结束都有

任务历史记录,,只有两个任务。。。

流程定义,真个过程就是一个流程图。。所以就一条数据。。。。

1.10 历史查询




  @Test
  public void testHistoric01() {
    HistoryService historyService = pe.getHistoryService();
    HistoricActivityInstanceQuery query = historyService.createHistoricActivityInstanceQuery();
    // query.processInstanceId("2501");可以根据id筛选。。
    List<HistoricActivityInstance> list = query.list();
    for (HistoricActivityInstance ai : list) {
      System.out.println(ai.getActivityId());
      System.out.println(ai.getActivityName());
      System.out.println(ai.getProcessDefinitionId());
      System.out.println(ai.getProcessInstanceId());
      System.out.println("==============================");
    }
  }

查询的是act_hi_actinst 表。。查询出四个节点的数据。。。

1.11删除流程定义




  @Test
  public void deleteDeployment() {
    // 流程部署id
    String deploymentId = "1";
    // 通过流程引擎获取repositoryService
    RepositoryService repositoryService = pe.getRepositoryService();
    // 删除流程定义,如果该流程定义已有流程实例启动则删除时出错
    repositoryService.deleteDeployment(deploymentId);
    // 设置true 级联删除流程定义,即使该流程有流程实例启动也可以删除,设置为false非级别删除方式,如果流程
    // repositoryService.deleteDeployment(deploymentId, true);
  }

部署流程的时候id为1.。根据act_re_deployment表删除,这样其他表的数据也会全部删除。。。就不截图数据库了。。表已经清空了。。。

代码地址;https://github.com/itwsj/activitidemo

 
推荐教程:  
 Activiti7精讲Java通用工作流开发实战  :  http://www.notescloud.top/goods/detail/1140

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值