本文以一个简单的请假流程为例,分析在流程在流转的过程中,Activiti相关表数据的变化,从而深入学习Activiti。
流程图如下:
<?xml version="1.0" encoding="UTF-8"?> <definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" 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" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://activiti.org/bpmn20" id="review-definitions"> <process id="sysTakeLeave" name="Review And Approve Activiti Process" isExecutable="true"> <startEvent id="startevent1" name="Start"> <extensionElements> <activiti:formProperty id="staffId" name="员工" type="string"></activiti:formProperty> </extensionElements> </startEvent> <userTask id="applyLeaveTask" name="请假申请" activiti:candidateUsers="${staffId}"> <extensionElements> <activiti:formProperty id="reason" name="原因" type="string" required="true"></activiti:formProperty> </extensionElements> </userTask> <sequenceFlow id="flow1" sourceRef="startevent1" targetRef="applyLeaveTask"></sequenceFlow> <exclusiveGateway id="exclusivegateway1" name="审批是否通过" default="approved"></exclusiveGateway> <sequenceFlow id="flow2" sourceRef="reviewLeaveTask" targetRef="exclusivegateway1"></sequenceFlow> <endEvent id="endevent1" name="End"></endEvent> <sequenceFlow id="approved" name="审批通过" sourceRef="exclusivegateway1" targetRef="endevent1"></sequenceFlow> <sequenceFlow id="refused" name="拒绝" sourceRef="exclusivegateway1" targetRef="startevent1"> <conditionExpression xsi:type="tFormalExpression"><![CDATA[${!result}]]></conditionExpression> </sequenceFlow> <userTask id="reviewLeaveTask" name="领导审批" activiti:candidateUsers="${leaveService.getManagerIds(staffId)}"> <extensionElements> <activiti:formProperty id="managerId" name="经理" type="string" required="true"></activiti:formProperty> <activiti:formProperty id="result" name="结果" type="boolean"> <activiti:value id="true" name="同意"></activiti:value> <activiti:value id="false" name="不同意"></activiti:value> </activiti:formProperty> </extensionElements> </userTask> <sequenceFlow id="flow5" sourceRef="applyLeaveTask" targetRef="reviewLeaveTask"></sequenceFlow> </process> <bpmndi:BPMNDiagram id="BPMNDiagram_sysTakeLeave"> <bpmndi:BPMNPlane bpmnElement="sysTakeLeave" id="BPMNPlane_sysTakeLeave"> <bpmndi:BPMNShape bpmnElement="startevent1" id="BPMNShape_startevent1"> <omgdc:Bounds height="35.0" width="35.0" x="90.0" y="151.0"></omgdc:Bounds> </bpmndi:BPMNShape> <bpmndi:BPMNShape bpmnElement="applyLeaveTask" id="BPMNShape_applyLeaveTask"> <omgdc:Bounds height="55.0" width="105.0" x="210.0" y="141.0"></omgdc:Bounds> </bpmndi:BPMNShape> <bpmndi:BPMNShape bpmnElement="exclusivegateway1" id="BPMNShape_exclusivegateway1"> <omgdc:Bounds height="40.0" width="40.0" x="520.0" y="148.0"></omgdc:Bounds> </bpmndi:BPMNShape> <bpmndi:BPMNShape bpmnElement="endevent1" id="BPMNShape_endevent1"> <omgdc:Bounds height="35.0" width="35.0" x="605.0" y="151.0"></omgdc:Bounds> </bpmndi:BPMNShape> <bpmndi:BPMNShape bpmnElement="reviewLeaveTask" id="BPMNShape_reviewLeaveTask"> <omgdc:Bounds height="55.0" width="105.0" x="370.0" y="141.0"></omgdc:Bounds> </bpmndi:BPMNShape> <bpmndi:BPMNEdge bpmnElement="flow1" id="BPMNEdge_flow1"> <omgdi:waypoint x="125.0" y="168.0"></omgdi:waypoint> <omgdi:waypoint x="210.0" y="168.0"></omgdi:waypoint> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge bpmnElement="flow2" id="BPMNEdge_flow2"> <omgdi:waypoint x="475.0" y="168.0"></omgdi:waypoint> <omgdi:waypoint x="52