关于Activiti5.22版本整合modler监听丢失解决办法
程序员文章站
2022-07-02 17:09:24
转载请注明出处:https://www.cnblogs.com/rolayblog/p/10444866.html 我当时遇到这个问题的时候很懵,各种度娘谷歌,始终找不到解决办法。无奈,只有断点跟源码一步一步的看,最终找到了问题所在。然后根据自己有限的思维和经验修改了,下面上代码。 在convert ......
转载请注明出处:https://www.cnblogs.com/rolayblog/p/10444866.html
我当时遇到这个问题的时候很懵,各种度娘谷歌,始终找不到解决办法。无奈,只有断点跟源码一步一步的看,最终找到了问题所在。然后根据自己有限的思维和经验修改了,下面上代码。
1 model modeldata = repositoryservice.getmodel(modelid); 2 repositoryservice.savemodel(modeldata); 3 objectnode modelnode = (objectnode) new objectmapper() 4 .readtree(repositoryservice.getmodeleditorsource(modeldata.getid())); 5 bpmnmodel model = new bpmnjsonconverter().converttobpmnmodel(modelnode);
在converttobpmnmodel的386行有如下代码片段
1 // boundary events only contain attached ref id 2 for (process process : bpmnmodel.getprocesses()) { 3 postprocesselements(process, process.getflowelements()); 4 }
断点调试process.getflowelements()中可以看到此时监听已经没有了,问题就在这里,需要我们自己来解析一次监听,下面是我自己写的,只解析了tasklisteners,如有需要可自行扩展添加。
1 private collection<flowelement> addlostlistenter(collection<flowelement> elements, arraynode shapesarraynode) { 2 collection<flowelement> newelements=new arraylist<>(); 3 for (flowelement flowelement : elements) { 4 5 jsonnode thenode = null; 6 // 查找bpmn节点对应的xml节点 7 for (jsonnode node : shapesarraynode) { 8 jsonnode properties = node.get(editor_shape_properties); 9 if (properties != null) { 10 jsonnode overrideidnode = properties.get(property_override_id); 11 if (overrideidnode != null) { 12 if (stringutils.isnotempty(overrideidnode.astext())) { 13 if (overrideidnode.astext().equals(flowelement.getid())) { 14 thenode = node; 15 // 找到当前对应的xml节点跳出 16 break; 17 } 18 19 } else { 20 string resourceid = node.get(editor_shape_id).astext(); 21 if (stringutils.isnotempty(resourceid)) { 22 if (resourceid.equals(flowelement.getid())) { 23 thenode = node; 24 // 找到当前对应的xml节点跳出 25 break; 26 } 27 28 } 29 } 30 31 } else { 32 string resourceid = node.get(editor_shape_id).astext(); 33 if (stringutils.isnotempty(resourceid)) { 34 if (resourceid.equals(flowelement.getid())) { 35 thenode = node; 36 // 找到当前对应的xml节点跳出 37 break; 38 } 39 } 40 41 } 42 } 43 } 44 if (thenode != null&flowelement.getclass().equals(usertask.class)) { 45 // 获取tasklisteners节点 46 47 flowelement newflowelement= addtasklistenertoflowelement(flowelement,thenode); 48 newelements.add(newflowelement); 49 }else 50 { 51 newelements.add(flowelement); 52 } 53 } 54 return newelements; 55 }
然后更改386行处的代码如下:
1 // boundary events only contain attached ref id 2 for (process process : bpmnmodel.getprocesses()) { 3 4 collection<flowelement> elements = process.getflowelements(); 5 collection<flowelement> newelements=addlostlistenter(elements, shapesarraynode); 6 postprocesselements(process, newelements); 7 }
然后再调用就能解析到监听了,如果大家有更好的方法,欢迎讨论。