# 加签案例

会签的概念是多实例用户任务适用于需要多个人同时处理同一个任务的场景。
所谓加签,是指在会签的基础上临时新增一个或多个审批人的功能,其目的是满足需临时新增审批人的场景需求。
例如,财务流程通常由财务经理进行审核,在某些情况下,财务经理难以决策时,可以使用会签加签的操作临时增加财务总监共同决策。

# 顺序加签

# 需求描述

我们以三国为主题,假设蜀国是一个组织机构。里面设置有将军,军师,主公三种角色。假设关羽提交一个请假申请,需要两个军师依次审核,首先是诸葛亮进行审批,接着庞统进行审批,刘备进行终审。(军师在审批的过程中可以临时追加审批人员)

# 设计流程

点击节点的右侧,选择小扳手,将节点设置为用户任务(userTask)节点,并且按照下面红色方框设置节点属性。
foo

设置申请节点的指定用户和内置表单字段。

foo

设置多实例审批节点,注意红框内容,我们设置了一个集合的用户进行审批。

foo

设置主公节点审批的参数配置。

# XML内容

<?xml version="1.0" encoding="UTF-8"?>
<bpmn:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:activiti="http://activiti.org/bpmn" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="Definitions_1" targetNamespace="http://bpmn.io/schema/bpmn">
  <bpmn:process id="Process_serial_co_signature_plus" name="串行会签" isExecutable="true">
    <bpmn:startEvent id="StartEvent_1">
      <bpmn:extensionElements />
      <bpmn:outgoing>Flow_08i5xz5</bpmn:outgoing>
    </bpmn:startEvent>
    <bpmn:userTask id="Activity_1ao6abq" name="军师会签" activiti:assignee="${guide}">
      <bpmn:extensionElements>
        <activiti:formData>
          <activiti:formField id="comment" label="评论" type="string" />
          <activiti:formField id="imageUrl" label="图片" type="string" />
        </activiti:formData>
      </bpmn:extensionElements>
      <bpmn:incoming>Flow_17sofv2</bpmn:incoming>
      <bpmn:outgoing>Flow_1swwaeb</bpmn:outgoing>
      <bpmn:multiInstanceLoopCharacteristics isSequential="true" activiti:collection="${guideList}" activiti:elementVariable="guide" />
    </bpmn:userTask>
    <bpmn:sequenceFlow id="Flow_1swwaeb" sourceRef="Activity_1ao6abq" targetRef="Activity_0ea9eis" />
    <bpmn:userTask id="Activity_0ea9eis" name="主公审批" activiti:assignee="${leader}">
      <bpmn:extensionElements>
        <activiti:formData>
          <activiti:formField id="comment" label="评论" type="string" />
          <activiti:formField id="imageUrl" label="图片" type="string" />
        </activiti:formData>
      </bpmn:extensionElements>
      <bpmn:incoming>Flow_1swwaeb</bpmn:incoming>
      <bpmn:outgoing>Flow_08nxto9</bpmn:outgoing>
    </bpmn:userTask>
    <bpmn:endEvent id="Event_0tuzhsx">
      <bpmn:incoming>Flow_08nxto9</bpmn:incoming>
    </bpmn:endEvent>
    <bpmn:sequenceFlow id="Flow_08nxto9" sourceRef="Activity_0ea9eis" targetRef="Event_0tuzhsx" />
    <bpmn:sequenceFlow id="Flow_08i5xz5" sourceRef="StartEvent_1" targetRef="Activity_1u6fknq" />
    <bpmn:userTask id="Activity_1u6fknq" name="提交申请" activiti:assignee="${general}">
      <bpmn:extensionElements>
        <activiti:formData>
          <activiti:formField id="reason" label=" 请假理由" type="string" />
          <activiti:formField id="days" label=" 请假天数" type="long" defaultValue="0" />
          <activiti:formField id="type" label="请假类型" type="long" />
        </activiti:formData>
      </bpmn:extensionElements>
      <bpmn:incoming>Flow_08i5xz5</bpmn:incoming>
      <bpmn:outgoing>Flow_17sofv2</bpmn:outgoing>
    </bpmn:userTask>
    <bpmn:sequenceFlow id="Flow_17sofv2" sourceRef="Activity_1u6fknq" targetRef="Activity_1ao6abq" />
  </bpmn:process>
</bpmn:definitions>

# 演示操作

Activiti,Flowable,Camunda均可体验,立即体验 (opens new window)

foo

使用关羽登陆演示站,找到串行会签菜单,提交一个请假申请。

foo

使用诸葛亮登陆演示站,找到待办任务菜单,并进行加签操作。

foo

接上一步,此时可以看到诸葛亮这个节点下已经将加签动作的信息追加进来。

foo

使用诸葛亮登陆演示站,找到待办任务菜单,并进行审批同意操作。操作信息聚合在用户下方。

foo

使用庞统登陆演示站,找到待办任务菜单,并进行审批同意操作。此时已经流转到加签用户郭嘉上。

foo

使用郭嘉登陆演示站,找到待办任务菜单,并进行审批同意操作。

以上就是在串行会签的场景进行了加签操作, 感兴趣的可以在线体验,访问: JeecgFlow (opens new window)

# 并行加签

接下来,演示并行多实例场景下实现加签的流程。

# 需求描述

我们以三国为主题,假设蜀国是一个组织机构。里面设置有将军,军师,主公三种角色。假设关羽提交一个请假申请,需要两个军师诸葛亮,庞统同时审批,刘备进行终审。(军师在审批的过程中可以临时追加审批人员)

# 设计流程

点击节点的右侧,选择小扳手,将节点设置为用户任务(userTask)节点,并且按照下面红色方框设置节点属性。
foo

设置申请节点的指定用户和内置表单字段。

foo

设置多实例审批节点,注意红框内容,我们设置了一个集合的用户进行审批。

foo

设置主公节点审批的参数配置。

# XML内容

activiti工作流引擎的文件

