首页 > 代码库 > Activiti搭建

Activiti搭建

Activiti搭建

1,导入activiti包文件(非常悲剧...没有找到activiti的maven依赖T_T)

拉了一堆activiti的包......

技术分享

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 org.springframework.context.support.GenericApplicationContext@5383967b: 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 [DefaultTestContext@15eebbff testClass = BaseTestCase, testInstance = org.projMgr.TestCase.BaseTestCase@22d6f11, testMethod = test@BaseTestCase, testException = [null], mergedContextConfiguration = [MergedContextConfiguration@30990c1b testClass = BaseTestCase, locations = ‘{classpath:spring-activiti.xml}‘, classes = ‘{}‘, contextInitializerClasses = ‘[]‘, activeProfiles = {}, contextLoader = org.springframework.test.context.support.DelegatingSmartContextLoader, parent = [null]]]; transaction manager [org.springframework.jdbc.datasource.DataSourceTransactionManager@2453f95d]; rollback [false]
17 通导test
18 [org.springframework.test.context.transaction.TransactionalTestExecutionListener] - Committed transaction after test execution for test context [DefaultTestContext@15eebbff testClass = BaseTestCase, testInstance = org.projMgr.TestCase.BaseTestCase@22d6f11, testMethod = test@BaseTestCase, testException = [null], mergedContextConfiguration = [MergedContextConfiguration@30990c1b 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 org.springframework.context.support.GenericApplicationContext@5383967b: 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     }

运行结果:

技术分享

 

Activiti搭建