精华内容
下载资源
问答
  • 一、并行网关网关也可以表示流程中的并行情况。并行网关允许将流程分成多条分支,也可以把多条分支汇聚到一起。并行网关的功能是基于进入和外出的顺序流的:分支: 并行后的所有外出顺序流,为每个顺序流都创建一个...

    网关用来控制流程的流向, 网关可以消费也可以生成token。网关显示成菱形图形,内部有有一个小图标。 图标表示网关的类型。

    2a141d037f7d69efd94537ad13616d2e.png

    一、并行网关

    网关也可以表示流程中的并行情况。并行网关允许将流程分成多条分支,也可以把多条分支汇聚到一起。并行网关的功能是基于进入和外出的顺序流的:

    分支: 并行后的所有外出顺序流,为每个顺序流都创建一个并发分支。

    汇聚: 所有到达并行网关,在此等待的进入分支, 直到所有进入顺序流的分支都到达以后, 流程就会通过汇聚网关。

    如果同一个并行网关有多个进入和多个外出顺序流, 它就同时具有分支和汇聚功能。 这时,网关会先汇聚所有进入的顺序流,然后再切分成多个并行分支。与其他网关的主要区别是,并行网关不会解析条件。 即使顺序流中定义了条件,也会被忽略。

    ded4b0f6455e30aacdf66700cc2275d4.png

    二、排他网关

    排他网关(也叫异或(XOR)网关,或更技术性的叫法 基于数据的排他网关), 用来在流程中实现决策。 当流程执行到这个网关,所有外出顺序流都会被处理一遍。 其中条件解析为true的顺序流(或者没有设置条件,概念上在顺序流上定义了一个'true') 会被选中,让流程继续运行。

    46f83a507223c77b22576fc1190052ec.png

    三、包含网关

    包含网关可以看做是排他网关和并行网关的结合体。 和排他网关一样,你可以在外出顺序流上定义条件,包含网关会解析它们。 但是主要的区别是包含网关可以选择多于一条顺序流,这和并行网关一样。包含网关的功能是基于进入和外出顺序流的:

    分支: 所有外出顺序流的条件都会被解析,结果为true的顺序流会以并行方式继续执行, 会为每个顺序流创建一个分支。

    汇聚: 所有并行分支到达包含网关,会进入等待, 直到每个包含流程token的进入顺序流的分支都到达。 这是与并行网关的最大不同。包含网关只会等待被选中执行了的进入顺序流。 在汇聚之后,流程会穿过包含网关继续执行。

    如果同一个包含节点拥有多个进入和外出顺序流, 它就会同时含有分支和汇聚功能。 这时,网关会先汇聚所有拥有流程token的进入顺序流, 再根据条件判断结果为true的外出顺序流,为它们生成多条并行分支。

    cbcc39f271d1bbdfd3ccab50667b9151.png

    四、基于事件网关

    基于事件网关允许根据事件判断流向。网关的每个外出顺序流都要连接到一个中间捕获事件。 当流程到达一个基于事件网关,网关会进入等待状态:会暂停执行。 与此同时,会为每个外出顺序流创建相对的事件订阅。

    注意基于事件网关的外出顺序流和普通顺序流不同。这些顺序流不会真的"执行"。 相反,它们让流程引擎去决定执行到基于事件网关的流程需要订阅哪些事件。 要考虑以下条件:

    1、基于事件网关必须有两条或以上外出顺序流。

    2、基于事件网关后,只能使用intermediateCatchEvent类型。 (activiti不支持基于事件网关后连接ReceiveTask。)

    3、连接到基于事件网关的intermediateCatchEvent只能有一条进入顺序流。

    efe3ebbcaffe24cb5e1611d09ec7754d.png
    展开全文
  • 这个春节的节奏就是:吃喝睡、吃喝睡,手机都懒的刷了。今天开始提振一下心情,整理一下思路,开始缓慢更新。这次补完一下之前的一篇《Flowable6.4-排他网关》,简单介绍一下并行网关和包容网关的...流程图如下:直...

    这个春节的节奏就是:吃喝睡、吃喝睡,手机都懒的刷了。今天开始提振一下心情,整理一下思路,开始缓慢更新。

    这次补完一下之前的一篇《Flowable6.4-排他网关》,简单介绍一下并行网关和包容网关的使用。

    首先,并行网关。

    顾名思义,就是通过这个网关,可以把一个顺序流分成多个顺序流来执行,然后再通过这个网关,把分出来的多条顺序流合并为一个顺序流继续执行。

    还是上个简单例子来演示一下,便于理解。流程图如下:

    直接启动该流程,完成开始后的第一个用户任务,数据库中的数据显示如下:

    可以看到,整个流程分为两条,一条会执行用户任务1->用户任务2这条线,一条会执行用户任务3这个条线。直接完成用户任务3,数据库中的数据显示如下:

    此时,只剩下用户任务1,用户任务3那条线处于等待当中,等待用户任务1这条线完成后,整个流程会流转至结束。

    如果为并行网关后的连接线增加条件,会发生什么呢?结果是,什么也不会发生,依然会创建两条记录:

    可见,并行网关不会执行连线的计算条件。

    那么,包容网关是什么呢?

    排他网关是只执行第一个符合条件的分支,并行网关是同时执行所有的分支。那么,包容网关同时执行所有符合条件的分支。

    比如下面这个流程图:

    如果没有为包容网关的出口连接线设置过任何条件,在经过包容网关后的效果其实等同于上面的并行网关,它会生成多个顺序流:

    如果加上条件的话,设置用户任务1和用户任务3的执行条件为True,用户任务2的执行条件为False,则只有用户任务1和用户任务3这两个分支会被执行:

    至此,排他网关、并行网关、包容网关的作用已经介绍完毕。如果有问题欢迎留言讨论。

    觉的不错?可以关注我的公众号↑↑↑

    展开全文
  • 回退操作是指,将流程退回到上一个节点,基本思路是通过审批历史服务HistoryService找到审批审批的上一节点,然后跟通用拒绝操作类似,将流程拨回到该节点,要注意的一个问题是,如果碰到并行审批,在并行线上回退...

    文章目录

    1. 说明

    回退操作是指,将流程退回到上一个节点,基本思路是通过审批历史服务HistoryService找到审批审批的上一节点,然后跟通用拒绝操作类似,将流程拨回到该节点,要注意的一个问题是,如果碰到并行审批,在并行线上回退应该回退到哪里呢?
    在这里插入图片描述
    如图,如果审批顺序为主管审批->上级领导审批->董事长审批,这时候总监审批执行回退操作,应该回退到哪个节点呢,显然不是董事长,因为这是两个并行互不干扰的审批,正常应该回退到主管审批这里,所以回退操作应该是基于execution的回退。

    2. 实现

    Bpmn文件:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" xmlns:tns="http://www.activiti.org/test" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" expressionLanguage="http://www.w3.org/1999/XPath" id="m1597729482723" name="" targetNamespace="http://www.activiti.org/test" typeLanguage="http://www.w3.org/2001/XMLSchema">
      <process id="parallel" isClosed="false" isExecutable="true" processType="None">
        <startEvent id="_2" name="开始"/>
        <userTask activiti:assignee="user1" activiti:exclusive="true" id="_3" name="项目经理审批"/>
        <parallelGateway gatewayDirection="Unspecified" id="_4" name="ParallelGateway"/>
        <userTask activiti:assignee="user2" activiti:exclusive="true" id="_5" name="上级领导审批"/>
        <userTask activiti:assignee="user3" activiti:exclusive="true" id="_6" name="董事长审批"/>
        <userTask activiti:assignee="user4" activiti:exclusive="true" id="_7" name="主管审批"/>
        <userTask activiti:assignee="user5" activiti:exclusive="true" id="_8" name="总监审批"/>
        <parallelGateway gatewayDirection="Unspecified" id="_9" name="ParallelGateway"/>
        <endEvent id="_10" name="结束"/>
        <sequenceFlow id="_11" sourceRef="_2" targetRef="_3"/>
        <sequenceFlow id="_12" sourceRef="_3" targetRef="_4"/>
        <sequenceFlow id="_13" sourceRef="_4" targetRef="_5"/>
        <sequenceFlow id="_14" sourceRef="_4" targetRef="_7"/>
        <sequenceFlow id="_15" sourceRef="_5" targetRef="_6"/>
        <sequenceFlow id="_16" sourceRef="_7" targetRef="_8"/>
        <sequenceFlow id="_17" sourceRef="_6" targetRef="_9"/>
        <sequenceFlow id="_18" sourceRef="_8" targetRef="_9"/>
        <sequenceFlow id="_19" sourceRef="_9" targetRef="_10"/>
      </process>
      <bpmndi:BPMNDiagram documentation="background=#000000;count=1;horizontalcount=1;orientation=0;width=842.4;height=1195.2;imageableWidth=832.4;imageableHeight=1185.2;imageableX=5.0;imageableY=5.0" id="Diagram-_1" name="New Diagram">
        <bpmndi:BPMNPlane bpmnElement="parallel">
          <bpmndi:BPMNShape bpmnElement="_2" id="Shape-_2">
            <omgdc:Bounds height="32.0" width="32.0" x="285.0" y="-10.0"/>
            <bpmndi:BPMNLabel>
              <omgdc:Bounds height="32.0" width="32.0" x="0.0" y="0.0"/>
            </bpmndi:BPMNLabel>
          </bpmndi:BPMNShape>
          <bpmndi:BPMNShape bpmnElement="_3" id="Shape-_3">
            <omgdc:Bounds height="55.0" width="85.0" x="260.0" y="60.0"/>
            <bpmndi:BPMNLabel>
              <omgdc:Bounds height="55.0" width="85.0" x="0.0" y="0.0"/>
            </bpmndi:BPMNLabel>
          </bpmndi:BPMNShape>
          <bpmndi:BPMNShape bpmnElement="_4" id="Shape-_4">
            <omgdc:Bounds height="32.0" width="32.0" x="285.0" y="145.0"/>
            <bpmndi:BPMNLabel>
              <omgdc:Bounds height="32.0" width="32.0" x="0.0" y="0.0"/>
            </bpmndi:BPMNLabel>
          </bpmndi:BPMNShape>
          <bpmndi:BPMNShape bpmnElement="_5" id="Shape-_5">
            <omgdc:Bounds height="55.0" width="85.0" x="190.0" y="265.0"/>
            <bpmndi:BPMNLabel>
              <omgdc:Bounds height="55.0" width="85.0" x="0.0" y="0.0"/>
            </bpmndi:BPMNLabel>
          </bpmndi:BPMNShape>
          <bpmndi:BPMNShape bpmnElement="_6" id="Shape-_6">
            <omgdc:Bounds height="55.0" width="85.0" x="190.0" y="405.0"/>
            <bpmndi:BPMNLabel>
              <omgdc:Bounds height="55.0" width="85.0" x="0.0" y="0.0"/>
            </bpmndi:BPMNLabel>
          </bpmndi:BPMNShape>
          <bpmndi:BPMNShape bpmnElement="_7" id="Shape-_7">
            <omgdc:Bounds height="55.0" width="85.0" x="335.0" y="265.0"/>
            <bpmndi:BPMNLabel>
              <omgdc:Bounds height="55.0" width="85.0" x="0.0" y="0.0"/>
            </bpmndi:BPMNLabel>
          </bpmndi:BPMNShape>
          <bpmndi:BPMNShape bpmnElement="_8" id="Shape-_8">
            <omgdc:Bounds height="55.0" width="85.0" x="335.0" y="405.0"/>
            <bpmndi:BPMNLabel>
              <omgdc:Bounds height="55.0" width="85.0" x="0.0" y="0.0"/>
            </bpmndi:BPMNLabel>
          </bpmndi:BPMNShape>
          <bpmndi:BPMNShape bpmnElement="_9" id="Shape-_9">
            <omgdc:Bounds height="32.0" width="32.0" x="290.0" y="530.0"/>
            <bpmndi:BPMNLabel>
              <omgdc:Bounds height="32.0" width="32.0" x="0.0" y="0.0"/>
            </bpmndi:BPMNLabel>
          </bpmndi:BPMNShape>
          <bpmndi:BPMNShape bpmnElement="_10" id="Shape-_10">
            <omgdc:Bounds height="32.0" width="32.0" x="290.0" y="645.0"/>
            <bpmndi:BPMNLabel>
              <omgdc:Bounds height="32.0" width="32.0" x="0.0" y="0.0"/>
            </bpmndi:BPMNLabel>
          </bpmndi:BPMNShape>
          <bpmndi:BPMNEdge bpmnElement="_13" id="BPMNEdge__13" sourceElement="_4" targetElement="_5">
            <omgdi:waypoint x="285.0" y="161.0"/>
            <omgdi:waypoint x="235.0" y="230.0"/>
            <omgdi:waypoint x="235.0" y="265.0"/>
            <bpmndi:BPMNLabel>
              <omgdc:Bounds height="0.0" width="0.0" x="0.0" y="0.0"/>
            </bpmndi:BPMNLabel>
          </bpmndi:BPMNEdge>
          <bpmndi:BPMNEdge bpmnElement="_12" id="BPMNEdge__12" sourceElement="_3" targetElement="_4">
            <omgdi:waypoint x="301.0" y="115.0"/>
            <omgdi:waypoint x="301.0" y="145.0"/>
            <bpmndi:BPMNLabel>
              <omgdc:Bounds height="0.0" width="0.0" x="0.0" y="0.0"/>
            </bpmndi:BPMNLabel>
          </bpmndi:BPMNEdge>
          <bpmndi:BPMNEdge bpmnElement="_15" id="BPMNEdge__15" sourceElement="_5" targetElement="_6">
            <omgdi:waypoint x="232.5" y="320.0"/>
            <omgdi:waypoint x="232.5" y="405.0"/>
            <bpmndi:BPMNLabel>
              <omgdc:Bounds height="0.0" width="0.0" x="0.0" y="0.0"/>
            </bpmndi:BPMNLabel>
          </bpmndi:BPMNEdge>
          <bpmndi:BPMNEdge bpmnElement="_14" id="BPMNEdge__14" sourceElement="_4" targetElement="_7">
            <omgdi:waypoint x="317.0" y="161.0"/>
            <omgdi:waypoint x="375.0" y="225.0"/>
            <omgdi:waypoint x="375.0" y="265.0"/>
            <bpmndi:BPMNLabel>
              <omgdc:Bounds height="0.0" width="0.0" x="0.0" y="0.0"/>
            </bpmndi:BPMNLabel>
          </bpmndi:BPMNEdge>
          <bpmndi:BPMNEdge bpmnElement="_17" id="BPMNEdge__17" sourceElement="_6" targetElement="_9">
            <omgdi:waypoint x="235.0" y="460.0"/>
            <omgdi:waypoint x="235.0" y="490.0"/>
            <omgdi:waypoint x="290.0" y="546.0"/>
            <bpmndi:BPMNLabel>
              <omgdc:Bounds height="0.0" width="0.0" x="0.0" y="0.0"/>
            </bpmndi:BPMNLabel>
          </bpmndi:BPMNEdge>
          <bpmndi:BPMNEdge bpmnElement="_16" id="BPMNEdge__16" sourceElement="_7" targetElement="_8">
            <omgdi:waypoint x="377.5" y="320.0"/>
            <omgdi:waypoint x="377.5" y="405.0"/>
            <bpmndi:BPMNLabel>
              <omgdc:Bounds height="0.0" width="0.0" x="0.0" y="0.0"/>
            </bpmndi:BPMNLabel>
          </bpmndi:BPMNEdge>
          <bpmndi:BPMNEdge bpmnElement="_19" id="BPMNEdge__19" sourceElement="_9" targetElement="_10">
            <omgdi:waypoint x="306.0" y="562.0"/>
            <omgdi:waypoint x="306.0" y="645.0"/>
            <bpmndi:BPMNLabel>
              <omgdc:Bounds height="0.0" width="0.0" x="0.0" y="0.0"/>
            </bpmndi:BPMNLabel>
          </bpmndi:BPMNEdge>
          <bpmndi:BPMNEdge bpmnElement="_18" id="BPMNEdge__18" sourceElement="_8" targetElement="_9">
            <omgdi:waypoint x="380.0" y="460.0"/>
            <omgdi:waypoint x="380.0" y="490.0"/>
            <omgdi:waypoint x="322.0" y="546.0"/>
            <bpmndi:BPMNLabel>
              <omgdc:Bounds height="0.0" width="0.0" x="0.0" y="0.0"/>
            </bpmndi:BPMNLabel>
          </bpmndi:BPMNEdge>
          <bpmndi:BPMNEdge bpmnElement="_11" id="BPMNEdge__11" sourceElement="_2" targetElement="_3">
            <omgdi:waypoint x="301.0" y="22.0"/>
            <omgdi:waypoint x="301.0" y="60.0"/>
            <bpmndi:BPMNLabel>
              <omgdc:Bounds height="0.0" width="0.0" x="0.0" y="0.0"/>
            </bpmndi:BPMNLabel>
          </bpmndi:BPMNEdge>
        </bpmndi:BPMNPlane>
      </bpmndi:BPMNDiagram>
    </definitions>
    

    测试类:

    package com.yb;
    
    import com.yb.utils.DeleteTaskCommand;
    import com.yb.utils.JumpCommand;
    import org.activiti.bpmn.model.FlowNode;
    import org.activiti.bpmn.model.Process;
    import org.activiti.engine.*;
    import org.activiti.engine.history.HistoricTaskInstance;
    import org.activiti.engine.repository.Deployment;
    import org.activiti.engine.runtime.ProcessInstance;
    import org.activiti.engine.task.Task;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.test.context.junit4.SpringRunner;
    
    import javax.annotation.Resource;
    import java.util.List;
    
    /**
     * @author liangjie@itcast.cn
     * @version 1.0
     * @date 2020/8/5
     */
    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class ActivitiJpaTest10 {
    
        @Resource
        private RepositoryService repositoryService;
        @Resource
        private RuntimeService runtimeService;
        @Resource
        private TaskService taskService;
        @Resource
        private HistoryService historyService;
    
        @Resource
        private ManagementService managementService;
        /**
         * 部署流程,测试征询
         */
        @Test
        public void repositoryDeploy(){
            Deployment deploy = repositoryService.createDeployment()
                    .addClasspathResource("processes/activiti_ParallelFallback.bpmn")
                    .addClasspathResource("processes/activiti_ParallelFallback.png")
                    .name("测试并行流程回退-1")
                    .deploy();
            System.out.println("部署ID:"+deploy.getId());
            System.out.println("部署名称"+deploy.getName());
        }
    
        /**
         * 发布流程
         */
        @Test
        public void runtimeRelease(){
    
            ProcessInstance pi = runtimeService.startProcessInstanceByKey("parallel");
            System.out.println("流程实例ID:"+pi.getId());
            System.out.println("流程定义ID:"+pi.getProcessDefinitionId());
        }
    
        /**
         * 查询及完成任务
         */
        @Test
        public void taskQueryComplete(){
            List<Task> list = taskService.createTaskQuery()
                    .taskAssignee("user1")
                    .list();
            for (Task task : list) {
                System.out.println("--------------------------------------------");
                System.out.println("任务ID:" + task.getId());
                System.out.println("任务名称:" + task.getName());
                System.out.println("任务创建时间:" + task.getCreateTime());
                System.out.println("任务委派人:" + task.getAssignee());
                System.out.println("流程实例ID:" + task.getProcessInstanceId());
                System.out.println("--------------------------------------------");
                taskService.complete(task.getId());
            }
        }
    
        /**
         * 流程回退
         */
        @Test
        public void taskBack(){
            Task task = taskService.createTaskQuery()
                    .taskAssignee("user4")
                    .singleResult();
    
            Process process = repositoryService.getBpmnModel(task.getProcessDefinitionId()).getMainProcess();
    
            FlowNode flowNode = (FlowNode) process.getFlowElement("_3");
    
            String s = managementService.executeCommand(new DeleteTaskCommand(task.getId()));
    
            managementService.executeCommand(new JumpCommand(flowNode,s));
    
        }
    
    
        /**
         * 根据流程实例id获取上一个节点的信息
         */
        @Test
        public void queryUpOneNode(){
            Task task = taskService.createTaskQuery()
                    .taskAssignee("user4")
                    .singleResult();
            List<HistoricTaskInstance> list = historyService.createHistoricTaskInstanceQuery()
                    .processInstanceId(task.getProcessInstanceId())
                    .orderByHistoricTaskInstanceEndTime()
                    .desc()
                    .list();
    
            HistoricTaskInstance taskInstance = null;
    
            if(!list.isEmpty()){
                if(list.get(0).getEndTime()!=null){
                    taskInstance=list.get(0);
                }
            }
            System.out.println(list.get(0).getEndTime());
            System.out.println(taskInstance.getTaskDefinitionKey()+"==="+taskInstance.getName());
        }
    }
    

    测试结果:
    当前测试流程:项目经理审批→(主管审批→撤回操作)→上级领导审批(不做审批)→(项目经理审批→提交,上级领导审批)→(上级领导审批,上级领导审批,主管审批))
    错误:
    并行流程,支线回退时,只删除了自己的任务,另外一个并行的任务依然存在,这样就会导致数据库中,act_ru_task表中数据会有多余的一条任务信息。
    在这里插入图片描述
    出现的问题:
    并行流程回退操作时,支线回退到主线,所有并行支线需要删除,否则会出现重复任务。

    解决:
    并行支线回退时,直接回退到项目经理审批节点,进行重新审批。

    	/**
         * 流程回退
         */
        @Test
        public void taskBack(){
            Task task = taskService.createTaskQuery()
                    .taskAssignee("user5")
                    .singleResult();
    
            List<Task> list = taskService.createTaskQuery()
                    .processInstanceId(task.getProcessInstanceId())
                    .list();
            Process process = repositoryService.getBpmnModel(task.getProcessDefinitionId()).getMainProcess();
            
            //通过项目经理审批节点id获取到流程
            FlowNode flowNode = (FlowNode) process.getFlowElement("_3");
            //删除当前所有任务
            String s = null;
            for (Task task1 : list) {
                DeleteTaskCommand deleteTaskCommand = new DeleteTaskCommand(task1.getId());
                s = managementService.executeCommand(deleteTaskCommand);
            } 
    //        String s = managementService.executeCommand(new DeleteTaskCommand(task.getProcessInstanceId()));
    //        managementService.executeCommand()
            //跳转到项目经理审批节点
            managementService.executeCommand(new JumpCommand(flowNode,s));
        }
    

    数据库:
    在这里插入图片描述

    展开全文
  • 可支持办文、办事及业务流程审批,实现会签、优先审批、顺序审批并行处理、分支、合并、条件、流程转接等多种流转机制;支持多版本流程管理,各版本独立存储;灵活的节点操作控制,可以控制在不同节点上做不同的...

    价值特性

    流程定义,灵活方便

    采用图形化界面,鼠标轻松拖曳完成流程自定义;

    可支持办文、办事及业务流程审批,实现会签、优先审批、顺序审批、并行处理、分支、合并、条件、流程转接等多种流转机制;

    支持多版本流程管理,各版本独立存储;

    灵活的节点操作控制,可以控制在不同节点上做不同的操作,包括批阅、协办、传阅、红头、转换、打印、缓办、清稿、退回、页面打印等。

    单据设计,轻松快捷

    提供操作简便、直观的表单编辑器,表单设计不需要专业开发语言就可以快速完成;

    根据表单的内容进行统计设置,并支持表单报表导出和支持结果转发协同功能;

    支持自定义word模板套打功能,通过系统的数据转换技术就可以将表单的数据插入到打印模板中,进行打印输出;

    使用页面插件技术,正文文档能够在线批注,正文模板选择、在线套红头、在线审批笔记留痕,正文多版本管理,同时也实现了正文从表单中动态提

    取字段,一键清稿功能;

    支持页面签批、电子签名和电子签章。

    流程监控,实时掌握

    通过流程监控办公系统,可以增加业务工作的透明度,提高工作效率;

    实现更好的业务过程管控,可以快速获取到事件的进程,缩短办理时间;

    清晰地划分出不同职责。

    多维报表,辅助决策系统提供报表在线设计工具,设计报表的样式,可以选择动态表单的字段进行输出,并且可以随时调整报表的格式,产生报表格式为Excel;

    提供从流程节点、任务度量,统计流程绩效;

    从组织、岗位、流程度量任务分布;

    从时间周期、流程分类多维度图形展示流程绩效。

    展开全文
  • 最近展示审批流需要展示并行审批的功能,于是开发了一个可以展示任意层级的流程图。 后台是activity开发的。 需要提供如下的数据结构: { //最顶层必须是一个串行任务 "taskType": 0, //0是 串行任务 2是并行...
  • 目录排他网关并行网关 排他网关 业务场景 某一家公司最近在给一个单位做一个财务审批的OA。具体需求是这样的:当部门申请的金额小于一万块的时候,财务部...我这个流程图就是模拟这个业务场景画的,第一个是money&l...
  • 图书出版流程

    2017-06-30 16:37:14
    步骤1.选题论证流程:填写论证信息-编辑部论证-发行部论证-出版社论证(转2步骤) 步骤2.选题申报流程:填写申报信息-总编办上报总署-集团...步骤5(并行)-封面设计流程:填写封面设计通知-领导审批(转6步骤) 步骤
  • 此时当“学生请假”任务节点完成之后,如下此时有两个任务,必须等到两个任务都完成才会走到“班主任审批”任务节点 如下 此时的执行对象是三个,当班长和副班长分支完成之后(整个流程还没结束)分支1和...
  • 专栏上一章简单介绍了通过判断...下面我们复制一个请假流程图:首先介绍怎么中间的叉号图,叉号即网关,所以找到右侧工具栏的gateway,改好后我们看三条判断的先,leave days&lt;3表示请假小于3天的走的流程,对...
  • ,"并行二"的任务审批通过,到达“汇总”节点,接着审批该节点,到达流程结束点,此时只是这个并行节点流转完毕,整个流程并未完成,还生效"并行一"的任务还在流转,需要等待所有并行流程都流...
  • 目录1 简介2 工时审批流程——活动基础2.1 基础语法2.2 判断的三种处理方式2.3 泳道/分区 Swimlane/Partition3 会签评审流程——活动进阶3.1 “并行”的活动3.2 工作产品如何表示——对象流3.3 活动的组织——...
  • Activiti并行网关

    千次阅读 2017-03-14 16:42:11
    在我上一篇博文上讲了 排他...重新画一个流程图取名 employeeMyProcess4.bpmn: 整体业务是: 员工发起请假申请——>需要项目组长、项目经理多同意审批——>才进入最好部门总监审批 ——>需要以上所有人同意
  • 流程中如果需要并行审批的话,我们可以使用并行网关来进行处理,例如下面的流程图: xml信息如下: <?xml version="1.0" encoding="UTF-8"?> <bpmn:definitions xmlns:bpmn=...
  • 绘制流程图:动态设置审批人,完成条件${(pass == 'no')||(nrOfCompletedInstances/nrOfInstances==1)} 添加表单字段控件FormProperty_29f662k-_!string-_!审批意见-_!请输入-_!s,需和前端约定,控件解析格式 ...
  • activiti会签多人审批(通过以及驳回)

    万次阅读 2018-08-09 08:54:20
    一、需求  用户发起审批后,需要经过 总经理 以及 财务部长 两人同时审批。两人通过极为通过,一人拒绝即为拒绝。拒绝后用户修改重新审批...流程图    2. 设置②用户任务    多实例类型:设置为并行,...
  • 多人并行会审,流程图如下: 2. 流程配置 Multi instance: Sequence 设置流程为串行还是并行处理。 Loop cardinality 设置节点的循环次数。 Collection 设置处理人集合。 Element variable 设置一个处理人...
  • 流程图(idea插件画的) 大致流程就是 用户提交请假, 如果小于等于3天的由部门经理审批, 多于3天的要总经理审批 流程图里对应的代理人分别是 提交申请 user1 部门经理 user2 总经理 user3 测试 启动流程 查看任务 ...
  • 工作流设计详解

    千次阅读 2019-05-21 11:20:12
    工作流 概念: ...按照业务规划流程图,根据流程图进行workflow的基础架构。统筹每个流程的流程编码FUNCTIONID以及业务类型BUSITYPE。最好每个类型表设计版本,以便新旧业务流程变动。 设计工作流活动表:lwa...
  • 转载工作流设计详解

    2019-12-27 16:06:16
    按照业务规划流程图,根据流程图进行workflow的基础架构。统筹每个流程的流程编码FUNCTIONID以及业务类型BUSITYPE。最好每个类型表设计版本,以便新旧业务流程变动。 设计工作流活动表:lwacti...
  • 构建学生请假审批流程 2.执行对象概念 3.判断流程实例状态 4.历史流程实例查询 5.历史活动查询 04 - Activiti流程变量 1.流程变量的概念 2.使用TaskService设置和获取流程变量 3.局部流程变量 4.使用...
  • activiti多实例设置(会签/或签)

    千次阅读 2019-12-01 00:18:53
    activiti多实例设置(会签/或签) 在审批流中会遇到会签/或签的情况,activiti本身就已经支持,通过多实例来实现...Multi-instance-type:多人审批方式 paraller 并行,Sequential 串行,多实例需设置未并行 Executi...
  • activiti5网关

    2016-02-19 18:42:00
     1.ParallelGeteway:并行网关(多人必须同时审批,比如说,开会的时候必须要全部员工都出席才能通过下一流程)  2.ExclusiveGateway排他网关(多人只能选择一人审批)  3.InclusiveGateway包含网关(集成了并行与排他...
  • 工作流操作-会签

    2020-06-10 11:10:58
    流程图 会签任务选择并行多实例。 办理人设置为流程变量assignee,这个变量名也是多实例集合中的元素变量。 多实例的配置: 此时部署流程,完成提交申请是需要如下操作: @Test public void completeTask(){ ...
  • ◦定时任务管理 通过配置以实现某时刻重复执行的系统任务,如配置每月最后一天进行库存清算任务,并且启动库存清算审批流程。 ◦系统日志管理 记录进入系统中的每个用户访问的每个功能 ◦数据源管理 可以设置多种...
  • 登录功能分析-时序+ \0 D3 j3 D; V │ 16.登录功能-创建组件(bean,mapper,service,controller) │ 17.登录功能-同步请求方式) B+ ?3 A S/ A │ 18.将代码提交到SVN │ ) H4 U& n2 P) M+ P7 \ ├─众筹项目-第03天...
  • .NET的极速开发框架

    2016-07-19 23:20:47
    .框架特点: (1)简单逻辑模块实现零代码编程,通过简单配置即可实现增、删、改、查、数据列表、...(21)增加对工作流的支持,可在线设计、配置流程,支持单行、并行审批,支持子流程、分流、合流,支持回退、指派
  • (21)增加对工作流的支持,可在线设计、配置流程,支持单行、并行审批,支持子流程、分流、合流,支持回退、指派 框架整体架构:   部分系统截图:   更多截图请参考作者博客:...
  • 文档审批,文档校审,合同评审流程,图纸校审流程,…… 整合了mindoc,实现了在线创作、查阅、分享、导入、导出电子书籍。 文件分享提取码。 一 特性: 后台预定义工程目录类型和分层级别,支持无限级;目录采用...

空空如也

空空如也

1 2
收藏数 28
精华内容 11
关键字:

并行审批流程图