Activiti作为一款轻量级的流程引擎,基本满足日常的工作需要。但涉及到流程监控时,就会显得心有余而力不足。如何不借助其他插件,又尽量避免改写底层代码以实现流程的追踪呢?
设计思路:
(1)一个页面,两个tab标签:A和B。
(2)A标签加载流程图,B标签加载流程数据。
流程图的作用:显示全局流程布局,高亮显示当前进行的环节。
流程数据的作用:显示当前人,处理人,处理时间等需要的信息。
(3)加载流程图:
页面传回businessKey,后台实现查询。查询需要用到的对象:HistoricProcessInstance 或者 ProcessInstance,两者有什么区别?
HistoricProcessInstance:既可以查询历史流程实例(结束的流程),也可以查询运行中的流程实例。(调用getHistoricService()方法实现业务处理)
ProcessInstance :只查询运行中的流程实例。(调用getRuntimeService()方法实现业务处理)
结论:需要效率并且不关注结束流程的情况选择 ProcessInstance,而针对流程监控如果结束的流程也需要监控,应该选择 HistoricProcessInstance 。
重要代码:
/取历史流程实例,既能取到历史实例又能取到运行中的流程实例/
HistoricProcessInstance hpi = workFlowEngineServiceImpl.findHistoryProcessInstanceByBusKey(businessKey);
try {
if (hpi == null) {
throw new RuntimeException(“获取流程图异常!”);
} else {
InputStream imageStream = workFlowEngineServiceImpl.getFlowMap(hpi, hpi.getId(), flowType);
ServletOutputStream os = response.getOutputStream();
int bytesRead = 0;
byte[] buffer = new byte[1024];
while ((bytesRead = imageStream.read(buffer, 0, 1024)) != -1) {
os.write(buffer, 0, bytesRead);
}