`
zybing
  • 浏览: 447793 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

jBPM4.4:HistoryService历史服务

阅读更多

在流程实例执行的过程中,会不断触发事件。 从那些事件中,运行和完成流程的历史信息会被收集到历史表中。 HistoryService 提供了 对那些信息的访问功能。

 

如果想查找某一特定流程定义的所有流程实例, 可以像这样操作:

List<HistoryProcessInstance> historyProcessInstances = historyService
  .createHistoryProcessInstanceQuery()
  .processDefinitionId("ICL-1")
  .orderAsc(HistoryProcessInstanceQuery.PROPERTY_STARTTIME)
  .list();
 

单独的活动流程也可以作为HistoryActivityInstance 保存到历史信息中。

List<HistoryActivityInstance> histActInsts = historyService
    .createHistoryActivityInstanceQuery()
    .processDefinitionId("ICL-1")
    .activityName("a")
    .list();
 

也可以使用简易方法avgDurationPerActivitychoiceDistribution 。 可以通过javadocs获得这些方法的更多信息。

 

有时,我们需要获得指定流程实例已经过的节点的完整列表。 下面的查询语句可以用来获得所有已经执行的节点列表:

List<HistoryActivityInstance> histActInsts = historyService
    .createHistoryActivityInstanceQuery()
    .processInstanceId("ICL.12345")
    .list();
 

上面的查询与通过execution id查询有一些不同。有时execution id和流程实例id是不同的, 当一个节点中使用了定时器,execution id中就会使用额外的后缀, 这就会导致当我们通过execution id查询时, 这个节点不会出现在结果列表中。

 

 

列出执行的过程:

// 根据任务开始的时间进行排序,列出来
List<HistoryActivityInstance> haInstance = historyService
    .createHistoryActivityInstanceQuery().processInstanceId(instanceId)
    .orderAsc(HistoryProcessInstanceQuery.PROPERTY_STARTTIME)
    .list();

// 显示每一步骤任务的名称 
Iterator<HistoryActivityInstance> it = haInstance.iterator();
while( it.hasNext() ) {
   HistoryActivityInstance ha = it.next();
   system.out.println( ha.getActivityName() );
}
 

 

 

 

分享到:
评论
4 楼 zybing 2012-04-01  
ydpiaoyun 写道
QQ:495231441  谢谢!


子流程倒没有在生产环境做好好的用过,看来得要研究一下了
3 楼 ydpiaoyun 2012-03-19  
QQ:495231441  谢谢!
2 楼 ydpiaoyun 2012-03-19  
你好,如果包含子流程,则只能得到子流程的名字,而不是子流程内部具体节点的名字,这个怎么解决呢?
1 楼 tree_161219 2010-11-02  
很好的总结!支持一下!

相关推荐

Global site tag (gtag.js) - Google Analytics