helloworld.dbmn
<?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://www.activiti.org/test"> <process id="helloworld" name="helloworldProcess" isExecutable="true"> <startEvent id="startevent1" name="Start"></startEvent> <endEvent id="endevent1" name="End"></endEvent> <userTask id="usertask1" name="提交申请" activiti:assignee="张三"></userTask> <userTask id="usertask2" name="审批【部门经理】" activiti:assignee="李四"></userTask> <userTask id="usertask3" name="审批【总经理】" activiti:assignee="王五"></userTask> <sequenceFlow id="flow1" sourceRef="startevent1" targetRef="usertask1"></sequenceFlow> <sequenceFlow id="flow2" sourceRef="usertask1" targetRef="usertask2"></sequenceFlow> <sequenceFlow id="flow3" sourceRef="usertask2" targetRef="usertask3"></sequenceFlow> <sequenceFlow id="flow4" sourceRef="usertask3" targetRef="endevent1"></sequenceFlow> </process> <bpmndi:BPMNDiagram id="BPMNDiagram_helloworld"> <bpmndi:BPMNPlane bpmnElement="helloworld" id="BPMNPlane_helloworld"> <bpmndi:BPMNShape bpmnElement="startevent1" id="BPMNShape_startevent1"> <omgdc:Bounds height="35.0" width="35.0" x="610.0" y="30.0"></omgdc:Bounds> </bpmndi:BPMNShape> <bpmndi:BPMNShape bpmnElement="endevent1" id="BPMNShape_endevent1"> <omgdc:Bounds height="35.0" width="35.0" x="610.0" y="600.0"></omgdc:Bounds> </bpmndi:BPMNShape> <bpmndi:BPMNShape bpmnElement="usertask1" id="BPMNShape_usertask1"> <omgdc:Bounds height="55.0" width="105.0" x="575.0" y="150.0"></omgdc:Bounds> </bpmndi:BPMNShape> <bpmndi:BPMNShape bpmnElement="usertask2" id="BPMNShape_usertask2"> <omgdc:Bounds height="55.0" width="105.0" x="575.0" y="300.0"></omgdc:Bounds> </bpmndi:BPMNShape> <bpmndi:BPMNShape bpmnElement="usertask3" id="BPMNShape_usertask3"> <omgdc:Bounds height="55.0" width="105.0" x="575.0" y="470.0"></omgdc:Bounds> </bpmndi:BPMNShape> <bpmndi:BPMNEdge bpmnElement="flow1" id="BPMNEdge_flow1"> <omgdi:waypoint x="627.0" y="65.0"></omgdi:waypoint> <omgdi:waypoint x="627.0" y="150.0"></omgdi:waypoint> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge bpmnElement="flow2" id="BPMNEdge_flow2"> <omgdi:waypoint x="627.0" y="205.0"></omgdi:waypoint> <omgdi:waypoint x="627.0" y="300.0"></omgdi:waypoint> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge bpmnElement="flow3" id="BPMNEdge_flow3"> <omgdi:waypoint x="627.0" y="355.0"></omgdi:waypoint> <omgdi:waypoint x="627.0" y="470.0"></omgdi:waypoint> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge bpmnElement="flow4" id="BPMNEdge_flow4"> <omgdi:waypoint x="627.0" y="525.0"></omgdi:waypoint> <omgdi:waypoint x="627.0" y="600.0"></omgdi:waypoint> </bpmndi:BPMNEdge> </bpmndi:BPMNPlane> </bpmndi:BPMNDiagram> </definitions>
helloworld.png
第一个测试小程序helloworld
package com.xingshang.helloworld; import java.util.List; import org.activiti.engine.ProcessEngine; import org.activiti.engine.ProcessEngines; import org.activiti.engine.repository.Deployment; import org.activiti.engine.runtime.ProcessInstance; import org.activiti.engine.task.Task; import org.junit.Test; public class HelloWorld { //工作引擎 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); /** * 部署流程定义 */ @Test public void deploymentProcessDefinition(){ Deployment deployment = processEngine.getRepositoryService()//与流程定义和部署相关的service .createDeployment()//创建一个部署对象 .name("HelloWorld入门程序")//添加部署的名字 .addClasspathResource("diagrams/HelloWorld.bpmn")//从classpath下的资源中加载,一次只能加载一个文件 .addClasspathResource("diagrams/HelloWorld.png")//从classpath下的资源中加载,一次只能加载一个文件 .deploy();//完成部署 System.out.println("部署ID: " + deployment.getId());//1 System.out.println("部署名称: " + deployment.getName());//HelloWorld入门程序 } /** * 启动流程实例 */ @Test public void startProcessInstance(){ //流程定义的key String processDefinitionKey = "helloworld"; ProcessInstance pi = processEngine.getRuntimeService()//与正在执行的流程实例和执行对象相关的service .startProcessInstanceByKey(processDefinitionKey);//使用流程定义的key启动流程实例,key对应HelloWorld.bpmn文件中id的属性值,使用key值启动,默认是按照最新版本的流程定义启动 System.out.println("流程实例ID: " + pi.getId());//流程实例ID 101 System.out.println("流程定义ID: " + pi.getProcessDefinitionId());//流程定义ID helloworld:1:4 } /** * 查询当前人的个人任务 */ @Test public void findMyPersonalTask(){ String assignee = "张三"; List<Task> list = processEngine.getTaskService()//与正在执行的任务管理相关的Sercice .createTaskQuery()//创建任务查询对象 .taskAssignee(assignee)//指定个人任务查询,指定办理人 .list(); if(list != null && list.size() > 0){ for(Task task : list){ System.out.println("任务ID: " + task.getId()); //104 System.out.println("任务名称: " + task.getName());//提交申请 System.out.println("任务的创建时间: " + task.getCreateTime());// Mon Dec 11 10:20:46 CST 2017 System.out.println("任务的办理人:" + task.getAssignee());//张三 System.out.println("流程实例ID: " + task.getProcessInstanceId());//101 System.out.println("执行对象ID: " + task.getExecutionId());//101 System.out.println("流程定义ID: " + task.getProcessDefinitionId());//helloworld:1:4 } } } /** * 完成我的任务 */ @Test public void completeMyPersonalTask(){ String taskId = "104"; processEngine.getTaskService()//与正在执行的任务管理相关的Sercice .complete(taskId); System.out.println("任务完成: 任务Id: " + taskId); } }