zoukankan      html  css  js  c++  java
  • activiti任务TASK

    一、概要

    1. 设计TASK的表主要是:ACT_RU_TASK,ACT_HI_TASKINST(见参考-activiti表);
    2. 任务主要有:人工任务(usertask),服务任务(servicetask)等;
    3. 候选人/候选组(candidate):可以执行任务的一类人或者多个组,候选人/候选组中都可以去签收任务,一旦某人签收,就成为受理人,其他人就不能再签收受理此任务;usertask流程图中,candidate标示候选;候选人涉及的表ACT_RU_IDENTITYLINK;
    4. 受理人(assignee):有两种情况,一种是候选人/组中有人签收任务后成为受理人,另外一种是流程图中直接指定受理人,但是可以指定一个动态受理人;受理人涉及的表ACT_RU_TASK;
    5. 持有人(owner):持有人设置主要是存入历史表中,用于历史任务的查询,涉及的表ACT_HI_TASKINST;

    二、任务操作

    1. 创建TASK任务与设置权限:可以使用代码创建任务,但是实际操作中都是绘制流程图。绘制TASK后,在属性可以设置候选人和受理人,一般都是设置候选人,因为固定受理人不太符合程序变动;

              候选人设置了deptleader,该值将部署在表ACT_RU_IDENTITYLINK中,查看xml看见:    

    //设置了候选组
     <userTask id="deptLeaderAudit" name="部门领导审批" activiti:candidateGroups="deptLeader">
     </userTask>

        完整的XML(无图形位置信息)

    <process id="leave" name="请假流程" isExecutable="true">
        <documentation>请假流程演示</documentation>
        <startEvent id="startevent1" name="Start" activiti:initiator="applyUserId"></startEvent>
        <userTask id="deptLeaderAudit" name="部门领导审批" activiti:candidateGroups="deptLeader"></userTask>
        <exclusiveGateway id="exclusivegateway5" name="Exclusive Gateway"></exclusiveGateway>
        <userTask id="modifyApply" name="调整申请" activiti:assignee="${applyUserId}">
          <extensionElements>
            <activiti:taskListener event="complete" delegateExpression="${afterModifyApplyContentProcessor}"></activiti:taskListener>
          </extensionElements>
        </userTask>
        <userTask id="hrAudit" name="人事审批" activiti:candidateGroups="hr"></userTask>
        <exclusiveGateway id="exclusivegateway6" name="Exclusive Gateway"></exclusiveGateway>
        <userTask id="reportBack" name="销假" activiti:assignee="${applyUserId}">
          <extensionElements>
            <activiti:taskListener event="complete" delegateExpression="${reportBackEndProcessor}"></activiti:taskListener>
          </extensionElements>
        </userTask>
        <endEvent id="endevent1" name="End"></endEvent>
        <exclusiveGateway id="exclusivegateway7" name="Exclusive Gateway"></exclusiveGateway>
        <sequenceFlow id="flow2" sourceRef="startevent1" targetRef="deptLeaderAudit"></sequenceFlow>
        <sequenceFlow id="flow3" sourceRef="deptLeaderAudit" targetRef="exclusivegateway5"></sequenceFlow>
        <sequenceFlow id="flow4" name="不同意" sourceRef="exclusivegateway5" targetRef="modifyApply">
          <conditionExpression xsi:type="tFormalExpression"><![CDATA[${!deptLeaderPass}]]></conditionExpression>
        </sequenceFlow>
        <sequenceFlow id="flow5" name="同意" sourceRef="exclusivegateway5" targetRef="hrAudit">
          <conditionExpression xsi:type="tFormalExpression"><![CDATA[${deptLeaderPass}]]></conditionExpression>
        </sequenceFlow>
        <sequenceFlow id="flow6" sourceRef="hrAudit" targetRef="exclusivegateway6"></sequenceFlow>
        <sequenceFlow id="flow7" name="同意" sourceRef="exclusivegateway6" targetRef="reportBack">
          <conditionExpression xsi:type="tFormalExpression"><![CDATA[${hrPass}]]></conditionExpression>
        </sequenceFlow>
        <sequenceFlow id="flow8" sourceRef="reportBack" targetRef="endevent1"></sequenceFlow>
        <sequenceFlow id="flow9" name="不同意" sourceRef="exclusivegateway6" targetRef="modifyApply">
          <conditionExpression xsi:type="tFormalExpression"><![CDATA[${!hrPass}]]></conditionExpression>
        </sequenceFlow>
        <sequenceFlow id="flow10" name="重新申请" sourceRef="exclusivegateway7" targetRef="deptLeaderAudit">
          <conditionExpression xsi:type="tFormalExpression"><![CDATA[${reApply}]]></conditionExpression>
        </sequenceFlow>
        <sequenceFlow id="flow11" sourceRef="modifyApply" targetRef="exclusivegateway7"></sequenceFlow>
        <sequenceFlow id="flow12" name="结束流程" sourceRef="exclusivegateway7" targetRef="endevent1">
          <conditionExpression xsi:type="tFormalExpression"><![CDATA[${!reApply}]]></conditionExpression>
        </sequenceFlow>
      </process>

             2.查询候选任务

        //根据候选组ID查询拥有任务
        List<Task> tasks = taskService.createTaskQuery().taskCandidateGroup(groupA.getId()).list();
        for (Task task : tasks){
        System.out.println(task.getName());
      }
    //根据用户ID查询任务 tasks = taskService.createTaskQuery().taskCandidateUser(user.getId()).list(); for (Task task : tasks){
        System.out.println(task.getName());
      }
    //调用taskCandidateGroupIn List<String> groupIds = new ArrayList<String>(); groupIds.add(groupA.getId()); groupIds.add(groupB.getId());
    tasks
    = taskService.createTaskQuery().taskCandidateGroupIn(groupIds).list(); for (Task task : tasks){
        System.out.println(task.getName());
      }
    //查询权限数据 List<IdentityLink> links = taskService.getIdentityLinksForTask(tasks.get(0).getId()); System.out.println("关系数据量: " + links.size());}
  • 相关阅读:
    mac 10.15.7 修改PATH
    oc 属性类型一般用法
    ubuntu解压zip文件名乱码
    telnet 退出
    docker 根据容器创建镜像
    mac android adb device 没有显示设备
    Yii2 查看所有的别名 alias
    Yii2 App Advanced 添加 .gitignore
    ubuntu 18.04 搜狗突然就提示乱码
    An error occured while deploying the file. This probably means that the app contains ARM native code and your Genymotion device cannot run ARM instructions. You should either build your native code to
  • 原文地址:https://www.cnblogs.com/firebata/p/5253021.html
Copyright © 2011-2022 走看看