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

  • Post author:
  • Post category:其他




背景:




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


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)




版权声明:本文为fh1810038原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。