Activiti搭建
前期准备:
JDK+Eclipse+Tomcat+Maven的安装与配置
参考:http://blog.csdn.net/zhshulin/article/details/30779873
创建一个Maven项目来配置环境
参考:http://blog.csdn.net/zhshulin/article/details/37921705
1,导入activiti包文件
1 <activiti-version>5.18.0</activiti-version>
1 <!-- activiti依赖包 -->
2 <dependency>
3 <groupId>org.activiti</groupId>
4 <artifactId>activiti-engine</artifactId>
5 <version>${activiti-version}</version>
6 </dependency>
7 <dependency>
8 <groupId>org.activiti</groupId>
9 <artifactId>activiti-spring</artifactId>
10 <version>${activiti-version}</version>
11 </dependency>
12 <dependency>
13 <groupId>org.activiti</groupId>
14 <artifactId>activiti-bpmn-converter</artifactId>
15 <version>${activiti-version}</version>
16 </dependency>
17 <dependency>
18 <groupId>org.activiti</groupId>
19 <artifactId>activiti-bpmn-model</artifactId>
20 <version>${activiti-version}</version>
21 </dependency>
22 <dependency>
23 <groupId>org.activiti</groupId>
24 <artifactId>activiti-bpmn-layout</artifactId>
25 <version>${activiti-version}</version>
26 </dependency>
2、 eclipse安装activiti-designer插件
打开eclipse软件,然后点击菜单栏的help选项,选择install New Software,示例如下:
出现如下对话框:
点击添加【Add】按钮,出现如下对话框
输入如下地址:
Location:http://activiti.org/designer/update/
Name:Activiti
点击OK按钮出现如下窗体:
选择Activiti BPMN Desisner,然后一直选择下一步,直到出现如下窗体:
如果出现这个窗体,就表明eclipse正在给您下载相应的插件,但是这个办法是在有网的情况下,而且会比较慢,你得耐心等待,
当然还有一个简单的办法,就是我们将下载好的插件放到指定文件夹下。
如果能出现,就证明我们的工作流插件就算是安装成功了。
3、spring-activiti.xml配置文件
建立spring-activiti.xml配置文件
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> 5 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> 6 <property name="driverClassName" value="com.mysql.jdbc.Driver" /> 7 <property name="url" value="jdbc:mysql://localhost:3306/数据库名称" /> 8 <property name="username" value="用户名" /> 9 <property name="password" value="密码" /> 10 <property name="defaultAutoCommit" value="false" /> 11 </bean> 12 13 <bean id="processEngineConfiguration" 14 class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration"> 15 <property name="dataSource" ref="dataSource" /> 16 <property name="databaseType" value="mysql"/> 17 <property name="databaseSchemaUpdate" value="true" /> 18 <property name="jobExecutorActivate" value="false" /> 19 </bean> 20 21 <bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean"> 22 <property name="processEngineConfiguration" ref="processEngineConfiguration" /> 23 </bean> 24 25 <bean id="repositoryService" factory-bean="processEngine" factory-method="getRepositoryService" /> 26 <bean id="runtimeService" factory-bean="processEngine" factory-method="getRuntimeService" /> 27 <bean id="taskService" factory-bean="processEngine" factory-method="getTaskService" /> 28 <bean id="historyService" factory-bean="processEngine" factory-method="getHistoryService" /> 29 <bean id="formService" factory-bean="processEngine" factory-method="getFormService" /> 30 <bean id="identityService" factory-bean="processEngine" factory-method="getIdentityService" /> 31 32 <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 33 <property name="dataSource" ref="dataSource" /> 34 </bean> 35 </beans>
4、生成activiti数据表
BaseTestCase.java文件,运行
1 package org.projMgr.TestCase;
2
3 import org.junit.Test;
4 import org.junit.runner.RunWith;
5 import org.springframework.test.context.ContextConfiguration;
6 import org.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextTests;
7 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
8 import org.springframework.test.context.transaction.TransactionConfiguration;
9 import org.springframework.transaction.annotation.Transactional;
10
11
12
13 @RunWith(SpringJUnit4ClassRunner.class)
14 @ContextConfiguration({"classpath:spring-activiti.xml"})
15 @TransactionConfiguration(transactionManager="transactionManager", defaultRollback=false)
16 @Transactional
17 public class BaseTestCase extends AbstractTransactionalJUnit4SpringContextTests{
18
19 @Test
20 public void test(){
21 System.out.println ("通导test");
22 }
23
24 }
运行结果:
1 SLF4J: Class path contains multiple SLF4J bindings. 2 SLF4J: Found binding in [jar:file:/D:/developing/eclipse/workspace/ProjectManagement/projectManagement/src/main/webapp/WEB-INF/lib/slf4j-log4j12-1.7.6.jar!/org/slf4j/impl/StaticLoggerBinder.class] 3 SLF4J: Found binding in [jar:file:/C:/Users/Administrator/.m2/repository/org/slf4j/slf4j-log4j12/1.7.7/slf4j-log4j12-1.7.7.jar!/org/slf4j/impl/StaticLoggerBinder.class] 4 SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. 5 SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory] 6 [org.springframework.beans.factory.xml.XmlBeanDefinitionReader] - Loading XML bean definitions from class path resource [spring-activiti.xml] 7 [org.springframework.context.support.GenericApplicationContext] - Refreshing [email protected]83967b: startup date [Tue Feb 28 18:32:15 CST 2017]; root of context hierarchy 8 [org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor] - JSR-330 'javax.inject.Inject' annotation found and supported for autowiring 9 [org.activiti.engine.impl.db.DbSqlSession] - performing create on engine with resource org/activiti/db/create/activiti.mysql.create.engine.sql 10 [org.activiti.engine.impl.db.DbSqlSession] - Found MySQL: majorVersion=5 minorVersion=1 11 [org.activiti.engine.impl.db.DbSqlSession] - performing create on history with resource org/activiti/db/create/activiti.mysql.create.history.sql 12 [org.activiti.engine.impl.db.DbSqlSession] - Found MySQL: majorVersion=5 minorVersion=1 13 [org.activiti.engine.impl.db.DbSqlSession] - performing create on identity with resource org/activiti/db/create/activiti.mysql.create.identity.sql 14 [org.activiti.engine.impl.db.DbSqlSession] - Found MySQL: majorVersion=5 minorVersion=1 15 [org.activiti.engine.impl.ProcessEngineImpl] - ProcessEngine default created 16 [org.springframework.test.context.transaction.TransactionalTestExecutionListener] - Began transaction (1) for test context [[email protected] testClass = BaseTestCase, testInstance = [email protected], testMethod = [email protected], testException = [null], mergedContextConfiguration = [[email protected] testClass = BaseTestCase, locations = '{classpath:spring-activiti.xml}', classes = '{}', contextInitializerClasses = '[]', activeProfiles = '{}', contextLoader = 'org.springframework.test.context.support.DelegatingSmartContextLoader', parent = [null]]]; transaction manager [o[email protected]2453f95d]; rollback [false] 17 通导test 18 [org.springframework.test.context.transaction.TransactionalTestExecutionListener] - Committed transaction after test execution for test context [[email protected] testClass = BaseTestCase, testInstance = [email protected], testMethod = [email protected], testException = [null], mergedContextConfiguration = [[email protected] testClass = BaseTestCase, locations = '{classpath:spring-activiti.xml}', classes = '{}', contextInitializerClasses = '[]', activeProfiles = '{}', contextLoader = 'org.springframework.test.context.support.DelegatingSmartContextLoader', parent = [null]]] 19 [org.springframework.context.support.GenericApplicationContext] - Closing [email protected]83967b: startup date [Tue Feb 28 18:32:15 CST 2017]; root of context hierarchy
数据库自动生成25张表:
5、测试
在需要存放文件的文件夹右键-new-other,选择activiti diagram
设置文件名-next
activiti diagram内置了一些 流程定义模板,但是这里我们选择不使用:
finish之后出现.bpmn文件:
打开这个文件,输入配置信息:
id:流程的唯一标识,建议使用纯英文
在设计区域右边找到StartEven,拖进来:
设置id、name(这里使用默认,没改)
单击左下第二个图标,选择“create user task”
设置id、name
设置节点分配人:
再建两个user task以及EndEvent:
右击文件Leave.bpmn选择OpenWith-XML Editor,可查看XML格式文件,将请假申请、销假的节点分配人设置为proposer(可在上一步设置):
设置自动生成流程图片:
单击window菜单,选择preference,按下图设置:
在原有流程中随意拖动一点,再次保存,即可在同目录下生成png文件:
自动生成测试代码:
在Leave.bpmn文件右键-activiti-generate unit test,之后会在test/java/org/activiti/test包中生成ProcessTestLeave.java文件,
把它拉到holleworld文件夹下,修改包路径
ProcessTestLeave.java文件代码,其中filename路径的\需要修改为/:
1 package org.holleworld;
2
3 import static org.junit.Assert.*;
4
5 import java.util.HashMap;
6 import java.util.Map;
7 import java.io.FileInputStream;
8
9 import org.activiti.engine.RepositoryService;
10 import org.activiti.engine.RuntimeService;
11 import org.activiti.engine.runtime.ProcessInstance;
12 import org.activiti.engine.test.ActivitiRule;
13 import org.junit.Rule;
14 import org.junit.Test;
15
16 public class ProcessTestLeave {
17
18 private String filename = "D:/developing/eclipse/workspace/ProjectManagement/projectManagement/src/test/java/org/holleworld/Leave.bpmn";
19
20 @Rule
21 public ActivitiRule activitiRule = new ActivitiRule();
22
23 @Test
24 public void startProcess() throws Exception {
25 RepositoryService repositoryService = activitiRule.getRepositoryService();
26 repositoryService.createDeployment().addInputStream("leave.bpmn20.xml",
27 new FileInputStream(filename)).deploy();
28 RuntimeService runtimeService = activitiRule.getRuntimeService();
29 Map<String, Object> variableMap = new HashMap<String, Object>();
30 variableMap.put("name", "Activiti");
31 ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("leave", variableMap);
32 assertNotNull(processInstance.getId());
33 System.out.println("id " + processInstance.getId() + " "
34 + processInstance.getProcessDefinitionId());
35 }
36 }
run as - JUnitTest,出错......
repositoryService.createDeployment().addInputStream("leave.bpmn20.xml",new FileInputStream(filename)).deploy();
这步就跳出,且没有报错信息......尝试 修改leave.bpmn20.xml变成leave.bpmn.xml或者leave.bpmn 修改filename = "org/holleworld/Leave.bpmn"; 均无用。
另外找到测试代码:
TestActivitiHelloLeave.java
1 package org.projMgr.TestCase;
2
3 import java.util.Date;
4 import java.util.List;
5
6 import org.activiti.engine.HistoryService;
7 import org.activiti.engine.ProcessEngine;
8 import org.activiti.engine.ProcessEngineConfiguration;
9 import org.activiti.engine.RepositoryService;
10 import org.activiti.engine.RuntimeService;
11 import org.activiti.engine.TaskService;
12 import org.activiti.engine.history.HistoricActivityInstance;
13 import org.activiti.engine.history.HistoricActivityInstanceQuery;
14 import org.activiti.engine.history.HistoricProcessInstance;
15 import org.activiti.engine.history.HistoricProcessInstanceQuery;
16 import org.activiti.engine.history.HistoricTaskInstance;
17 import org.activiti.engine.history.HistoricTaskInstanceQuery;
18 import org.activiti.engine.repository.Deployment;
19 import org.activiti.engine.repository.DeploymentBuilder;
20 import org.activiti.engine.runtime.ProcessInstance;
21 import org.activiti.engine.task.Task;
22 import org.activiti.engine.task.TaskQuery;
23 import org.junit.Before;
24 import org.junit.Test;
25
26 /**
27 * Activiti入门程序
28 *
29 */
30 public class TestActivitiHello {
31 ProcessEngine processEngine = null;
32 @Before
33 public void init(){
34 //自动加载classpath下名为activiti.cfg.xml文件
35 processEngine = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("spring-activiti.xml").buildProcessEngine();
36 }
37
38
39
40 /** 部署流程定义 */
41 @Test
42 public void deploymentProcessDefinitionTest() {
43 /**
44 * RepositoryService是Activiti的仓库服务类,流程定义和部署对象相关的Service
45 * 所谓的仓库指流程定义文档的两个文件:bpmn文件和流程图片
46 */
47 RepositoryService repositoryService = processEngine.getRepositoryService();
48 // 创建一个部署对象DeploymentBuilder,用来定义流程部署的相关参数
49 DeploymentBuilder deploymentBuilder = repositoryService.createDeployment();
50 // 添加部署的名称
51 deploymentBuilder.name("activiti");
52 // 添加hello.bpmn和hello.png
53 deploymentBuilder.addClasspathResource("org/projMgr/TestCase/hello.bpmn");
54 deploymentBuilder.addClasspathResource("org/projMgr/TestCase/hello.png");
55 // 部署流程定义
56 Deployment deployment = deploymentBuilder.deploy();
57
58 System.out.println("部署ID:" + deployment.getId());//1
59 System.out.println("部署名称:" + deployment.getName());//activiti入门程序
60 }
61
62 // /** 启动流程实例 */
63 // @Test
64 // public void startHelloProcessInstanceTest() {
65 // // 流程定义的key
66 // String processDefinitionKey = "hello";
67 // RuntimeService service = processEngine.getRuntimeService();
68 // /**
69 // * 使用流程定义的key启动流程实例,key对应hello.bpmn文件中id的属性值,
70 // * 使用key值启动,默认是按照最新版本的流程定义启动
71 // */
72 // ProcessInstance pi = service.startProcessInstanceByKey(processDefinitionKey);
73 // System.out.println("流程实例ID:" + pi.getId());// 流程实例ID:2501
74 // // 流程定义ID:hello:1:4
75 // System.out.println("流程定义ID:" + pi.getProcessDefinitionId());
76 // }
77
78 // @Test
79 // public void setVariables(){
80 // String taskId = "342504";
81 // TaskService taskService = processEngine.getTaskService();
82 // taskService.setVariableLocal(taskId, "请假天数", 3); //与任务ID绑定
83 // taskService.setVariable(taskId, "请假日期", new Date());
84 // taskService.setVariable(taskId, "请假原因", "回家看亲");
85 //
86 // System.out.println("设置成功了");
87 // }
88
89
90 // /** 查看历史流程实例 */
91 // @Test
92 // public void queryHistoricProcessInstanceTest() throws Exception {
93 // HistoryService service = processEngine.getHistoryService();
94 //
95 // // 获取历史流程实例的查询对象
96 // HistoricProcessInstanceQuery hpiQuery = service.createHistoricProcessInstanceQuery();
97 // // 设置流程定义KEY
98 // hpiQuery.processDefinitionKey("hello");
99 // // 分页条件
100 // //hpiQuery.listPage(firstResult, maxResults);
101 // // 排序
102 // hpiQuery.orderByProcessInstanceStartTime().desc();
103 //
104 // // 执行查询
105 // List<HistoricProcessInstance> hpis = hpiQuery.list();
106 // // 遍历查看结果
107 // for (HistoricProcessInstance hpi : hpis) {
108 // System.out.print("pid:" + hpi.getId() + ",");
109 // System.out.print("pdid:" + hpi.getProcessDefinitionId() + ",");
110 // System.out.print("startTime:" + hpi.getStartTime() + ",");
111 // System.out.print("endTime:" + hpi.getEndTime() + ",");
112 // System.out.print("duration:" + hpi.getDurationInMillis() + ",");
113 // System.out.println("vars:" + hpi.getProcessVariables());
114 // }
115 // }
116 //
117 // /** 查看历史活动实例 */
118 // @Test
119 // public void queryHistoricActivityInstanceTest() throws Exception {
120 // HistoryService service = processEngine.getHistoryService();
121 // HistoricActivityInstanceQuery haiq=service.createHistoricActivityInstanceQuery();
122 // //过滤条件
123 // haiq.processInstanceId("45001");
124 // // 分页条件
125 // //haiq.listPage(firstResult, maxResults);
126 // //排序
127 // haiq.orderByHistoricActivityInstanceEndTime().asc();
128 // List<HistoricActivityInstance> hais = haiq.list();
129 //
130 // for (HistoricActivityInstance hai : hais) {
131 // System.out.print("activitiId:" + hai.getActivityId() + ",");
132 // System.out.print("name:" + hai.getActivityName() + ",");
133 // System.out.print("type:" + hai.getActivityType() + ",");
134 // System.out.print("pid:" + hai.getProcessInstanceId() + ",");
135 // System.out.print("assignee:" + hai.getAssignee() + ",");
136 // System.out.print("startTime:" + hai.getStartTime() + ",");
137 // System.out.print("endTime:" + hai.getEndTime() + ",");
138 // System.out.println("duration:" + hai.getDurationInMillis());
139 // }
140 // }
141
142 // /** 查看历史任务实例 */
143 // @Test
144 // public void queryHistoricTaskInstanceTest() throws Exception {
145 // HistoryService service = processEngine.getHistoryService();
146 // HistoricTaskInstanceQuery htiq = service.createHistoricTaskInstanceQuery();
147 // htiq.taskAssignee("李四");
148 // List<HistoricTaskInstance> tasks = htiq.list();
149 //
150 // for (HistoricTaskInstance hti : tasks) {
151 // System.out.print("pid:" + hti.getProcessInstanceId() + ",");
152 // System.out.print("assignee:" + hti.getAssignee() + ",");
153 // System.out.print("startTime:" + hti.getStartTime() + ",");
154 // System.out.print("endTime:" + hti.getEndTime() + ",");
155 // System.out.println("duration:" + hti.getDurationInMillis());
156 // }
157 // }
158
159 // /**查询当前人的个人任务*/
160 // @Test
161 // public void queryAssigneeTaskTest(){
162 // //与正在执行的任务管理相关的Service
163 // TaskService service = processEngine.getTaskService();
164 // //创建任务查询对象
165 // TaskQuery query = service.createTaskQuery();
166 // //指定个人任务查询,指定办理人
167 // query.taskAssignee("王五");
168 // List<Task> list = query.list();
169 // if(list!=null && list.size()>0){
170 // for(Task task:list){
171 // System.out.println("任务ID:"+task.getId());
172 // System.out.println("任务名称:"+task.getName());
173 // System.out.println("任务的创建时间:"+task.getCreateTime());
174 // System.out.println("任务的办理人:"+task.getAssignee());
175 // System.out.println("流程实例ID:"+task.getProcessInstanceId());
176 // System.out.println("执行对象ID:"+task.getExecutionId());
177 // System.out.println("流程定义ID:"+task.getProcessDefinitionId());
178 // }
179 // }
180 // }
181
182 // /**完成个人任务*/
183 // @Test
184 // public void completeTaskTest(){
185 // //任务ID
186 // String taskId = "50002"; // 需改id
187 // processEngine.getTaskService()
188 // .complete(taskId);
189 // System.out.println("完成任务:任务ID:"+taskId);
190 // }
191
192
193
194 // /** 删除流程定义 */
195 // @Test
196 // public void deleteProcessDefinition() {
197 // // 使用部署ID,完成删除
198 // String deploymentId = "27501";
199 //
200 // //不带级联的删除 只能删除没有启动的流程,如果流程启动,就会抛出异常
201 // // processEngine.getRepositoryService().deleteDeployment(deploymentId);
202 //
203 // /**
204 // * 级联删除 不管流程是否启动,都能可以删除
205 // */
206 // processEngine.getRepositoryService().deleteDeployment(deploymentId, true);
207 // System.out.println("删除成功!");
208 // }
209
210
211
212
213 }
分步骤测试:
1 /** 部署流程定义 */
2 @Test
3 public void deploymentProcessDefinitionTest() {
4 /**
5 * RepositoryService是Activiti的仓库服务类,流程定义和部署对象相关的Service
6 * 所谓的仓库指流程定义文档的两个文件:bpmn文件和流程图片
7 */
8 RepositoryService repositoryService = processEngine.getRepositoryService();
9 // 创建一个部署对象DeploymentBuilder,用来定义流程部署的相关参数
10 DeploymentBuilder deploymentBuilder = repositoryService.createDeployment();
11 // 添加部署的名称
12 deploymentBuilder.name("holleworld");
13 // 添加hello.bpmn和hello.png
14 deploymentBuilder.addClasspathResource("org/holleworld/Leave.bpmn");
15 deploymentBuilder.addClasspathResource("org/holleworld/Leave.png");
16 // 部署流程定义
17 Deployment deployment = deploymentBuilder.deploy();
18
19 System.out.println("部署ID:" + deployment.getId());//1
20 System.out.println("部署名称:" + deployment.getName());//activiti入门程序
21 }
运行结果:
1 /** 启动流程实例 */
2 @Test
3 public void startHelloProcessInstanceTest() {
4 // 流程定义的key
5 String processDefinitionKey = "leave";
6 RuntimeService service = processEngine.getRuntimeService();
7 /**
8 * 使用流程定义的key启动流程实例,key对应hello.bpmn文件中id的属性值,
9 * 使用key值启动,默认是按照最新版本的流程定义启动
10 */
11 ProcessInstance pi = service.startProcessInstanceByKey(processDefinitionKey);
12 System.out.println("流程实例ID:" + pi.getId());// 流程实例ID
13 // 流程定义ID:hello:1:4
14 System.out.println("流程定义ID:" + pi.getProcessDefinitionId());
15 }
运行结果:
1 /** 查看历史流程实例 */
2 @Test
3 public void queryHistoricProcessInstanceTest() throws Exception {
4 HistoryService service = processEngine.getHistoryService();
5
6 // 获取历史流程实例的查询对象
7 HistoricProcessInstanceQuery hpiQuery = service.createHistoricProcessInstanceQuery();
8 // 设置流程定义KEY
9 hpiQuery.processDefinitionKey("leave");
10 // 分页条件
11 //hpiQuery.listPage(firstResult, maxResults);
12 // 排序
13 hpiQuery.orderByProcessInstanceStartTime().desc();
14
15 // 执行查询
16 List<HistoricProcessInstance> hpis = hpiQuery.list();
17 // 遍历查看结果
18 for (HistoricProcessInstance hpi : hpis) {
19 System.out.print("pid:" + hpi.getId() + ",");
20 System.out.print("pdid:" + hpi.getProcessDefinitionId() + ",");
21 System.out.print("startTime:" + hpi.getStartTime() + ",");
22 System.out.print("endTime:" + hpi.getEndTime() + ",");
23 System.out.print("duration:" + hpi.getDurationInMillis() + ",");
24 System.out.println("vars:" + hpi.getProcessVariables());
25 }
26 }
运行结果:
1 /** 查看历史活动实例 */
2 @Test
3 public void queryHistoricActivityInstanceTest() throws Exception {
4 HistoryService service = processEngine.getHistoryService();
5 HistoricActivityInstanceQuery haiq=service.createHistoricActivityInstanceQuery();
6 //过滤条件
7 haiq.processInstanceId("70001");
8 // 分页条件
9 //haiq.listPage(firstResult, maxResults);
10 //排序
11 haiq.orderByHistoricActivityInstanceEndTime().asc();
12 List<HistoricActivityInstance> hais = haiq.list();
13
14 for (HistoricActivityInstance hai : hais) {
15 System.out.print("activitiId:" + hai.getActivityId() + ",");
16 System.out.print("name:" + hai.getActivityName() + ",");
17 System.out.print("type:" + hai.getActivityType() + ",");
18 System.out.print("pid:" + hai.getProcessInstanceId() + ",");
19 System.out.print("assignee:" + hai.getAssignee() + ",");
20 System.out.print("startTime:" + hai.getStartTime() + ",");
21 System.out.print("endTime:" + hai.getEndTime() + ",");
22 System.out.println("duration:" + hai.getDurationInMillis());
23 }
24 }
运行结果
1 /**查询当前人的个人任务*/
2 @Test
3 public void queryAssigneeTaskTest(){
4 //与正在执行的任务管理相关的Service
5 TaskService service = processEngine.getTaskService();
6 //创建任务查询对象
7 TaskQuery query = service.createTaskQuery();
8 //指定个人任务查询,指定办理人
9 query.taskAssignee("proposer");
10 List<Task> list = query.list();
11 if(list!=null && list.size()>0){
12 for(Task task:list){
13 System.out.println("任务ID:"+task.getId());
14 System.out.println("任务名称:"+task.getName());
15 System.out.println("任务的创建时间:"+task.getCreateTime());
16 System.out.println("任务的办理人:"+task.getAssignee());
17 System.out.println("流程实例ID:"+task.getProcessInstanceId());
18 System.out.println("执行对象ID:"+task.getExecutionId());
19 System.out.println("流程定义ID:"+task.getProcessDefinitionId());
20 }
21 }
22 }
运行结果:
1 /** 查看历史任务实例 */
2 @Test
3 public void queryHistoricTaskInstanceTest() throws Exception {
4 HistoryService service = processEngine.getHistoryService();
5 HistoricTaskInstanceQuery htiq = service.createHistoricTaskInstanceQuery();
6 // htiq.taskAssignee("null");
7 List<HistoricTaskInstance> tasks = htiq.list();
8
9 for (HistoricTaskInstance hti : tasks) {
10 System.out.print("pid:" + hti.getProcessInstanceId() + ",");
11 System.out.print("assignee:" + hti.getAssignee() + ",");
12 System.out.print("startTime:" + hti.getStartTime() + ",");
13 System.out.print("endTime:" + hti.getEndTime() + ",");
14 System.out.println("duration:" + hti.getDurationInMillis());
15 }
16 }
运行结果:
1 /**完成个人任务*/
2 @Test
3 public void completeTaskTest(){
4 //任务ID
5 String taskId = "70004"; // 需改id
6 processEngine.getTaskService()
7 .complete(taskId);
8 System.out.println("完成任务:任务ID:"+taskId);
9 }
运行结果: