Activiti就是这么简单(二)

简介: Activiti5是由Alfresco软件在2010年5月17日发布的业务流程管理(BPM)框架,它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。Activiti基于Apache许可的开源BPM平台,创始人Tom Baeyens是JBoss jBPM的项目架构师,它特色是提供了eclipse插件,开发人员可以通过插件直接绘画出业务 流程图。.


二、流程定义细讲


管理流程定义主要涉及到以下的4张表:

-- 流程部署相关的表
SELECT * FROM act_ge_bytearray # 通用字节资源表
SELECT * FROM act_ge_property # 通用属性表,可以生成部署id
SELECT * FROM act_re_deployment  #部署表
SELECT * FROM act_re_procdef    # 流程定义表


2.1PNG资源


在Eclipse中Activiti插件会自动生成一个BPMN与之对应的PNG图片,是需要通过加载PNG图片的

@Test
    public void deploy() {
        //获取仓库服务 :管理流程定义
        RepositoryService repositoryService = processEngine.getRepositoryService();
        Deployment deploy = repositoryService.createDeployment()//创建一个部署的构建器
                .addClasspathResource("LeaveActiviti.bpmn")//从类路径中添加资源,一次只能添加一个资源
                .name("请求单流程")//设置部署的名称
                .category("办公类别")//设置部署的类别
                .deploy();
        System.out.println("部署的id"+deploy.getId());
        System.out.println("部署的名称"+deploy.getName());
    }

而我们的Intellij idea插件不会自动生成PNG图片,但是我们在加载BPMN文件的时候,好像会自动插入PNG图片,数据库是有对应的记录的【我们是没有手动加载PNG图片资源的】

10.jpg


这里写图片描述

我们查看一下


//查看bpmn 资源图片
    @Test
    public void viewImage() throws Exception{
        String deploymentId="201";
        String imageName=null;
        //取得某个部署的资源的名称  deploymentId
        List<String> resourceNames = processEngine.getRepositoryService().getDeploymentResourceNames(deploymentId);
        // buybill.bpmn  buybill.png
        if(resourceNames!=null&&resourceNames.size()>0){
            for(String temp :resourceNames){
                if(temp.indexOf(".png")>0){
                    imageName=temp;
                }
            }
        }
        /**
         * 读取资源
         * deploymentId:部署的id
         * resourceName:资源的文件名
         */
        InputStream resourceAsStream = processEngine.getRepositoryService()
                .getResourceAsStream(deploymentId, imageName);
        //把文件输入流写入到文件中
        File file=new File("d:/"+imageName);
        FileUtils.copyInputStreamToFile(resourceAsStream, file);
    }

可惜的是,查看出来的图片的中文数据会乱码

11.png

这里写图片描述


2.2查看流程定义


我们当时候查询流程定义是通过我们设置流程图的id来查看的….其实我们可以通过其他的属性来查询…并且可以查询出更加详细的数据


//查看流程定义
    @Test
    public void queryProcessDefination(){
        String processDefiKey="buyBill";//流程定义key
        //获取流程定义列表
        List<ProcessDefinition> list = processEngine.getRepositoryService().createProcessDefinitionQuery()
        //查询 ,好比where
//        .processDefinitionId(proDefiId) //流程定义id
         // 流程定义id  : buyBill:2:704   组成 : proDefikey(流程定义key)+version(版本)+自动生成id
        .processDefinitionKey(processDefiKey)//流程定义key 由bpmn 的 process 的  id属性决定
//        .processDefinitionName(name)//流程定义名称  由bpmn 的 process 的  name属性决定
//        .processDefinitionVersion(version)//流程定义的版本
        .latestVersion()//最新版本
        //排序
        .orderByProcessDefinitionVersion().desc()//按版本的降序排序
        //结果
//        .count()//统计结果
//        .listPage(arg0, arg1)//分页查询
        .list();
        //遍历结果
        if(list!=null&&list.size()>0){
            for(ProcessDefinition temp:list){
                System.out.print("流程定义的id: "+temp.getId());
                System.out.print("流程定义的key: "+temp.getKey());
                System.out.print("流程定义的版本: "+temp.getVersion());
                System.out.print("流程定义部署的id: "+temp.getDeploymentId());
                System.out.println("流程定义的名称: "+temp.getName());
            }
        }
    }


2.3资源来自ZIP


我们还可以加载的是ZIP类型的资源数据


//部署流程定义,资源来自zip格式
    @Test
    public void deployProcessDefiByZip(){
        InputStream in=getClass().getClassLoader().getResourceAsStream("BuyBill.zip");
        Deployment deploy = processEngine.getRepositoryService()
                .createDeployment()
                .name("采购流程")
                .addZipInputStream(new ZipInputStream(in))
                .deploy();
        System.out.println("部署名称:"+deploy.getName());
        System.out.println("部署id:"+deploy.getId());
    }


2.4删除流程定义


//删除流程定义
    @Test
    public void deleteProcessDefi(){
        //通过部署id来删除流程定义
        String deploymentId="101";
        processEngine.getRepositoryService().deleteDeployment(deploymentId);
    }

