• activiti入门案例


    上一篇我们介绍了activiti的基本概念,这一篇我们来讲述bpmn的构建以及如何部署、定义、完成一套流程。

    流程图的绘画与配置

    (1)绘画:这个和我们大学的时候,学的流程图有个相同点是,都有一个开始和一个结束。在resources建立diagrams文件夹,并新建个application.bpmn文件,开始的节点就点击start event ,结束的就点击end event,节点任务的话,就选择Task下面的userTask就可以了,连线的话,可以选择connection下面的SequenceFlow或者如下面图所示将鼠标放到节点任务上面,也是有线可以直接连下一个节点任务的。把每个节点用线连上,也就算完成了绘画

     

     (2)配置

    图虽然画好了,但是核心配置还是要配置的,点击节点任务。可以看到下面的properties里面的General,在这里Id我们可以不改了,name就是你这个节点对应的任务名称,Main config里面可以填写该节点任务的办理人,即谁来完成这个任务。在这里我就委屈下,由张三来完成了,同样的道理,领导审批的节点任务,我安排了李四来完成。

     

     在配置完所有的节点任务,点击空白处,配置该流程的流程的key,也就是Id以及配上name的值。至此我们的配置也就完成了,最后点击ctrl+s保存后,会发现也生产了png文件。

     流程的部署

    ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

    public
    void deployment(){

            Deployment deployment = processEngine.getRepositoryService()//与流程定义和部署对象相关的Service
            .createDeployment()//创建一个部署对象
            .name("application-test")//添加部署的名称
            .addClasspathResource("diagrams/application.bpmn")//从classpath的资源中加载,一次只能加载一个文件
            .addClasspathResource("diagrams/application.png") 
            .addZipInputStream(zipInputStream)
            .deploy();//完成部署

            System.out.println("部署ID:"+deployment.getId());
            System.out.println("部署名称:"+deployment.getName());//test

    }

     测试结果

    启动流程

    @Test
    public void startProcessInstance(){
        //流程定义的key
        String processDefinitionKey = "testActiviti";
        ProcessInstance pi = processEngine.getRuntimeService()//与正在执行的流程实例和执行对象相关的Service
        .startProcessInstanceByKey(processDefinitionKey);//使用流程定义的key启动流程实例,key对应application.bpmn文件中id的属性值,使用key值启动,默认是按照最新                                  //版本的流程定义启动
        System.out.println("流程实例ID:"+pi.getId());
        System.out.println("流程定义ID:"+pi.getProcessDefinitionId());
    }

    测试结果

     说明:我们可以看到产生的流程id,其实规则就是流程key:版本:随机数  ,这里的版本是当你只要部署并启动流程,那么版本就会+1

    查询待办任务

    经过上面的部署和启动,那么现在应该到了第一个节点环节的办理人张三,下面我们来看看如何查看自己的个人待办信息

    @Test
    public
    void findMyPersonalTask(){ String assignee = "张三"; List<Task> list = processEngine.getTaskService()//与正在执行的任务管理相关的Service .createTaskQuery()//创建任务查询对象 .taskAssignee(assignee)//指定个人任务查询,指定办理人 .list();for(Task task:list){ System.out.println("任务ID:"+task.getId()); System.out.println("任务名称:"+task.getName()); System.out.println("任务的办理人:"+task.getAssignee()); System.out.println("流程实例ID:"+task.getProcessInstanceId()); System.out.println("执行对象ID:"+task.getExecutionId()); System.out.println("流程定义ID:"+task.getProcessDefinitionId()); } }

    测试结果:由此可见,我们的流程目前为止算是启动成功的,已经到达张三这里了。

    完成任务

    到达张三这里之后,那么张三肯定要完成任务了

    @Test
    public
    void completeMyPersonalTask(){ //任务ID String taskId = "2204"; processEngine.getTaskService()//与正在执行的任务管理相关的Service .complete(taskId); System.out.println("完成任务:任务ID:"+taskId); }

    测试结果:此时可以看到已经完成了任务,并且通过查看待办任务的方法查询李四时,发现任务已经到达李四这里了。

    随后们再让李四执行完成任务,这里就不做演示了。

    查看流程状态

    最后李四完成任务后,我们来看看流程的运行状态,按道理来说,流程应该是已经结束的状态

    @Test
        public void processState(){
            ProcessInstance pi=processEngine.getRuntimeService() // 获取运行时Service
                .createProcessInstanceQuery() // 创建流程实例查询
                .processInstanceId("2201") // 用流程实例ID查询
                .singleResult();
            if(pi!=null){
                System.out.println("流程正在执行!");
            }else{
                System.out.println("流程已经执行结束!");
            }
        }

    测试结果

     至此,我们就测试完了一套简单版的流程,从绘图-配置,到流程的部署、启动、完成的一个案例。通过上面的案例我们可以发现,有了工作流,帮助我们减少了不少代码的开发, 通过利用activiti的几个核心api就能帮助我们实现人员的任务办理。

  • 相关阅读:
    006开源O/R映射框架内容回顾
    005---query接口初步
    004---持久对象的生命周期介绍
    C++中计算矩阵的行列式
    异面直线判定
    华夏万家不投资最佳激活顺序
    飞行目标定位测量相关文献记录
    程序运行缺少MSVCR110.dll
    C++中的return返回值:return0 or return -1?
    办宽带
  • 原文地址:https://www.cnblogs.com/wei-cy/p/12872602.html
Copyright © 2020-2023  润新知