jBPM 4.4:どのように現在の流れがどのように実行されているかを示していますか?


フロー実行時には、現在の作業カードがどこにあるかを確認する必要があります.流れを熟知している人にとっては、ノードの名前を見ればいいです.よく知らない人にとっては、フローチャート全体を表示し、現在の作業ポイントを表示する必要があります.
 
ワークフローxmlファイルを生成する時、既にワークフローのpngフローチャートが生成されています.このpng上で現在アクティブなノードを表示するだけでいいです.
ネット上のやり方はとても簡単です.このpngにdiv層を追加して、実行するアクティブノードを囲めばいいです.
 
まず、
1.現在のフローチャートを取得して表示する
2.現在のアクティブノードを取得する
3.関連するDiv層を生成する
 
 
詳細コード:
1.現在のフローチャートを取得する:
  フローチャートはロードフィールドに置いていますので(リリース時はフローチャートと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()%>;"   />

<% } %>