复习步骤4-Activiti流程定义

流程定义:

流程定义:概念,规定 如法律,如规定 又如规定员工请假需经理同意

流程实例:具体案例,如小明偷了小强家的钱这条案件,又如小明向经理王红请假

流程定义文件如:bpmn文件存放在act_re_procdef (procdef是process和definition 及流程定义的缩写)表中

 

中止与激活流程定义 --suspendProcessDefinitionByXXXactivateProcessDefinitionByXXX

项目结构如图

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 -->

    <bean id="processEngineConfiguration"

    class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">

       <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/act" />

       <property name="jdbcDriver" value="com.mysql.jdbc.Driver" />

       <property name="jdbcUsername" value="root" />

       <property name="jdbcPassword" value="root30075" />

       <!--true 策略 给我们创建流程引擎的相关表,及字段等 -->

       <property name="databaseSchemaUpdate" value="true" />

      

       <!--不让activiti根据bpmn自动生成流程图png文件  -->

       <!-- <property name="createDiagramOnDeploy" value="false" /> -->

      

      

    </bean>

</beans>

 

DeployTest.java

package com.xiangshuai.act.c8;

 

import java.util.List;

import java.util.UUID;

 

import org.activiti.engine.IdentityService;

import org.activiti.engine.ProcessEngine;

import org.activiti.engine.ProcessEngines;

import org.activiti.engine.RepositoryService;

import org.activiti.engine.RuntimeService;

import org.activiti.engine.identity.User;

import org.activiti.engine.repository.Deployment;

import org.activiti.engine.repository.DeploymentBuilder;

import org.activiti.engine.repository.ProcessDefinition;

 

/**

 * 流程定义测试

 * 文件在E:\学习文档子目录压缩\框架\工作流引擎\Activiti6.0\window\复习步骤4-Activiti流程定义

 * 我的网盘\我的笔记学习文档子目录压缩\框架\工作流引擎\Activiti6.0\window\复习步骤4-Activiti流程定义

 * @author lqx

 *

 */

public class DeployTest {

 

    public static void main(String[] args) {

       //insertImgToAct_ge_bytearray();

             //noInsertImgToAct_ge_bytearray();

             //testSuspendProcessDefinitionByKey();

             testAuth();

    }

   

   

   /* 我们没有提供流程图PNG图片,并且activiti.cfg.xml<property name="createDiagramOnDeploy" value="true" />默认true

    * 那么activiti会根据test1.bpmn插入一条带 test1.myProcess.png-(这个myProcess是test1.bpmn<process>

    标签的id值)这个图片的记录到 act_ge_bytearray中,并与流程定义相关的表act_re_deployment与act_re_procdef 关联起来

    */

    public static void autoInsertImgToAct_ge_bytearray(){

              ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();

         // 存储服务

         RepositoryService rs = engine.getRepositoryService();

        

         DeploymentBuilder builder = rs.createDeployment();

         builder.addClasspathResource("test1.bpmn");

         builder.deploy();

    }

   

    /* 我们提供流程图PNG图片-test2.png,那么activiti会根据test2.bpmn插入一条带 test2.png-()这个图片的记录到 act_ge_bytearray中,并与流程定义相关的表act_re_deployment与act_re_procdef 关联起来

       activiti不会再自动生成一条test2.myProcess.png这条记录

     */

    public static void insertImgToAct_ge_bytearray(){

             ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();

             // 存储服务

             RepositoryService rs = engine.getRepositoryService();

            

             DeploymentBuilder builder = rs.createDeployment();

             builder.addClasspathResource("test2.bpmn").addClasspathResource("test2.png");//部署我们提供流程图PNG图片-test2.png

             builder.deploy();

    }

   

   

    /* 除这个方法-noInsertImgToAct_ge_bytearray 外 其他时候均需要将activiti.cfg.xml<property name="createDiagramOnDeploy" value="false" />

     * 注释掉

     * 不插入  pgn图片

     * 我们没有提供流程图PNG图片,并且activiti.cfg.xml<property name="createDiagramOnDeploy" value="false" />默认true

     * 那么activiti 不会 根据test3.bpmn插入一条带 test3.myProcess.png-(这个myProcess是test3.bpmn<process>的标签的id值)这个图片的记录到 act_ge_bytearray中

     */

     public static void noInsertImgToAct_ge_bytearray(){

            ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();

          // 存储服务

          RepositoryService rs = engine.getRepositoryService();

         

          DeploymentBuilder builder = rs.createDeployment();

          builder.addClasspathResource("test3.bpmn");

          builder.deploy();

     }

    

    

     //中止与激活流程定义 --suspendProcessDefinitionByXXX,activateProcessDefinitionByXXX

    public static void testSuspendProcessDefinitionByKey(){

             ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();

             //获得管理流程定义的对象

             RepositoryService rs = engine.getRepositoryService();

             DeploymentBuilder deployment = rs.createDeployment();

             deployment.addClasspathResource("test4.bpmn");

             Deployment dep = deployment.deploy();

       

        //查询流程定义进行中止

        ProcessDefinition pd = rs.createProcessDefinitionQuery().deploymentId(dep.getId()).singleResult();

        System.out.println("id="+pd.getId());

                 // 中止流程定义

        rs.suspendProcessDefinitionByKey(pd.getKey());

        //中止流程定义后启动流程实例会抛出异常,因为流程定义被中止了

        RuntimeService runtimeService = engine.getRuntimeService();

        runtimeService.startProcessInstanceById(pd.getId());

    }

 

   

    //指定流程只让某个人进行启动,即只让某个人有启动某个流程的权限

    public static void testAuth(){

             ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();

             //获得管理流程定义的对象

             RepositoryService rs = engine.getRepositoryService();

             DeploymentBuilder deployment = rs.createDeployment();

             deployment.addClasspathResource("test5.bpmn");

             Deployment dep = deployment.deploy();

       

        //查询流程定义,并创建一个用户,让这个流程只有此人(也可以设置一组group人)有权限启动

             // 保存的三表为 中间表 act_ru_identitylink,act_id_user,act_re_procdef

             IdentityService is = engine.getIdentityService();

             User user = is.newUser("xiaoming");

             user.setId(UUID.randomUUID().toString());

             is.saveUser(user);

            

        ProcessDefinition pd = rs.createProcessDefinitionQuery().deploymentId(dep.getId()).singleResult();

        rs.addCandidateStarterUser(pd.getId(), user.getId());//参数1流程定义ID,参数2用户ID,

       

        //查询 xiaoming这个用户又多少流程启动权限

        List<ProcessDefinition> list = rs.createProcessDefinitionQuery().startableByUser(user.getId()).list();

        list.forEach((tpd)->{

                System.out.println(tpd.getId());

        });

    }

   

 

}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值