当前位置:网站首页>PM4PY - 分析建议怎样的BPMN可以转换成Process Tree
PM4PY - 分析建议怎样的BPMN可以转换成Process Tree
2022-04-22 13:07:00 【DreamingBetter】
背景
读取手动绘制的BPMN图,欲将其转换成Process Tree,必定经过先将其转换成WF-net。
然而不规范或者逻辑有分歧的BPMN无法转换成唯一的WF-net,也就无法转换成Process Tree。
Process Tree:流程树,简称PT;
WF-net:工作流网,workflow-net,简称WF-net(是Petri net的一类子网);
遇到的问题(一)

如上图所示,说所给的Petri net不是一个WF-net。其实正常不会引发这个报错,后来发现是BPMN图的标注用错了,事件结束的标注用成了中间事件,所以画好一个BPMN至少得细心,而且最好是符合良构编排的BPMN。可参考BPMN - 如何绘制符合良构编排的基础BPMN?
遇到的问题(二)

如上图所示,说WF-net解析失败。溯源,点报错行定位到报错源码位置。

可以看到引发该错误的是因为len(grouped_net.transitions) 不等于 1。
我们再来看看这个grouped_net到底是什么,定位到上面group_blocks_in_net函数。

其实就是对传过来的petri net做一个处理。返回处理后的petri net,所以这个grouped_net就是这个处理后的petri net。
那么这个grouped_net的transitions是什么,我们把这段代码拿出来打印,把相关信息打印看看。
下面读取了一个报上面转换失败错误的BPMN。
bpmn_graph = pm4py.read_bpmn('D:\\PM数据\\diagram (10).bpmn')
bpmn_graph = layouter.apply(bpmn_graph)
net, im, fm = bpmn_converter.apply(bpmn_graph)
print(net)
print()
grouped_net = tpt.group_blocks_in_net(net, parameters={
})
print(grouped_net.transitions)
print(len(grouped_net.transitions))

前三行是没处理过的petri net的属性
倒数第二行是处理过的transitions属性
最后一行是属性个数,也就是前面不等于1的那个值
为什么要等于1呢?我将上面错误的BPMN换成可以转换成功的BPMN

是的,他的个数就是1。细看它确实只有一个元组,里面第一个参数是标签,第二个参数是个字符串。
仔细看他这个字符串,其实它就是一个PT的结构,原来就是通过这一长串字符串来转换成PT的。
这就是为什么他len(grouped_net.transitions) 不等于 1,就无法将没处理过的petri net转换成PT的原因。
因为这个BPMN逻辑有分歧或者其他什么原因,导致他无法合并成1个完整的流程。
这些就是分析过程。
现象:
上面错误的BPMN中,我手动分析想将它画成一个PT会出现逻辑分歧,根本画不出来。因为发现其中的循环会导致在转换成吻合的PT时无法表达出来。
可能原因:
BPMN的XOR网关出现了嵌套,逻辑混乱有分歧。
结论:
避免网关嵌套。一个网关分叉出去后,要再合并回来。
注意事项:
- 尽量避免网关嵌套(就拿循环来说,这段循环里,最好是被两个网关包起来,不要在这个循环里的某个节点伸出一条到循环外,即不要节外生枝),可以参照下图的循环。

它可以转换成下图的PT,reinitiate request是触发循环的事件。

- 画的BPMN的XOR分叉和合并最好可以看成两个分支,最后两个分支合并。
如下图所示,网关1,可以将上面一整块看成是一个事件,这样就可以看成两个事件分叉,最后用合并网关将两个事件合并。其实这样也是避免嵌套。

*若对本文有疑问(例如:笔记中知识点或表达有误),欢迎指出,共同学习进步。
版权声明
本文为[DreamingBetter]所创,转载请带上原文链接,感谢
https://blog.csdn.net/DreamingBetter/article/details/124302183
边栏推荐
- 手把手教你配置哔哔点啥
- 树莓派压缩备份
- What kind of database products do we need
- 模型的权值以及loss或者中间变量变成了nan怎么回事
- The design method and type of flexible printed circuit board (PCB) are analyzed in detail
- C#中如何将图片添加为程序的资源
- R语言使用merge函数对两个dataframe数据进行左连接(Left join)
- 企业邮箱的边边角角
- Leetcode 83. Delete duplicate elements in the sorting linked list
- The difference between let, const and VaR
猜你喜欢
随机推荐
Digital business cloud electronic bidding system solution - standardize the political procurement process and improve work efficiency
The decision curve analysis (DCA) function is written in R language, and multiple decision curves are analyzed. DCA curves are visualized in the same image
Redis update
学习笔记——数字化工厂 4.21
Corners of enterprise mailbox
C#之SQL数据库操作(源码)
R语言使用dhyper函数生成超几何分布密度数据、使用plot函数可视化超几何分布密度数据(Hypergeometric Distribution)
The R language uses the rowsums function to calculate the row data sum value of all data rows in the dataframe
Leetcode 1608. Eigenvalues of special arrays
rsync远程同步
How to become an open source database developer?
奈飞大跌3500亿,爱优腾能靠涨价走出困境吗?
RedisConfig配置类
Redis advantages and disadvantages usage scenarios
R语言多条决策曲线分析DCA(Decision Curve Analysis)曲线可视化在同一图像中、使用png函数将决策曲线分析DCA可视化结果保存为png格式
RT thread configuration SPI flash (w25q256)
Oracle netsuite customers say | the "core secret script" for more detailed process control of China Film Barco
Mysql database has been started successfully, but show is not an internal or external command. How to solve it?
let、const、var的区别
阿里云换帅,争抢华为的地盘