<?xml version="1.0" encoding="UTF-8"?>
<bpmn:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:activiti="http://activiti.org/bpmn" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="Definitions_1" targetNamespace="http://bpmn.io/schema/bpmn">
  <bpmn:process id="Process_parallel_signature" name="并行会签" isExecutable="true">
    <bpmn:startEvent id="StartEvent_1">
      <bpmn:outgoing>Flow_03ekrgt</bpmn:outgoing>
    </bpmn:startEvent>
    <bpmn:sequenceFlow id="Flow_03ekrgt" sourceRef="StartEvent_1" targetRef="Activity_0kw63a3" />
    <bpmn:userTask id="Activity_0kw63a3" name="提交申请" activiti:assignee="${general}">
      <bpmn:extensionElements>
        <activiti:formData>
          <activiti:formField id="textValue" label="文本" type="string" />
          <activiti:formField id="numValue" label="数字" type="long" />
        </activiti:formData>
      </bpmn:extensionElements>
      <bpmn:incoming>Flow_03ekrgt</bpmn:incoming>
      <bpmn:outgoing>Flow_08fv1t0</bpmn:outgoing>
    </bpmn:userTask>
    <bpmn:sequenceFlow id="Flow_08fv1t0" sourceRef="Activity_0kw63a3" targetRef="Activity_0i3ty5m" />
    <bpmn:userTask id="Activity_0i3ty5m" name="军师会签" activiti:assignee="${guide}">
      <bpmn:extensionElements>
        <activiti:formData>
          <activiti:formField id="comment" label="评论" type="string" />
          <activiti:formField id="imageUrl" label="图片" type="string" />
        </activiti:formData>
      </bpmn:extensionElements>
      <bpmn:incoming>Flow_08fv1t0</bpmn:incoming>
      <bpmn:outgoing>Flow_1s1312l</bpmn:outgoing>
      <bpmn:multiInstanceLoopCharacteristics activiti:collection="${guideList}" activiti:elementVariable="guide" />
    </bpmn:userTask>
    <bpmn:sequenceFlow id="Flow_1s1312l" sourceRef="Activity_0i3ty5m" targetRef="Activity_0bqfyz9" />
    <bpmn:userTask id="Activity_0bqfyz9" name="主公审批" activiti:assignee="${leader}">
      <bpmn:extensionElements>
        <activiti:formData>
          <activiti:formField id="comment" label="评论" type="string" />
          <activiti:formField id="imageUrl" label="图片" type="string" />
        </activiti:formData>
      </bpmn:extensionElements>
      <bpmn:incoming>Flow_1s1312l</bpmn:incoming>
      <bpmn:outgoing>Flow_1be8hpj</bpmn:outgoing>
    </bpmn:userTask>
    <bpmn:endEvent id="Event_1ktotjy">
      <bpmn:incoming>Flow_1be8hpj</bpmn:incoming>
    </bpmn:endEvent>
    <bpmn:sequenceFlow id="Flow_1be8hpj" sourceRef="Activity_0bqfyz9" targetRef="Event_1ktotjy" />
  </bpmn:process>
  <bpmndi:BPMNDiagram id="BPMNDiagram_1">
    <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="Process_parallel_signature">
      <bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">
        <dc:Bounds x="173" y="102" width="36" height="36" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Activity_0fr6gx9_di" bpmnElement="Activity_0kw63a3">
        <dc:Bounds x="260" y="80" width="100" height="80" />
        <bpmndi:BPMNLabel />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Activity_1vjnyn0_di" bpmnElement="Activity_0i3ty5m">
        <dc:Bounds x="420" y="80" width="100" height="80" />
        <bpmndi:BPMNLabel />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Activity_1wiqx2g_di" bpmnElement="Activity_0bqfyz9">
        <dc:Bounds x="580" y="80" width="100" height="80" />
        <bpmndi:BPMNLabel />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="Event_1ktotjy_di" bpmnElement="Event_1ktotjy">
        <dc:Bounds x="742" y="102" width="36" height="36" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNEdge id="Flow_03ekrgt_di" bpmnElement="Flow_03ekrgt">
        <di:waypoint x="209" y="120" />
        <di:waypoint x="260" y="120" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_08fv1t0_di" bpmnElement="Flow_08fv1t0">
        <di:waypoint x="360" y="120" />
        <di:waypoint x="420" y="120" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_1s1312l_di" bpmnElement="Flow_1s1312l">
        <di:waypoint x="520" y="120" />
        <di:waypoint x="580" y="120" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="Flow_1be8hpj_di" bpmnElement="Flow_1be8hpj">
        <di:waypoint x="680" y="120" />
        <di:waypoint x="742" y="120" />
      </bpmndi:BPMNEdge>
    </bpmndi:BPMNPlane>
  </bpmndi:BPMNDiagram>
</bpmn:definitions>

# 演示操作

可以访问JeecgFlow (opens new window)进行在线体验

foo

使用关羽或张飞的账号登陆系统,找到并行会签,发起流程。

foo

发起之后会看到流程已经流转到诸葛亮,庞统进行审批

foo

使用诸葛亮或者庞统账号登陆系统,找到待办任务菜单,在详情下方找到更多,进行加签操作。

foo

填写给谁加签,加签意见。 这里选择了郭嘉。

foo

此时可以看到流程详情当中出现了加签的操作记录,并且郭嘉也加入了审批当中。

foo

所有的用户都进行了同意的操作,此时可以看到审批是正常进行的。

foo

继续关羽或张飞的账号进行登陆,找到发起的流程,点击预览, 会看到在军师审批节点详情中出现了三个人的操作记录。

点击JeecgFlow (opens new window)立即体验