根据activiti官方提供的 编写
1.财务部门填写月财务报告
2.股东审核月财务审计报告
流程图:
流程配置:
<?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: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"> <process id="financialReport" name="Monthly financial report reminder process"> <startEvent id="startevent1" name="月财务报告审核开始"></startEvent> <!-- 采用用户组为accountancy编写财务报告 --> <userTask id="usertask1" name="财务编写月财务报告" activiti:candidateGroups="accountancy"></userTask> <userTask id="usertask2" name="股东审核月财务审计报告" activiti:candidateGroups="management"></userTask> <endEvent id="endevent1" name="月财务报告审核结束"></endEvent> <sequenceFlow id="flow1" name="" sourceRef="startevent1" targetRef="usertask1"></sequenceFlow> <sequenceFlow id="flow2" name="" sourceRef="usertask1" targetRef="usertask2"></sequenceFlow> <sequenceFlow id="flow3" name="" sourceRef="usertask2" targetRef="endevent1"></sequenceFlow> </process> <bpmndi:BPMNDiagram id="BPMNDiagram_financialReport"> <bpmndi:BPMNPlane bpmnElement="financialReport" id="BPMNPlane_financialReport"> <bpmndi:BPMNShape bpmnElement="startevent1" id="BPMNShape_startevent1"> <omgdc:Bounds height="35" width="35" x="30" y="200"></omgdc:Bounds> </bpmndi:BPMNShape> <bpmndi:BPMNShape bpmnElement="usertask1" id="BPMNShape_usertask1"> <omgdc:Bounds height="55" width="105" x="125" y="190"></omgdc:Bounds> </bpmndi:BPMNShape> <bpmndi:BPMNShape bpmnElement="usertask2" id="BPMNShape_usertask2"> <omgdc:Bounds height="55" width="105" x="290" y="190"></omgdc:Bounds> </bpmndi:BPMNShape> <bpmndi:BPMNShape bpmnElement="endevent1" id="BPMNShape_endevent1"> <omgdc:Bounds height="35" width="35" x="455" y="200"></omgdc:Bounds> </bpmndi:BPMNShape> <bpmndi:BPMNEdge bpmnElement="flow1" id="BPMNEdge_flow1"> <omgdi:waypoint x="65" y="217"></omgdi:waypoint> <omgdi:waypoint x="125" y="217"></omgdi:waypoint> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge bpmnElement="flow2" id="BPMNEdge_flow2"> <omgdi:waypoint x="230" y="217"></omgdi:waypoint> <omgdi:waypoint x="290" y="217"></omgdi:waypoint> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge bpmnElement="flow3" id="BPMNEdge_flow3"> <omgdi:waypoint x="395" y="217"></omgdi:waypoint> <omgdi:waypoint x="455" y="217"></omgdi:waypoint> </bpmndi:BPMNEdge> </bpmndi:BPMNPlane> </bpmndi:BPMNDiagram> </definitions>
编码如下:
package com.easyway.spring.activiti; import java.util.List; import org.activiti.engine.HistoryService; import org.activiti.engine.ProcessEngine; import org.activiti.engine.ProcessEngineConfiguration; import org.activiti.engine.RepositoryService; import org.activiti.engine.RuntimeService; import org.activiti.engine.TaskService; import org.activiti.engine.history.HistoricProcessInstance; import org.activiti.engine.task.Task; /** * 根据activiti官方提供的 编写 * 1.财务部门填写月财务报告 * 2.股东审核月财务审计报告 * * * activiti提供的财务报告审核 * <!-- 采用用户组为accountancy编写财务报告 --> * <userTask id="usertask1" name="财务编写月财务报告" activiti:candidateGroups="accountancy"></userTask> * <!-- 采用用户组为management编写财务报告 --> * <userTask id="usertask2" name="股东审核月财务审计报告" activiti:candidateGroups="management"></userTask> * * 备注: * 默认的两个用户: * <pre> * 用户名 密码 用户组 Table 2.1. The demo users UserId Password Security roles kermit kermit admin gonzo gonzo manager fozzie fozzie user * </pre> * * @author longgangbai * * 2011-12-18 下午04:08:46 */ public class CustomFinancialReportActiviti { public static void main(String[] args) { // Create Activiti process engine //创建一个流程引擎对象 // ProcessEngine processEngine = ProcessEngineConfiguration // .createStandaloneProcessEngineConfiguration() // .buildProcessEngine(); //创建一个流程引擎对象(为了便于多册测试,修改 name="databaseSchemaUpdate" value="create-drop" 默认为ture) ProcessEngine processEngine=ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml").buildProcessEngine(); // Get Activiti services //获取流程相关的服务 RepositoryService repositoryService = processEngine.getRepositoryService(); RuntimeService runtimeService = processEngine.getRuntimeService(); // Deploy the process definition //部署相关的流程配置 repositoryService.createDeployment() .addClasspathResource("diagrams/financialReport.bpmn20.xml") .deploy(); // Start a process instance //获取流程实例 String procId = runtimeService.startProcessInstanceByKey("financialReport").getId(); // Get the first task TaskService taskService = processEngine.getTaskService(); //获取accountancy组可能要操作的任务 List<Task> tasks = taskService.createTaskQuery().taskCandidateGroup("accountancy").list(); for (Task task : tasks) { System.out.println("Following task is available for accountancy group: " + task.getName()); //设置fozzie代办 claim it taskService.claim(task.getId(), "fozzie"); } // Verify Fozzie can now retrieve the task //审核fozzie当前的获取的任务数量 tasks = taskService.createTaskQuery().taskAssignee("fozzie").list(); for (Task task : tasks) { System.out.println("Task for fozzie: " + task.getName()); // Complete the task //设置forzze完毕 taskService.complete(task.getId()); } System.out.println("Number of tasks for fozzie: " + taskService.createTaskQuery().taskAssignee("fozzie").count()); // Retrieve and claim the second task //管理者审核报告并让kermit代办 tasks = taskService.createTaskQuery().taskCandidateGroup("management").list(); for (Task task : tasks) { System.out.println("Following task is available for accountancy group: " + task.getName()); taskService.claim(task.getId(), "kermit"); } // Completing the second task ends the process //完成报告 for (Task task : tasks) { taskService.complete(task.getId()); } // verify that the process is actually finished //查询流程实例完成事件 HistoryService historyService = processEngine.getHistoryService(); HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery().processInstanceId(procId).singleResult(); System.out.println("Process instance end time: " + historicProcessInstance.getEndTime()); } }
运行结果如下:
信息: ProcessEngine default created 2011-12-18 17:06:00 org.activiti.engine.impl.jobexecutor.JobAcquisitionThread run 信息: JobAcquisitionThread starting to acquire jobs 2011-12-18 17:06:00 org.activiti.engine.impl.bpmn.deployer.BpmnDeployer deploy 信息: Processing resource diagrams/financialReport.bpmn20.xml 2011-12-18 17:06:01 org.activiti.engine.impl.bpmn.parser.BpmnParse parseDefinitionsAttributes 信息: XMLSchema currently not supported as typeLanguage 2011-12-18 17:06:01 org.activiti.engine.impl.bpmn.parser.BpmnParse parseDefinitionsAttributes 信息: XPath currently not supported as expressionLanguage Following task is available for accountancy group: 财务编写月财务报告 Task for fozzie: 财务编写月财务报告 Number of tasks for fozzie: 0 Following task is available for accountancy group: 股东审核月财务审计报告 Process instance end time: Sun Dec 18 17:06:01 CST 2011