• Activiti工作流入门


        工作流的定义:

         业务过程的部分或者整体在计算机应用环境下的自动化

              解决问题:

         实现多个参与者之间按照预定义的某种规则传递文档或信息或任务的过程自动化进行,从而实现预定义的目标,或促使目标实现

     Activiti

        业务流程管理框架(BPM)

              优点:l. 利于实现较好的业务流程控制,提高顾客的服务质量

                      2. 利于维护,降低开发成本

      搭建Activiti开发环境

            在线安装 

                 1) 打开 Help -> Install New Sofeware

                 2)  配置插件名称和请求地址

          Name: Activiti BPMN 2.0 designer

          Location: http://www.activiti.org/designer/update/

                 3)   点击复选框

          Detail部分记得选中 "Contact all updates sites.." , 因为它会检查所有当前安装所需要的插件并可以被Eclipse下载.

                 流程如图:

                  

                    一直下一步...

                    安装完成后:

                        new -- > Other 如果出现如下界面,说明安装成功了.

                       

               Activiti Demo程序

         创建Actitviti工程过程:new - other -Activiti Project

                      会得到如下的项目框架结构:

                      

                          焦点在于包:diagrams,接下来,选中diagram 右键点击new - other - Activiti Diagrams  这一步主要是创建定义流程相关的.bpmn文件

                          创建位置就是选中的diagrams内;.bpmn创建环境如下:

                           

                          创建.bpmn文件过程,就是从右边工具栏拖动元素至工作区,元素主要有task ,开始,结束,连线等;个人认为这就是个画流程图过程,

     只不过,是用Activiti提供的组件画的而已.

                          记得做一下这步操作,它会帮助您保存.bpmn文件时,同时以.PNG格式保存一份(方便业务上,给用户提示性操作用)也就是勾上复选框选项...

                          

                          Next .....将会介绍一下流程由  定义-部署-执行-结束过程,主要结合一个demo程序介绍

                                   @Test

                                 部署流程定义
                                 public void deployProcessDefi(){
              Deployment deploy = processEngine.getRepositoryService()
                              .createDeployment().name("请假审批")
                                      .addClasspathResource("diagrams/leaveBillProcess.bpmn")
                                                                        .deploy();
                   System.out.println("流程定义id"+deploy.getId());
                System.out.println("流程定义名:"+deploy.getName());
            }

                                以上测试代码是加载diagram/**.bpmn文件,创建一个名字叫做"请假审批"流程的过程,代码执行以后数据库会有如下变化:

                                注意:Activiti框架在第一次创建应用时,会自动创建数据库,包含23张以act_开头的表

                                   流程部署

                                 

                               流程定义

                                

              流程相关的静态资源:

                                

                                以上表显示的是部署流程定义对相关表达影响.

                                执行流程

                                        以上只是实现了流程的定义;具体某个用户申请请假,这个时候就会创建具体的流程实例了...

                                       //执行流程 -- 流程实例与执行对象
                                         @Test
                public void startProcess(){
                    String processDefiKey = "leaveBill:1:504";//流程定义的key值
                    Map<String,Object> params = new HashMap<String,Object>();
                                    params.put("leaveMan","renzhong");//动态指派执行任务角色,leaveMan是设计.bpmn文件时,在指派人处以#{leaveMan}设置的

                                                            ProcessInstance pi = processEngine.getRuntimeService()
                      .startProcessInstanceById(processDefiKey, params);

                     System.out.println("流程执行对象id:"+pi.getId());
                                       System.out.println("流程实例id:"+pi.getProcessInstanceId());
                     System.out.println("流程定义id:"+pi.getProcessDefinitionId());
                }

                                   执行流程过程数据库表会有如下影响:

                                     产生执行对象

                                          

                                    

                                          产生运行时变量:动态指派了renzhong执行当前任务,这个变量值会被记录在"案"

       

                                         产生任务:当前任务名字/执行者/执行对象id/流程实例id/任务的key值

     

                        完成任务

                         @Test
              public void compileTask() {
            String taskId = "1304";//具体任务id
              Map<String,Object> params=new HashMap<String, Object>();
            params.put("days_c", 367);
            //  taskId:任务id
            // processEngine.getTaskService().complete(taskId, params);
              processEngine.getTaskService().complete(taskId);

              System.out.println("当前任务执行完毕");
            }

                        任务完成后,会根据先前预定义的规则继续创建任务,直到流程走完....

                        上面的任务完成后,会继续自动创建任务,流程将会走到.bpmn文件定义的"项目组长这一环节",也就是流程继续往下走...

                         

                         对比上一个id由105变为202了,名称与指派处理人也按照预先定义自动化设置上去了,而之前的任务执行完后会马上被删除掉,新的任务被开启

                          一旦按照预定义规则执行完,所有act_ru_的数据都会被自动删除掉,所有历史执行记录,从act_hi_查看;

                         

                         介绍两个知识点

                                 流程任务之间要传递业务参数怎么办?例如申请人请假理由要传递给下一级别的审批人该怎么办??

                                    TaskService提供了setVariable / setVariableLocal api可以解决这个问题,具体怎么应用请百度...

                                  什么叫排他网?说白就是默认路径,相当于switch...case里边的default项

                                         

                                             “请假天数在年以上”的连线不设置条件,但点击打叉图标默认选中;当输入条件不满足走总经理/地区经理审批时,默认会走董事长这条线路

                                              这就是排他网啦

                        

                福利来了哦

                        如下链接可以找到一个demo,直接可以运行的哦(导入maven工程),还有专题视频;拿走不谢...

            链接:http://pan.baidu.com/s/1gfelDUr 密码:vf0k

                                  

  • 相关阅读:
    分布式搜索引擎Elasticsearch的查询与过滤
    剖析Elasticsearch集群系列第一篇 Elasticsearch的存储模型和读写操作
    分布式缓存 cachecloud
    npm是什么NPM的全称是Node Package Manager
    Grafana监控可视化环境搭建
    github ssl验证跳过
    Linux分区扩容
    手把手教你把Vim改装成一个IDE编程环境(图文)
    根据条件批量删除document
    奇智网络聊天机器人
  • 原文地址:https://www.cnblogs.com/fzczailushang/p/7340842.html
Copyright © 2020-2023  润新知