工作流的学习《一》:工作流的部署、启动、查询和完成任务

** 工作流学习 <一>**

工作流的流程部署、启动、查询、(任务)完成。
在进行工作流的上述四部操作是需要用到一个工作流的引擎 – 核心工作流引擎ProcessEngine:
ProcessEngine processEngine = ProcessEngines…getDefaultProcessEngine(); //工作流的核心引擎
1.工作流的部署
工作流的三种部署形式:在部署时加载源文件、加载zip文件、通过InputStream字节流对文件进行读取。
1.1)直接加载流程文件的形式:

Deployment deployment = processEngine.getRepositoryService()    //与部署流程定义有关Service
                        .createDeployment()   //创建部署对象
		                .name("部署请假流程")  //设置部署名称
		                .addClasspathResource("bpmn/Test.bpmn") //加载bpmn文件
		                .addClasspathResource("bpmn/Test.png")  //加载png文件
		                .deploy();  //完成部署

**1.2)加载zip文件:**将.bpmn文件和.png文件压缩成.zip文件,在部署时加载.zip文件进行流程部署

	InputStream in = this.getClass().getClassLoader().getResourceAsStream("bpmn/Test.zip"); //字节流的形式在家zip文件
    ZipInputStream zis = new ZipInputStream(in);
    Deployment deployment = processEngine.getRepositoryService()
            .createDeployment()
            .name("请假流程Test")
            .addZipInputStream(zis)
            .deploy();

1.3)InputStream字节流加载流程文件:

/**
         * 加载流程文件
         */
        InputStream inputStreamBpmn = this.getClass().getResourceAsStream("personalTaskDemo/personalTaskProcess.bpmn");
        InputStream inputStreamPng = this.getClass().getResourceAsStream("personalTaskDemo/personalTaskProcess.png");
        /**
         * 部署流程
         */
        Deployment deployment = processEngine.getRepositoryService()  //与部署有关的Service
                                            .createDeployment()   //创建部署对象
                                            .name("个人任务(动态分配办理人)")   //设置部署的流程name
                                            .addInputStream("personalTaskProcess.bpmn",inputStreamBpmn)  //加载流程bpmn文件
                                            .addInputStream("personalTaskProcess.png",inputStreamPng)  //加载流程png文件
                                            .deploy();   //部署成功

2. 启动流程 :通过流程定义的Key启动流程 – 在设计流程时设置的流程的ID:
在这里插入图片描述

 String processDefinitionKey = "personalTaskByClass";
        ProcessInstance pi =processEngine.getRuntimeService()   //与执行对象和流程实例相关的Service
                .startProcessInstanceByKey(processDefinitionKey);  //启动流程实例--使用流程定义的key,并设置任务的办理人

3. 查询:通过任务的办理人查询流程信息

 /**
     * 查询个人任务 -- 通过办理人
     */
    @Test
    public void queryTaskByApplyPerson(){
        /**
         * 任务办理人
         */
        String taskAssignee = "李四";
        /**
         * 查询操作
         */
        List<Task> list = processEngine.getTaskService()  //与任务相关Service
                .createTaskQuery()  //创建查询
                .taskAssignee(taskAssignee)  //查询条件 -- 通过任务办理人
                .orderByTaskId().desc()  //查询结果排序
                .list();   //返回结果 - list
        if(list!=null){
            for(Task task : list){
                System.out.println("任务ID:"+task.getId());
                System.out.println("任务办理人:"+task.getAssignee());
                System.out.println("任务名称:"+task.getName());
                System.out.println("任务开始时间:"+task.getCreateTime());
                System.out.println("任务执行对象ID:"+task.getExecutionId());
                System.out.println("任务实例ID:"+task.getProcessInstanceId());
                System.out.println("任务间隔时间:"+task.getDueDate());
                System.out.println("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%");
            }
        }
    }

5. 完成:通过任务ID完成任务

 /**
     * 完成任务  
     */
    @Test
    public void processEnd() {
        /**
         * 需要完成的任务id
         */
        String taskID = "10404";
        /**
         * 完成任务
         */
        processEngine.getTaskService()
                .complete(taskID);
        System.out.println("任务完成!!!" + taskID);
    }

在任务完成前,任务的办理人可以将自己的任务分配给其他人来完成:

public void setAssigneeTask(){
        /**
         * 任务id
         */
        String taskId = "10404";
        /**
         * 分配给的人
         */
        String assignee = "李四";
        processEngine.getTaskService()
                .setAssignee(taskId,assignee);
        System.out.println("任务分配成功!!!"+assignee);
    }
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值