activiti流程图上获取各节点的信息获取

背景:

        由于项目的需要,当用户在查看流程图时,当点击某个流程图片上的节点时,需要提示一些信息,这就需要获取各个节点的信息,此处获取id和name的值。         

           

       注意这个并不是流程图的高亮,即当点击网点申请环节时,获取该节点的id和name,即B001和网点申请,点击部门申请时,获取B002和部门经理审批

解释说明: 博文来源:http://www.fhadmin.org/webnewsdetail1.html

     1.下方说的x和y:     

     

      2.流程定义的key: 即为下方id的值

     

     3.节点的id和name的值:

     

难点分析:

      由 于activiti在部署时,如果没有流程图片,则activiti会自动生成一张图片,而我们项目中使用的是activiti modeler实现的在线画流程图,部署时没有图片,是由activiti自动生成。而activiti在生成图片时,会对图片做一个裁剪操作,所有最终 各个节点的坐标会比实际的要小。

      (即:activiti自动生成的图片,会做一个裁剪操作,各个节点实际的x和y的值比xml文件中的要小)

        而我们的难点在于,各个节点实际坐标的获取。如下图所示:         

         

        即我们实际上获取的坐标需要在减去一个minX和minY,得到的才是我们的各个节点实际的坐标。

 

步骤分析:

      1.根据流程定义的key,重新生成流程图片,而不是获取流程图片。

      2.还是根据流程定义的key,获取各个节点的信息。(此处需要注意的是各个节点实际的x和y的值的获取的方法

      3.在jsp页面上使用绝对定位,给点击的节点加上高亮。

 

步骤实现:  1.根据流程定义的key,重新生成流程图片,而不是获取流程图片。

    此处重新生成图片的原因:

           因为有些时候我们在部署流程时,将图片也部署进去了,此时使用的就是自己的图片,activiti不会进行图片的裁剪。因为我在下一步获取流程节点的信息时,对x和y的进行了特殊处理,因此此处需要重新生成 流程图片。

 

  1. /** 
  2. * 根据流程的key生成图片 
  3.  
  4. * @param request 
  5. * @param response 
  6. * @param wfKey 流程定义的key 
  7. */  
  8. @RequestMapping("/genericImageByWfKey")  
  9. public void genericImageByWfKey(HttpServletRequest request, HttpServletResponse response, String wfKey) {  
  10.     Context.setProcessEngineConfiguration(processEngineConfiguration);  
  11.     RepositoryService repositoryService = this.processEngine.getRepositoryService();  
  12.     ProcessDefinition pd = repositoryService.createProcessDefinitionQuery().processDefinitionKey(wfKey).latestVersion().singleResult();  
  13.     BpmnModel bm = repositoryService.getBpmnModel(pd.getId());  
  14.     <strong><span style="color: #ff6600;">InputStream is = ProcessDiagramGenerator.generatePngDiagram(bm); // 生成图片,获取图片的输入流</span></strong>  
  15.     try {  
  16.         int size = is.available();  
  17.         byte data[] = new byte[size];  
  18.         is.read(data);  
  19.         response.setContentType("image/png"); // 设置返回的文件类型  
  20.         OutputStream os = response.getOutputStream();  
  21.         os.write(data);  
  22.         os.flush();  
  23.         os.close();  
  24.     } catch (IOException e) {  
  25.         log.error("读写流程图时出现异常!");  
  26.     }  
  27.         log.info("end....");  
  28. }  

 2.还是根据流程定义的key,获取各个节点的信息。

    获取各个节点的坐标之前,我们先看一下activiti中是如果获取到最小的x和y的,然后是如何裁剪图片的

    2.1获取节点包括线的最小x和最小y :

   跟踪acticiti的源码可以发现,最小x和y的获取(org.activiti.engine.impl.bpmn.diagram.ProcessDiagramGenerator.initProcessDiagramCanvas(BpmnModel)

 

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值