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

jBPM4.4:如何图示化显示当前的流程执行到了哪一步骤

阅读更多

流程执行时,有时候需要看一下当前的工作卡在哪一步了,对于熟悉流程的人员来说,看到节点的名字即可。对于不熟悉的人员来讲,就需要把整个流程图显示出来,把当前的工作点标注出来。

 

在生成工作流程xml文件的时候,已经生成了一个工作流程的png流程图,只需要在这个png上把当前活跃的节点表示出来即可。

网上的一种做法很简单,就是在这个png上再加一个div层,把执行的活跃节点框起来就可以了。

 

首先:

1. 获取当前的流程图显示

2. 获取当前的活跃节点

3. 生成相关的Div层

 

 

详细代码:

1. 获取当前的流程图:

  由于流程图是放在load字段中的(发布的时候,需要把流程图和xml文件打包成zip文件一起发布,否则后面是找不到这个png文件的),通过RepositoryService获取到流程图:

 

InputStream is = repositoryService.getResourceAsStream(deployId, pngFileName);

//这个inputstream中的内容就是图片,直接输出到页面中
byte[] pic = new byte[1024];
int len = -1;
while( (len=is.read(pic,1024) )!=-1 ){
  response.getOutputStream().write(pic, 0, len );
}
 

 

以上的工作可以放在一个单独的页面中完成,作用就是输出图片。

 

2. 获取当前活跃的节点:

 

// 通过processId,获取到processInstance
ProcessInstance pi = executionService.findProcessInstanceById(id);

// 获取所有活跃的节点:
Set<String> activitySet = pi.findActiveActivityName();
 

 

3. 在页面上输出:

首先输出完成的png图片,随后在每个活跃的节点上画一个框:

输出png图片:

 

<img src="第一步完成的页面地址?参数" style="position:absolute;left:0px;top:0px;">

// 注意这里面style,要和后面画框的div匹配,否则对不起来了
 

 

画框:

 

//刚才已经获取了所有的活跃节点
<%
for( String activityName : activitySet ) {
  ActivityCoordinates ac = repositoryService.getActivityCoordinates( 
       pi.getProcessDefinitionId();  activityName );
%>

// 每个活跃节点上,画一个框
<div style="position:absolute; border; 1px solid red; left:<%=ac.getX()%>; top:<%=ac.getY()%>;width:<%=ac.getWidth()%>;height:<%=ac.getHeight()%>;"   />

<% } %>

 

 

分享到:
评论
5 楼 zybing 2012-11-06  
ganjiang 写道
有点疑惑,请lz指点,1.那个“deployId”不知是那个id,我这边测试不通过。
2.while( (len=is.read(b,1024) )!=-1 ){这一行中的“b”好像没有声明。
3.ActivityCoordinates ac = repositoryService.getActivitycoordinates(  
       pi.getProcessDefinitionId();  activityName );  这一行中的“getActivitycoordinates”应该是“getActivityCoordinates”,两个参数中间的;应该是,吧。
4.<%=ac.getHeight%>应该是<%=ac.getHeight()%>吧


把b ,  改成了pic ,  这样就清晰了
4 楼 zybing 2012-11-06  
ganjiang 写道
有点疑惑,请lz指点,

1.那个“deployId”不知是那个id,我这边测试不通过。
   每次流程发布, 都会返回一个Id,  deployId就是流程发布时候系统的id, 
   见: http://zybing.iteye.com/blog/740944, 就是这里面的deployId

2.while( (len=is.read(b,1024) )!=-1 ){这一行中的“b”好像没有声明。
   这里的代码,是节选的部分主要代码,能够说明意思就可以了.
   是会遇到某些变量,或者某些函数没有定义的情况,  不过不影响意思的表达

3.ActivityCoordinates ac = repositoryService.getActivitycoordinates(  
       pi.getProcessDefinitionId();  activityName );  这一行中的“getActivitycoordinates”应该是“getActivityCoordinates”,两个参数中间的;应该是,吧。
   应该是吧

4.<%=ac.getHeight%>应该是<%=ac.getHeight()%>吧
   嗯,是漏了一个括号

说明一下:
   由于工作环境在内网, 不能直接上网, 因此这里贴出的代码, 都是对照着内网的屏幕再一次手工输入的,错误在所难免. 这些代码没有经过编译器的验证, 更别提测试了.  但是这些代码已经能够说明工作的主要思路,以及技术的运用了.

谢谢这位网友耐心的一一指出错误



3 楼 ganjiang 2012-11-05  
有点疑惑,请lz指点,1.那个“deployId”不知是那个id,我这边测试不通过。
2.while( (len=is.read(b,1024) )!=-1 ){这一行中的“b”好像没有声明。
3.ActivityCoordinates ac = repositoryService.getActivitycoordinates(  
       pi.getProcessDefinitionId();  activityName );  这一行中的“getActivitycoordinates”应该是“getActivityCoordinates”,两个参数中间的;应该是,吧。
4.<%=ac.getHeight%>应该是<%=ac.getHeight()%>吧
2 楼 zybing 2012-11-05  
ganjiang 写道
好多错误!!!


请指点一二, 我来改

ganjiang 写道
好多错误!!!

1 楼 ganjiang 2012-11-05  
好多错误!!!

相关推荐

Global site tag (gtag.js) - Google Analytics