首页 > 其他 > 详细

工作流activiti-03数据查询(流程定义 流程实例 代办任务) 以及个人小练习

时间:2014-02-25 18:51:39      阅读:1431      评论:0      收藏:0      [点我收藏+]

在做数据查询的时候通过调用api来查询数据是相当的简单 对分页也进行了封装listPage(0, 4) ;listPage:分页查询 0:表示起始位置,4:表示查询长度

但是公司的框架封装了分页数据  为了更加简便的吻合公司的分页数据  可以通过自己写sql语句来查询数据列表   因为activiti封装的api最终得到的结果就是

查询数据库中的数据(这是本质) 为了自己便利的写出sql语句  必须要了解activiti中数据库表的含义: 个人理解如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
--表结构
SELECT * FROM ACT_HI_PROCINST ; --流程实例历史记录   
SELECT * FROM ACT_HI_ACTINST ; --活动信息
SELECT * FROM ACT_HI_TASKINST   ;  --保存任务历史信息
SELECT * FROM ACT_HI_VARINST ;--变量值历史记录
SELECT * FROM ACT_HI_DETAIL ;
SELECT * FROM ACT_HI_COMMENT ;
SELECT * FROM ACT_HI_ATTACHMENT ;
SELECT * FROM ACT_HI_IDENTITYLINK ;
 
SELECT * FROM ACT_ID_GROUP ;
SELECT * FROM ACT_ID_MEMBERSHIP ;           
SELECT * FROM ACT_ID_USER ;  
SELECT * FROM ACT_ID_INFO ;
 
SELECT * FROM ACT_GE_PROPERTY ; --保存版本信息等
SELECT * FROM ACT_GE_BYTEARRAY ; --保存流程发布中的资源信息 与ACT_RE_DEPLOYMENT 关联
 
SELECT * FROM ACT_RE_PROCDEF ;  --流程定义表
SELECT * FROM ACT_RE_MODEL ;
SELECT * FROM ACT_RE_DEPLOYMENT ;  --流程定义发布时间 和 ACT_RE_PROCDEF中的deployment_id对应
 
SELECT * FROM ACT_RU_EXECUTION ; -- 执行信息  流程实例查询的时候查询的是这张表
SELECT * FROM ACT_RU_JOB  ;  --job      
SELECT * FROM ACT_RU_TASK  ; --任务列表     
SELECT * FROM ACT_RU_IDENTITYLINK ;  --任务指派对象(可能是组任务 activiti:candidateGroups  也可能是个人任务 activiti:candidateUsers ) 通过task_id对应到ACT_RU_TASK
SELECT * FROM ACT_RU_VARIABLE ;   --可能是执行时的变量信息  
SELECT * FROM ACT_RU_EVENT_SUBSCR ; 

 但是为了吻合api的调用  需要知道api调用的sql是什么  然后仿照activiti工程师写的sql写出符合公司框架的sql :

activit中activiti-engine jar包中org.activiti.db.mapping.entity 保存了mybatis 的xml文件  保存了底层调用的数据库信息

 

刚开始学习activiti的时候也写了一写小例子 调用官方api  可能存在一些问题 这里也贴上:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
/**********************************************************************
 * <pre>
 * FILE : MyActivitiDemo.java
 * CLASS : MyActivitiDemo
 *
 * AUTHOR : Liaokailin
 *
 * FUNCTION :
 *
 *
 * Contact: Sian L凯林
 *
 *======================================================================
 * CHANGE HISTORY LOG
 *----------------------------------------------------------------------
 * MOD. NO.|   DATE   |   NAME  | REASON  | CHANGE REQ.
 *----------------------------------------------------------------------
 *          |2014-1-15|Liaokailin| Created |
 * DESCRIPTION:
 * </pre>
 ***********************************************************************/
package com.infoservice.dms.actions.activiti;
 
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
import org.activiti.engine.HistoryService;
import org.activiti.engine.ManagementService;
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.HistoricTaskInstance;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.runtime.Execution;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.junit.BeforeClass;
import org.junit.Test;
 
import com.infoservice.dms.po.sys.TmVehiclePO;
 
public class MyActivitiDemo {
    /*public static void main(String[] args) {
        //获取activiti引擎
        ProcessEngine processEngine = null ;
        processEngine = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("DataAccessContext.xml","processEngineConfiguration").buildProcessEngine() ;
         
        RepositoryService repositoryService = processEngine.getRepositoryService();
        repositoryService.createDeployment()
            .addClasspathResource("demo01/Interview.bpmn20.xml")
            .deploy();
    }*/
 
