JBPM4.3流程跟踪(Extjs iframe实现…

来源:互联网 发布:淘宝官方客服电话 编辑:程序博客网 时间:2024/06/06 06:45

核心代码如下: 我们需要的参数是流程实例ID instanceId  需要在从前台传入后台.

 

 

  以下代码是获取当前活动的 Activity,具体实现功能可参考源代码。ActivityCoordinates为Jbpm源代码中  的接口,其中获取到的数据 x,y,width,height 来锁定当前节点的位置以及大小。 常有业务有需要,可以拓  展此接口。更改List 泛型。

  

  public static Result renderProcessDiagram(StringinstanceID){

ProcessEngine processEngine=WorkFlowDeploy.getInstance().processEngine;

ExecutionService service = processEngine.getExecutionService();

RepositoryService repositoryService = processEngine

.getRepositoryService();

Set<String> set =service.findProcessInstanceById(instanceID)

.findActiveActivityNames();

List<ActivityCoordinates> list = newLinkedList<ActivityCoordinates>();

ProcessInstance processInstance = service

.findProcessInstanceById(instanceID);

StringprocessDefinitionId = processInstance.getProcessDefinitionId();

for(String str : set) {

ActivityCoordinates activityCoordinates = repositoryService

.getActivityCoordinates(processDefinitionId, str);

list.add(activityCoordinates);

}

 

returnok(renderProcessDiagram.render(instanceID, list));

 

}


  图片以流的形式返回客户端。切记:picname为Jbpm自动生成的图片,如果美工修改,不可改变task的位置

     publicstatic Result getProcessDiagram(String instanceID){

 

ProcessEngine processEngine=WorkFlowDeploy.getInstance().processEngine;

ExecutionService service = processEngine.getExecutionService();

ProcessInstance processInstance = service

.findProcessInstanceById(instanceID);

StringprocessDefinitionId = processInstance.getProcessDefinitionId();

RepositoryService repositoryService = processEngine

.getRepositoryService();

ProcessDefinition processDefinition = repositoryService

.createProcessDefinitionQuery()

.processDefinitionId(processDefinitionId).uniqueResult();

InputStream is = repositoryService.getResourceAsStream(

processDefinition.getDeploymentId(), "picname.png");

 

returnok(is);

}


前台页面,前台使用的是scala, jsp同理。修改一下语法即可

 

@(instanceID:String,coordinates:List[org.jbpm.api.model.ActivityCoordinates])

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1">

<title>Insert titlehere</title>

<script>


   Ext.create('Ext.tip.ToolTip',{

   target: '1',

   html: 'aaa'

});


</script>

</head>

<body>

    <imgalt="JPDL" src="@picpath.getProcessDiagram(instanceID)"style="position: absolute;left: 0px;top: 0px;">

    @for(rect <-coordinates) {

      <div id="1" data-description="testtext" style="position: absolute; left: @{rect.getX()}px; top:@{rect.getY()}px; width: @{rect.getWidth()}px; height:@{rect.getHeight()}px; border: 2px redsolid;"></div>

    }

</body>

</html>


用extjs实现对scala 的嵌入,  xtype : "component", 

 src 是 xx.autoEl.src="/path/renderProcessDiagram/"+instanceID; 需要动态实现

     

 

 items : [{

                     xtype :"component",

                     itemId :'ifram',

                     width :690,

                     height :200,

                     margin :'10 0 10 10',

                     autoEl :{

                        tag : "iframe",

                        src : ""

                     }

                 }]


0 0