[url]http://www.kafeitu.me/activiti/2012/03/22/workflow-activiti-action.html[/url]
我们目前分为4中状态:未签收、办理中、运行中、已完成。
查询到任务或者流程实例后要显示在页面,这个时候需要添加业务数据,最终结果就是业务和流程的并集,请参考6.2。
[color=darkblue][b]5.1 未签收(Task)[/b][/color]
此类任务针对于把Task分配给一个角色时,例如部门领导,因为部门领导角色可以指定多个人所以需要先签收再办理,术语:抢占式
对应的API查询:
[color=darkblue][b]5.2 办理中(Task)[/b][/color]
此类任务数据类源有两种:
签收后的,5.1中签收后就应该为办理中状态
节点指定的是具体到一个人,而不是角色
对应的API查询:
[color=darkblue][b]5.3 运行中(ProcessInstance)[/b][/color]
说白了就是没有结束的流程,所有参与过的人都应该可以看到这个实例,但是Activiti的API没有可以通过用户查询的方法,这个只能自己用hack的方式处理了,我目前还没有处理。
从表ACT_RU_EXECUTION中查询数据。
对应的API查询:
[b][color=darkblue]5.4 已完成(HistoricProcessInstance)[/color][/b]
已经结束的流程实例。
从表ACT_HI_PROCINST中查询数据。
[color=darkblue][b]5.5 查询时和业务关联[/b][/color]
提示:之前在业务对象添加了PROCESS_INSTANCE_ID字段
思路:现在可以利用这个字段查询了,不管是Task还是ProcessInstance都可以得到流程实例ID,可以根据流程实例ID查询实体然后把流程对象设置到实体的一个属性中由Action或者Controller输出到前台。
代码请参考:[url]https://gist.github.com/2183557[/url]
我们目前分为4中状态:未签收、办理中、运行中、已完成。
查询到任务或者流程实例后要显示在页面,这个时候需要添加业务数据,最终结果就是业务和流程的并集,请参考6.2。
[color=darkblue][b]5.1 未签收(Task)[/b][/color]
此类任务针对于把Task分配给一个角色时,例如部门领导,因为部门领导角色可以指定多个人所以需要先签收再办理,术语:抢占式
对应的API查询:
/**
* 获取未签收的任务查询对象
* @param userId 用户ID
*/
@Transactional(readOnly = true)
public TaskQuery createUnsignedTaskQuery(String userId) {
TaskQuery taskCandidateUserQuery = taskService.createTaskQuery().processDefinitionKey(getProcessDefKey())
.taskCandidateUser(userId);
return taskCandidateUserQuery;
}
[color=darkblue][b]5.2 办理中(Task)[/b][/color]
此类任务数据类源有两种:
签收后的,5.1中签收后就应该为办理中状态
节点指定的是具体到一个人,而不是角色
对应的API查询:
/**
* 获取正在处理的任务查询对象
* @param userId 用户ID
*/
@Transactional(readOnly = true)
public TaskQuery createTodoTaskQuery(String userId) {
TaskQuery taskAssigneeQuery = taskService.createTaskQuery().processDefinitionKey(getProcessDefKey()).taskAssignee(userId);
return taskAssigneeQuery;
}
[color=darkblue][b]5.3 运行中(ProcessInstance)[/b][/color]
说白了就是没有结束的流程,所有参与过的人都应该可以看到这个实例,但是Activiti的API没有可以通过用户查询的方法,这个只能自己用hack的方式处理了,我目前还没有处理。
从表ACT_RU_EXECUTION中查询数据。
对应的API查询:
/**
* 获取未经完成的流程实例查询对象
* @param userId 用户ID
*/
@Transactional(readOnly = true)
public ProcessInstanceQuery createUnFinishedProcessInstanceQuery(String userId) {
ProcessInstanceQuery unfinishedQuery = runtimeService.createProcessInstanceQuery().processDefinitionKey(getProcessDefKey())
.active();
return unfinishedQuery;
}
[b][color=darkblue]5.4 已完成(HistoricProcessInstance)[/color][/b]
已经结束的流程实例。
从表ACT_HI_PROCINST中查询数据。
/**
* 获取已经完成的流程实例查询对象
* @param userId 用户ID
*/
@Transactional(readOnly = true)
public HistoricProcessInstanceQuery createFinishedProcessInstanceQuery(String userId) {
HistoricProcessInstanceQuery finishedQuery = historyService.createHistoricProcessInstanceQuery()
.processDefinitionKey(getProcessDefKey()).finished();
return finishedQuery;
}
[color=darkblue][b]5.5 查询时和业务关联[/b][/color]
提示:之前在业务对象添加了PROCESS_INSTANCE_ID字段
思路:现在可以利用这个字段查询了,不管是Task还是ProcessInstance都可以得到流程实例ID,可以根据流程实例ID查询实体然后把流程对象设置到实体的一个属性中由Action或者Controller输出到前台。
代码请参考:[url]https://gist.github.com/2183557[/url]