    private static  ProcessEngine processEngine  ;
     /**
      *
      * Function : 加载processEngine
      * @author : Liaokailin
      * @date : 2014-1-15
      */
    @BeforeClass
    public static void beforeClass(){
        if(processEngine==null)
            System.out.println("----加载processEngine---");
        processEngine =  ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("DataAccessContext.xml","processEngineConfiguration").buildProcessEngine()  ;
    }
  
   /**
    *
    * Function :部署流程定义
    * @author : Liaokailin
    * @date : 2014-1-15
    */
    @Test
    public void deploy(){
        RepositoryService repositoryService = processEngine.getRepositoryService() ;
        repositoryService.createDeployment().addClasspathResource("demo01/Interview.bpmn20.xml").deploy() ;
         
    }
     
    /**
     *
     * Function : 查询所有流程发布时间
     * @author : Liaokailin
     * @date : 2014-1-15
     */
    @Test
    public void findAllProcessDeployTimes(){
        RepositoryService repositoryService = processEngine.getRepositoryService() ;
        //获取流程发布时间 发布id  对于ACT_RE_DEPLOYMENT表
    //  List<Deployment> list = repositoryService.createDeploymentQuery().list(); //查询所有
    //  long count = repositoryService.createDeploymentQuery().count()  ;//数据长度
    //  System.out.println("数据长度:"+count);
        /**
         * orderByDeploymentId :按照id_排序
         * asc:升序
         * listPage:分页查询 0:表示起始位置,4:表示查询长度
         */
        List<Deployment> list = repositoryService.createDeploymentQuery().orderByDeploymentId().asc().listPage(0, 4) ;    
        for(Deployment d:list){
            System.out.println("id:"+d.getId()+",name:"+d.getName()+",time:"+d.getDeploymentTime());
        }
    }
    /**
     * 查询所有流程定义
     * Function :
     * @author : Liaokailin
     * @date : 2014-1-15
     */
    @Test
    public void findAllProcessDefinitions(){
        RepositoryService repositoryService = processEngine.getRepositoryService() ;
        //对应数据表 ACT_RE_PROCDEF
        List<ProcessDefinition>  list = repositoryService.createProcessDefinitionQuery().orderByDeploymentId().asc().list() ;
        for(ProcessDefinition p :list){
            System.out.println(p.getDeploymentId()+","+p.getName());
        }
    }
     
    /**
     * 查询所有流程的最新版本列表
     * Function :
     * @author : Liaokailin
     * @date : 2014-1-15
     */
    @Test
    public void findAllLastVesions(){
        RepositoryService repositoryService = processEngine.getRepositoryService() ;
        //对应数据表 ACT_RE_PROCDEF
        List<ProcessDefinition>  list = repositoryService.createProcessDefinitionQuery().latestVersion().list() ;
        for(ProcessDefinition p :list){
            System.out.println(p.getDeploymentId()+","+p.getName()+",version:"+p.getVersion());
        }
    }
     
     
    /**
     * 删除流程
     * Function :
     * @author : Liaokailin
     * @date : 2014-1-15
     */
     
    @Test
    public void deleteProcessDefinitionById(){
        RepositoryService repositoryService = processEngine.getRepositoryService() ;
        /**
         * 传递的参数为:deployment_id的值
         */
        repositoryService.deleteDeployment("1001") ;
    }
     
     /**
     * 获取流程定义文档中的文件内容  (xml 打印出来)
     * Function :
     * @author : Liaokailin
     * @date : 2014-1-15
     */
    @Test
    public void getProcessDefinitionContent()throws Exception{
        RepositoryService repositoryService = processEngine.getRepositoryService() ;
        InputStream is = repositoryService.getResourceAsStream("1101", "demo01/Interview.bpmn20.xml") ;
        ByteArrayOutputStream bos = new ByteArrayOutputStream() ;
        byte[] bytes = new byte[1024] ;
        int len = 0 ;
        while((len = is.read(bytes))!=-1){
            bos.write(bytes, 0, len) ;
        }
        bos.flush() ;
        System.out.println(new String( bos.toByteArray()));
        bos.close() ;
         
    }
     
     
     /**
     * 获取流程定义文档中的文件内容  (png输出到文件 会乱码  activiti新版本通过set方法设置字体 老版本修改源码)
     * Function :
     * @author : Liaokailin
     * @date : 2014-1-15
     */
    @Test
    public void getProcessDefinitionContentPng()throws Exception{
        RepositoryService repositoryService = processEngine.getRepositoryService() ;
        InputStream is = repositoryService.getResourceAsStream("1101", "demo01/Interview.Interview.png") ;
        File file = new File("d:"+File.separator+"test.png") ;
        FileOutputStream fos = new FileOutputStream(file) ;
        byte[] bytes = new byte[1024] ;
        int len = 0 ;
        while((len = is.read(bytes))!=-1){
            fos.write(bytes, 0, len) ;
        }
        fos.flush() ;
        fos.close() ;
    }
     