再次查询的时候,已经没有101这个流程定义的数据了。

12.jpg这里写图片描述



三、流程实例与任务执行细讲


流程实例与任务执行的常用表有以下几个:


-- 流程实例与任务
SELECT * FROM act_ru_execution  # 流程执行对象信息
SELECT * FROM act_ru_task   # 正在运行的任务表
SELECT * FROM act_hi_procinst # 历史流程实例表
SELECT * FROM act_hi_taskinst  # 历史流程任务表


这里就简单简述一下流程实例与流程对象的区别:

  • (1)如果是单例流程,执行对象ID就是流程实例ID
  • (2)如果一个流程有分支和聚合,那么执行对象ID和流程实例ID就不相同
  • (3)一个流程中,流程实例只有1个,执行对象可以存在多个。


3.1开始流程


@Test
    public void startProcess(){
        String processDefiKey="leaveActiviti";//bpmn 的 process id属性
        ProcessInstance pi = processEngine.getRuntimeService()
                .startProcessInstanceByKey(processDefiKey);
        System.out.println("流程执行对象的id:"+pi.getId());//Execution 对象
        System.out.println("流程实例的id:"+pi.getProcessInstanceId());//ProcessInstance 对象
        System.out.println("流程定义的id:"+pi.getProcessDefinitionId());//默认执行的是最新版本的流程定义
    }


3.2查看正在运行的任务


//查询正在运行任务 
    @Test
    public void queryTask(){
        //取得任务服务
        TaskService taskService = processEngine.getTaskService();
        //创建一个任务查询对象
        TaskQuery taskQuery = taskService.createTaskQuery();
        //办理人的任务列表
        List<Task> list = taskQuery.list();
        //遍历任务列表
        if(list!=null&&list.size()>0){
            for(Task task:list){
                System.out.println("任务的办理人:"+task.getAssignee());
                System.out.println("任务的id:"+task.getId());
                System.out.println("任务的名称:"+task.getName());
            }
        }
    }

查询SELECT * FROM act_ru_task 表

13.png这里写图片描述14.jpg这里写图片描述

目录
相关文章
|
7月前
|
XML 数据可视化 安全
一文了解Activiti7
一文了解Activiti7
154 0
|
数据可视化 Java 关系型数据库
01-认识Activiti
类似如请假、离职、出差、报销这种有审批流程的业务,我们都可以称之为工作流(也叫流程引擎),它可以帮助用户实现一个审批流程的可视化,借助于工作流引擎可以搭建客户关系管理系统(CRM)、运输管理系统(TMS)、仓储管理系统(WMS)、财务费用系统等多种复杂业务系统。
114 0
|
7月前
|
XML Java API
Activiti应用
Activiti应用
99 0
|
安全 Java 测试技术
Activiti-Activiti整合篇
Activiti-Activiti整合篇
Activiti-Activiti整合篇
|
架构师 应用服务中间件 API
Activiti就是这么简单(四)
Activiti5是由Alfresco软件在2010年5月17日发布的业务流程管理(BPM)框架,它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。Activiti基于Apache许可的开源BPM平台,创始人Tom Baeyens是JBoss jBPM的项目架构师,它特色是提供了eclipse插件,开发人员可以通过插件直接绘画出业务 流程图。.
228 0
Activiti就是这么简单(四)
|
架构师 Java 应用服务中间件
Activiti就是这么简单(一)
Activiti5是由Alfresco软件在2010年5月17日发布的业务流程管理(BPM)框架,它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。Activiti基于Apache许可的开源BPM平台,创始人Tom Baeyens是JBoss jBPM的项目架构师,它特色是提供了eclipse插件,开发人员可以通过插件直接绘画出业务 流程图。.
398 0
Activiti就是这么简单(一)
|
架构师 应用服务中间件 Apache
Activiti就是这么简单(三)
Activiti5是由Alfresco软件在2010年5月17日发布的业务流程管理(BPM)框架,它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。Activiti基于Apache许可的开源BPM平台,创始人Tom Baeyens是JBoss jBPM的项目架构师,它特色是提供了eclipse插件,开发人员可以通过插件直接绘画出业务 流程图。.
291 0
Activiti就是这么简单(三)
|
XML 数据格式
Activiti 6.x【11】IntermediateEvent
版权声明:转载注明出处就OK的说,有些东西会转载,都会注明的说= =如果有冒犯麻烦见谅 https://blog.csdn.net/Pan1458689676/article/details/82728835 ...
1758 0
|
XML 数据格式
Activiti 6.x【10】BoundaryEvent【下】
版权声明:转载注明出处就OK的说,有些东西会转载,都会注明的说= =如果有冒犯麻烦见谅 https://blog.csdn.net/Pan1458689676/article/details/82720556 ...
2521 0
|
XML 数据格式
Activiti 6.x【8】EndEvent
版权声明:转载注明出处就OK的说,有些东西会转载,都会注明的说= =如果有冒犯麻烦见谅 https://blog.csdn.net/Pan1458689676/article/details/82711607 ...
1603 0