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

更新时间:2023-06-23 06:17:31 阅读: 评论:0

activiti流程图上获取各节点的信息获取
背景:
由于项⽬的需要,当⽤户在查看流程图时,当点击某个流程图⽚上的节点时,需要提⽰⼀些信息,这就需要获取各个节点的信息,此处获取id和name的值。
注意:这个并不是流程图的⾼亮,即当点击⽹点申请环节时,获取该节点的id和name,即B001和⽹点申请,点击部门申请时,获取B002和部门经理审批
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的进⾏了特殊处理,因此此处需要重新⽣成流程图⽚。
2.还是根据流程定义的key,获取各个节点的信息。
直白获取各个节点的坐标之前,我们先看⼀下activiti中是如果获取到最⼩的x和y的,然后是如何裁剪图⽚的
2.1获取节点包括线的最⼩x和最⼩y :
跟踪acticiti的源码可以发现,最⼩x和y的获取
(ine.impl.bpmn.diagram.ProcessDiagramGenerator.initProcessDiagramCanvas(BpmnModel))
Java代码
1. protected static ProcessDiagramCanvas initProcessDiagramCanvas(BpmnModel bpmnModel) {
2. // We need to calculate maximum values to know how big the image will be in its entirety
3. double minX = Double.MAX_VALUE;
4. double maxX = 0;
5. double minY = Double.MAX_VALUE;
6. double maxY = 0;
7.
8. for (Pool pool : Pools()) {
9.      GraphicInfo graphicInfo = Id());
10.      minX = X();
学化妆有前途吗11.      maxX = X() + Width();
12.      minY = Y();
美少女的谎言第二季13.      maxY = Y() + Height();
16.    List<FlowNode> flowNodes = gatherAllFlowNodes(bpmnModel);
17. for (FlowNode flowNode : flowNodes) {
18.
19.      GraphicInfo flowNodeGraphicInfo = Id());
20.
21. // width
22. if (X() + Width() > maxX) {
23.        maxX = X() + Width();
24.      }
25. if (X() < minX) {
by是什么意思啊26.        minX = X();
27.      }
28. // height
29. if (Y() + Height() > maxY) {
30.        maxY = Y() + Height();
31.      }
32. if (Y() < minY) {
瘦腰瑜伽
33.        minY = Y();
34.      }
35.
36. for (SequenceFlow quenceFlow : OutgoingFlows()) {
37.        List<GraphicInfo> graphicInfoList = Id());
38. for (GraphicInfo graphicInfo : graphicInfoList) {
39. // width
40. if (X() > maxX) {
41.            maxX = X();
42.          }
43. if (X() < minX) {
44.            minX = X();
45.          }
46. // height
47. if (Y() > maxY) {
48.            maxY = Y();
49.          }
50. if (Y()< minY) {
51.            minY = Y();
52.          }
53.        }
54.      }
55.    }
56.
57. int nrOfLanes = 0;
58. for (Process process : Process()) {
silence
59. for (Lane l : Lanes()) {
60.
优秀家长发言稿短一点61.        nrOfLanes++;
62.
63.        GraphicInfo graphicInfo = Id());
64. // // width
65. if (X() + Width() > maxX) {
66.          maxX = X() + Width();
67.        }
小学生课堂游戏68. if (X() < minX) {
69.          minX = X();
70.        }
71. // height
72. if (Y() + Height() > maxY) {
73.          maxY = Y() + Height();
74.        }
75. if (Y() < minY) {
76.          minY = Y();
77.        }
78.      }
79.    }
juice英语怎么读80.
81. // Special ca, dehaus/brow/ACT-1431
82. if (flowNodes.size() == 0 && Pools().size() == 0 && nrOfLanes == 0) {
83. // Nothing to show
84.      minX = 0;
85.      minY = 0;
86.    }
87.
88. return <span >new ProcessDiagramCanvas</span>((int) maxX + 10,
(int) maxY + 10, (int) minX, (int) minY);
89.  }
2.2 图⽚的裁剪:
还是activiti的源码:(ine.impl.bpmn.ateImage(String))
>bravia

本文发布于:2023-06-23 06:17:31,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/78/1019051.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:获取   节点   流程图   信息   需要   点击   流程   坐标
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图