    /*--------------------------Process执行----------------------------*/
    /**
     * 1. 创建流程实例 
     * 流程实例创建以后开始创建task  对于数据表ACT_RU_TASK 保存task信息
     * Function :
     * @author : Liaokailin
     * @date : 2014-1-15
     */
    @Test
    public void createProcessInstance(){
        RuntimeService runtimeService = processEngine.getRuntimeService() ;
        //TODO  这里可以设置流程变量 (Map集合)
        ProcessInstance processInstance = runtimeService.startProcessInstanceById("Interview:7:604") ;
        System.out.println("创建流程实例  :\n\t 流程实例ID:"+processInstance.getId()+",业务关联ID:"+processInstance.getBusinessKey()+",流程定义对应的主键ID:"+processInstance.getProcessDefinitionId()+",流程实例ID"+processInstance.getProcessInstanceId());
    }
     
    /**
     * 2.1查询所有的任务   TODO设置为是当前流程实例中的任务
     * Function :
     * @author : Liaokailin
     * @date : 2014-1-15
     */
    @Test
    public void findAllTasks(){
        System.out.println("processEngine.getName():"+processEngine.getName());
        TaskService taskService = processEngine.getTaskService() ; //活动task服务
        List<Task> list = taskService.createTaskQuery().list();
        for(Task e:list){
            System.out.println(e.getId()+","+e.getProcessInstanceId()+","+e.getAssignee()+","+e.getExecutionId()+","+e.getDelegationState());
        }
    }
    /**
     * 2.2获取指定人对应的任务 (只有该人才能查询到)   TODO设置为是当前流程实例中的任务
     * Function :
     * @author : Liaokailin
     * @date : 2014-1-15
     */
    @Test
    public void findPersonalTasks(){
        TaskService taskService = processEngine.getTaskService() ; //活动task服务
        List<Task> list = taskService.createTaskQuery().taskAssignee("张三").list() ;
        System.out.println(list.size());
        for(Task e:list){
            System.out.println(e.getId()+","+e.getProcessInstanceId()+","+e.getAssignee()+","+e.getExecutionId()+","+e.getDelegationState());
        }
    }
     
    /**
     * 2.3获取指定候选人对应的任务  配置为   activiti:candidateUsers="名称"   TODO设置为是当前流程实例中的任务
     * Function :
     * @author : Liaokailin
     * @date : 2014-1-15
     */
    @Test
    public void findCandidateUserTasks(){
        TaskService taskService = processEngine.getTaskService() ; //活动task服务
        List<Task> list = taskService.createTaskQuery().taskCandidateUser("张三").list() ;
        System.out.println(list.size());
        for(Task e:list){
            System.out.println(e.getId()+","+e.getProcessInstanceId()+","+e.getAssignee()+","+e.getExecutionId()+","+e.getDelegationState());
        }
    }
     
     
    /**
     * 2.4获取指定候选人对应的任务  配置为  activiti:candidateGroups="用户组"   TODO设置为是当前流程实例中的任务
     * Function :
     * @author : Liaokailin
     * @date : 2014-1-15
     */
    @Test
    public void findCandidateGroupTasks(){
        TaskService taskService = processEngine.getTaskService() ; //活动task服务
        List<Task> list = taskService.createTaskQuery().taskCandidateGroup("技术部").list() ;
        System.out.println(list.size());
        for(Task e:list){
            System.out.println(e.getId()+","+e.getProcessInstanceId()+","+e.getAssignee()+","+e.getExecutionId()+","+e.getDelegationState()+",name="+e.getName());
        }
    }
     
     
    /**
     * 2.5获取指定时间区间对应的任务  TODO设置为是当前流程实例中的任务
     * Function :
     * @author : Liaokailin
     * @date : 2014-1-15
     */
    @Test
    public void findDateRangeTasks(){
        TaskService taskService = processEngine.getTaskService() ; //活动task服务
        List<Task> list = taskService.createTaskQuery().taskCreatedAfter(new Date()).list() ;  //taskCreatedAfter()
        System.out.println(list.size());
        for(Task e:list){
            System.out.println(e.getId()+","+e.getProcessInstanceId()+","+e.getAssignee()+","+e.getExecutionId()+","+e.getDelegationState()+",name="+e.getName());
        }
    }
     
    /**
     * 3. 获取任务 分配任务  (必须是当前流程实例中的任务)  任务一旦分配给一人以后则其他用户不可查询到
     * Function :
     * @author : Liaokailin
     * @date : 2014-1-15
     */
    @Test
    public void claimTask(){
        TaskService taskService = processEngine.getTaskService() ; //活动task服务
        List<Task> list = taskService.createTaskQuery().taskCandidateGroup("技术部").processInstanceId("1201").list() ;
        System.out.println(list.size());
        for(Task e:list){
            Map map = taskService.getVariables(e.getId()) ;
            if(map!=null){
                System.out.println(((TmVehiclePO)map.get("vehicle")).getVin());
            }
            //将任务指派给张三
            taskService.claim(e.getId(), "张三") ;
        //  System.out.println(e.getId()+","+e.getProcessInstanceId()+","+e.getAssignee()+","+e.getExecutionId()+","+e.getDelegationState()+",name="+e.getName());
        }
    }
     
    /**
     * 办理任务
     * Function :
     * @author : Liaokailin
     * @date : 2014-1-15
     */
    @Test
    public void handldTask(){
         
        TaskService taskService = processEngine.getTaskService() ; //活动task服务
        List<Task> list = taskService.createTaskQuery().taskAssignee("张三").list() ;
        System.out.println(list.size());
        Map<String,Object> map = new HashMap<String, Object>() ;
        TmVehiclePO v = new TmVehiclePO() ; //测试是否可以传递实体
        v.setVin("VIN----00012") ;
        map.put("vehicle", v) ;
        map.put("name", "liaokailin") ;
        map.put("remark","赠送一辆小轿车") ;
        for(Task e:list){
            System.out.println(e.getId()+","+e.getProcessInstanceId()+","+e.getAssignee()+","+e.getExecutionId()+","+e.getDelegationState());
            taskService.complete(e.getId(), map) ;
        }
         
         
  
    }
     
    /**
     * 取得任务实例id对应的流程实例中的流程变量
     * Function :
     * @author : Liaokailin
     * @date : 2014-1-15
     */
    @Test
    public void getVariableByTaskInstanceId(){
        TaskService taskService = processEngine.getTaskService() ; //活动task服务
        Map map = taskService.getVariables("1306") ;
        System.out.println(((TmVehiclePO)map.get("vehicle")).getVin());
    }
     
    /**
     *   获取执行过的所有任务节点的列表  必须指定流程实例才精确     考虑如何获取指定流程定义中的所有节点
     * Function :
     * @author : Liaokailin
     * @date : 2014-1-15
     */
    @Test
    public void getAllExecuteTaskNodeList(){
         HistoryService historyService = processEngine.getHistoryService() ;
         List<HistoricTaskInstance> list = historyService.createHistoricTaskInstanceQuery().processInstanceId("1201").list();
//       List<HistoricTaskInstance> list = historyService.createHistoricTaskInstanceQuery().processInstanceId("1201").list();
         System.out.println(list.size());
         for(HistoricTaskInstance h :list){
             System.out.println(h.getName());
         }
    //   Node node = null ;
        //taskService.getIdentityLinksForTask(taskId) //获取ACT_RU_IDENTITYLINK中的信息
    }
     
    /**
     * 附加操作:查询Execution操作列表
     * Function :
     * @author : Liaokailin
     * @date : 2014-1-15
     */
    @Test
    public void findExecutionList(){
        RuntimeService runtimeService = processEngine.getRuntimeService() ;
        List<Execution> list = runtimeService.createExecutionQuery().list() ;
        for(Execution e:list){
            System.out.println(e.getId()+","+e.getProcessInstanceId());
        }
    }
     
    /**
     * 附加操作:查询流程实例列表
     * Function :
     * @author : Liaokailin
     * @date : 2014-1-15
     */
    @Test
    public void findProcessInstanceList(){
        RuntimeService runtimeService = processEngine.getRuntimeService() ;
        List<ProcessInstance> list = runtimeService.createProcessInstanceQuery().list() ;
        for(ProcessInstance e:list){
            System.out.println(e.getId()+","+e.getProcessInstanceId()+",该实例对应的流程定义"+e.getProcessDefinitionId()+",业务外键:"+e.getBusinessKey());
        }
    }
     
}

工作流activiti-03数据查询(流程定义 流程实例 代办任务) 以及个人小练习

原文:http://www.cnblogs.com/liaokailin/p/3533915.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!