[原创]当前工作流设计中面临的一些有关问题
[原创]当前工作流设计中面临的一些问题
最近在国内一个叫E8工作流设计器的演示动画中,看到了一个流程,这个流程模型比较特殊,对比原来我们常见的普通流程模型,这个流程模型是比较奇怪的(说是奇怪,其实就是说这个流程图的图模型不是我们常见的20种流程模型之内的,但是20种模型真的就足以覆盖所有的流程模型吗?)
说到这里,我结合近年来做工作流系统设计遇到的类似情况,发现一个普遍存在的矛盾,我们给用户提供一个可以自由设计流程的设计器,那么用户就一定(不是可能,是一定)会用设计器画出各种各样的千奇百怪的流程图出来,除非我们事先就制定一个所谓的规范(类似XPDL,JBPL等)来约束用户的自定义行为,使其用流程设计器设计出来的自定义流程图是我们的流程引擎能够解析并正确处理的,这种事先制定流程规范的方式就是国外工作流系统设计普遍采用的方式,在最开始我一直认为(可能不仅仅是我)老外这样做,无非是想利用这些规范来形成行业垄断,纯粹是一种商业行为,是为了排挤竞争对手而搞的东东,但是现在看来,这种通过事先制定规范的方式不仅仅是出于商业上的考虑,而同时也是出于技术上和设计上的考虑,因为如果容许用户随意设计出各种各样的流程,那么这些各式各样的流程图是否都是可以被后台引擎所识别,所解析,所控制呢?
答案是否定的,也就是说我们不太可能设计开发出一个功能如此强大的引擎来处理所有的可能出现的用户自定义流程图(其实我个人开始认为是可以的,甚至想用人工智能来做,到现在这个想法也没有完全消失,嘿嘿),即使可以,这种引擎设计和开发起来都比较困难,从商业上来讲,成本会非常非常高,为了解决这不到5%出现几率的变态流程图的问题而设计的引擎模块的开发成本会占到整个系统开发总成本的50%甚至更高,这对绝大部分国内的软件开发企业来讲,都是无法接受的(开源项目组是否能够接受,我不敢乱说,但是jwfd就打算做这样的引擎出来,反正都是搞科学技术探索,失败了也无所谓,但是企业就不一样了,企业要生存,就必须考虑成本和效益)。。。。。。
那么这个矛盾是我们做流程设计遇到的一个问题,我们叫它A问题,而由A问题引出的另外一个问题,要解决上面A问题,除了制定规范来约束用户的自定义行为之外,那就需要加强流程引擎的设计,而我们现在看到得是包括微软WF在内的很多大型工作流平台系统都打算把这个问题推给流程系统开发人员-让流程设计人员自己来写用于驱动和控制流程图的引擎控制算法或者模块,而这和我们一开始设想的出现了些矛盾,包括我在内的很多工作流系统开发者都有这样的看法,即理想状态下流程引擎应该能够自动化的处理由设计器设计出来的各种流程,注意是自动化,那么现在的关键问题就集中在这个自动化三个字上面,如果不能够自动,而是手动,那么工作流系统的很多卖点就大打折扣了,但是如果因为要实现流程控制的自动化而又不得不限制用户的自定义设计,这样也会使用户感到不满意,也会影响商业上面的销售,在国内出现如此多工作流产品的以至于各个厂家开始打价格战的时候,我们是否应该考虑下把上面讲的那个自定义规范和自动化处理的矛盾进行一些调和呢?即一方面增强流程控制的自动化,而另外一方面在设计器上面对用户的设计行为做一些规范性的限制,打句官腔就是两手抓,两手都要硬,同时在这两个方面加强,矛盾就会逐渐化解,当然这个矛盾不可能短期内就完美的得到解决,这就需要大家一起多探讨,多商量,多思考,多做实事,少打官腔。。。
这个预判断的思路不错啊,我没说不支持自己做引擎研究啥的哈。
我的意思是,从目前的理论上可以知道,没有你说的那种可以解析任意流程图型(随意定义的)工作流。
你可以设计个很power的工作流,你可以扩大现有工作流的模型,但即使这样,新模型依然存在约束,而非任意灵活。
而且扩大后的模型算法将变的很复杂,比如你上述的算法,要进行预判断的(貌似大学的时候学到过这个向前预处理一步的状态机,具体叫啥给忘了)。而相对复杂的模型,所需要的语法就变得复杂了,就不能面向最终用户来自定义了。
抽象一点说,你可以认为C++和java都是一种流程语言,他们通过循环、顺序、选择三种基本模式来处理多样化的流程,使我们可以在它的基础上实现各种功能。当然,他们的语法就很复杂了,就不是一般的人能用的了。我不知道这样说是否能表明我的意思。
从数学的闭包理论上讲,如果你基于java语言上开发一个新语言,那么这个新语言的最大功能集合等同于java语言本身。
说的我自己都觉得有点晕了。对楼主的精神是支持的,希望不走弯路
这个地址去下载 http://download.****.net/source/954819
另外图论和算法设计的书籍应该准备几本,到时候要用到
你这个劲头让我想起我的一个死党,哈哈,加油加油!!不能发明AI,也能搞个牛的工作流
搞JAVA工作流的朋友也应该关注下wf工作流,下面介绍位这方面的专家 wxwinter
他的博客 http://www.cnblogs.com/foundation/
搞JAVA工作流的朋友也应该关注下wf工作流,下面介绍位这方面的专家 wxwinter
他的博客 http://www.cnblogs.com/foundation/
收藏起来![[原创]当前工作流设计中面临的一些有关问题 [原创]当前工作流设计中面临的一些有关问题](/default/index/img?u=L2ltYWdlcy9zbWlsZXMvaWNvbl9pZGVhLmdpZg==)
搞JAVA工作流的朋友也应该关注下wf工作流,下面介绍位这方面的专家 wxwinter
他的博客 http://www.cnblogs.com/foundation/
收藏起来![[原创]当前工作流设计中面临的一些有关问题 [原创]当前工作流设计中面临的一些有关问题](/default/index/img?u=L2ltYWdlcy9zbWlsZXMvaWNvbl9pZGVhLmdpZg==)
这位WXWINTER同志在他的博客中,提出了规则引擎在工作流设计中的应用,这点比较有趣。。。。对于并行路由的选择和算法,应用规则引擎是个不错的思路。。。。。
为此,我专门开发了IK-Expression表达式引擎。从实用层面上看,最终用户对流程的修订是很有限的,给他们几个下拉框,或者选择框,最多一个写简单算式的输入框,就能够满足绝大多树的需求了。个人工作经验。
为此,我专门开发了IK-Expression表达式引擎。从实用层面上看,最终用户对流程的修订是很有限的,给他们几个下拉框,或者选择框,最多一个写简单算式的输入框,就能够满足绝大多树的需求了。个人工作经验。
嘿嘿,去年自己用antrl写了一个语法解析器,早知道就用您的作品了,哎,又造了一个轮子,我总喜欢自己造轮子。。。请您多多指教
============================================================================
本模块简称JGAM 是 jwfd GrammarAnalysis module (JWFD语法分析模块) 的缩写
用于JWFD或者其它流程系统中处理用户自定义的公式和脚本语言的模块
本模块使用开源软件ANTLR-3.0为基础,经过COMSCI对语法文件的修改而成,适用于各种流程引擎,可以结合JWFD使用也可以嵌入到其它JAVA系统中使用
使用方法:
用户只需要在自己的系统中调用GrammarInterface类中的ScriptAnalysis()的方法即可,通过在 ScriptAnalysis()方法中把string参数STR赋值为公式或者脚本
具体公式和脚本例子请参考代码中GrammarInterface类的方法说明
请将压缩包中的antlr-3.0.jar文件放在项目的JAR库中...
请用户根据项目具体情况自行修改类的package路径,默认路径为 org.jwfd.workflow.GrammarAnalysis
=======================================================
下载地址 http://download.****.net/source/1777990
第一次发帖,不谈技术。不过要先鄙视一下linliangyi2007,学会说话才能走得更远。
最近在国内一个叫E8工作流设计器的演示动画中,看到了一个流程,这个流程模型比较特殊,对比原来我们常见的普通流程模型,这个流程模型是比较奇怪的(说是奇怪,其实就是说这个流程图的图模型不是我们常见的20种流程模型之内的,但是20种模型真的就足以覆盖所有的流程模型吗?)
说到这里,我结合近年来做工作流系统设计遇到的类似情况,发现一个普遍存在的矛盾,我们给用户提供一个可以自由设计流程的设计器,那么用户就一定(不是可能,是一定)会用设计器画出各种各样的千奇百怪的流程图出来,除非我们事先就制定一个所谓的规范(类似XPDL,JBPL等)来约束用户的自定义行为,使其用流程设计器设计出来的自定义流程图是我们的流程引擎能够解析并正确处理的,这种事先制定流程规范的方式就是国外工作流系统设计普遍采用的方式,在最开始我一直认为(可能不仅仅是我)老外这样做,无非是想利用这些规范来形成行业垄断,纯粹是一种商业行为,是为了排挤竞争对手而搞的东东,但是现在看来,这种通过事先制定规范的方式不仅仅是出于商业上的考虑,而同时也是出于技术上和设计上的考虑,因为如果容许用户随意设计出各种各样的流程,那么这些各式各样的流程图是否都是可以被后台引擎所识别,所解析,所控制呢?
答案是否定的,也就是说我们不太可能设计开发出一个功能如此强大的引擎来处理所有的可能出现的用户自定义流程图(其实我个人开始认为是可以的,甚至想用人工智能来做,到现在这个想法也没有完全消失,嘿嘿),即使可以,这种引擎设计和开发起来都比较困难,从商业上来讲,成本会非常非常高,为了解决这不到5%出现几率的变态流程图的问题而设计的引擎模块的开发成本会占到整个系统开发总成本的50%甚至更高,这对绝大部分国内的软件开发企业来讲,都是无法接受的(开源项目组是否能够接受,我不敢乱说,但是jwfd就打算做这样的引擎出来,反正都是搞科学技术探索,失败了也无所谓,但是企业就不一样了,企业要生存,就必须考虑成本和效益)。。。。。。
那么这个矛盾是我们做流程设计遇到的一个问题,我们叫它A问题,而由A问题引出的另外一个问题,要解决上面A问题,除了制定规范来约束用户的自定义行为之外,那就需要加强流程引擎的设计,而我们现在看到得是包括微软WF在内的很多大型工作流平台系统都打算把这个问题推给流程系统开发人员-让流程设计人员自己来写用于驱动和控制流程图的引擎控制算法或者模块,而这和我们一开始设想的出现了些矛盾,包括我在内的很多工作流系统开发者都有这样的看法,即理想状态下流程引擎应该能够自动化的处理由设计器设计出来的各种流程,注意是自动化,那么现在的关键问题就集中在这个自动化三个字上面,如果不能够自动,而是手动,那么工作流系统的很多卖点就大打折扣了,但是如果因为要实现流程控制的自动化而又不得不限制用户的自定义设计,这样也会使用户感到不满意,也会影响商业上面的销售,在国内出现如此多工作流产品的以至于各个厂家开始打价格战的时候,我们是否应该考虑下把上面讲的那个自定义规范和自动化处理的矛盾进行一些调和呢?即一方面增强流程控制的自动化,而另外一方面在设计器上面对用户的设计行为做一些规范性的限制,打句官腔就是两手抓,两手都要硬,同时在这两个方面加强,矛盾就会逐渐化解,当然这个矛盾不可能短期内就完美的得到解决,这就需要大家一起多探讨,多商量,多思考,多做实事,少打官腔。。。
10 楼
comsci
2009-10-31
另外请楼上说我数学没有学好的,指导下,下面的算法设计有什么问题
==========================================================================
本文主要介绍在JWFD工作流引擎设计中遇到的一个实际问题的解决方案,请参考我的博文"带条件选择的并行汇聚路由问题"中图例A2描述的情况 (http://comsci.iteye.com/blog/339756),我现在把我对图例A2的一个解决方案公布出来,请大家多指点
节点匹配搜索算法(用于解决标准对称流程图条件汇聚点运行控制参数的算法)
需要解决的问题:已知分支点的运行路径数值S,求流程图中一个汇聚点的实际访问(实际汇聚)数值,通过获取该数值,使得流程引擎控制器能够准确的控制流程的运转,即准确的控制对条件异步汇聚点放行的时机(对于该问题,国内另外一个开源工作流 Fireworkflow的作者非也有另外一个思路 请参考 http://www.fireflow.org/viewthread.php?tid=9&extra=page%3D3 )
算法设计思路: 对于标准的对称的流程图而言,一个汇聚点一般来讲是应该对应一个分支点的,也就是说汇聚支路数应该和它前面的分支支路数相吻合(当然,这只是对很规则的对称流程图模型来讲),那么如果在分支节点中如果出现了条件选择公式(或者智能脚本),那么从这个分支节点所分出来的支路,就不一定都会被选中(简单举例, 我们在分支节点中嵌入了一个条件表达式a>2,那么如果分支实际有三条支路,在流程运行过程中,a的数值大于2,符合嵌入的条件,三条支路其中的2 条就会运行下去,而另外一条就不会运行,这样一来,在该节点的后驱汇聚点那里,我们就需要知道具体运行下去的支路数到底是几条?怎么才能够获取这个支路数呢?我们在流程运行控制器(流程引擎)中加入一段算法,使得我们确定的知道一个条件汇聚点的前驱分支点是哪个节点,然后我们先计算一次嵌入条件公式,预先知道该前驱分支点具体要走几条支路,然后再把这个支路数值作为参数传递给用于控制条件汇聚点的控制器中,使得汇聚点按照实际运行的支路来判断是否该继续运行到下一个节点去,那么我们按照这个思路设计伪代码算法
混合伪代码5步描述法
1: 条件表达式解析函数 public java.util.ArrayList CFS(SID,GID)()
这个函数是流程控制器中用于解析流程嵌入的条件表达式,并根据流程的变量数值计算出流程嵌入公式的结果,函数参数SID是传递给流程控制器中的需要处理的节点ID,GID是流程图的ID,下面一致
2: 获取输入汇聚节点的所有前驱汇聚点函数 public java.util.ArrayList GAS(SID,GID)() 这个函数用于获取该节点前面出现的所有汇聚点
3: 获取输入汇聚节点的所有前驱分支点函数 public java.util.ArrayList GAJ(SID,GID)() 这个函数用于获取该节点前面出现的所有分支点
4: 对该节点的所有前驱分支点集合和前驱汇聚点集合进行计算,找出该汇聚节点的匹配分支点SSID public String GRN(GAS,GAJ,GID)() 节点匹配算法的实质是对称集合配对差算法
5: 在找到这个匹配的分支点SSID之后,我们就可以对其中嵌入的条件公式进行提前计算
public int PCSF(SSID,GID)(
CFS(SSID,GID)()
return K;
)
这样获得了一个int数值k,然后我们就在流程控制器中在流程汇聚点进行控制的过程中使用这个数值,那么前面提到得问题就这样初步解决了,离圆满的解决这个问题,我们又近了一步............
=======================================================================
==========================================================================
本文主要介绍在JWFD工作流引擎设计中遇到的一个实际问题的解决方案,请参考我的博文"带条件选择的并行汇聚路由问题"中图例A2描述的情况 (http://comsci.iteye.com/blog/339756),我现在把我对图例A2的一个解决方案公布出来,请大家多指点
节点匹配搜索算法(用于解决标准对称流程图条件汇聚点运行控制参数的算法)
需要解决的问题:已知分支点的运行路径数值S,求流程图中一个汇聚点的实际访问(实际汇聚)数值,通过获取该数值,使得流程引擎控制器能够准确的控制流程的运转,即准确的控制对条件异步汇聚点放行的时机(对于该问题,国内另外一个开源工作流 Fireworkflow的作者非也有另外一个思路 请参考 http://www.fireflow.org/viewthread.php?tid=9&extra=page%3D3 )
算法设计思路: 对于标准的对称的流程图而言,一个汇聚点一般来讲是应该对应一个分支点的,也就是说汇聚支路数应该和它前面的分支支路数相吻合(当然,这只是对很规则的对称流程图模型来讲),那么如果在分支节点中如果出现了条件选择公式(或者智能脚本),那么从这个分支节点所分出来的支路,就不一定都会被选中(简单举例, 我们在分支节点中嵌入了一个条件表达式a>2,那么如果分支实际有三条支路,在流程运行过程中,a的数值大于2,符合嵌入的条件,三条支路其中的2 条就会运行下去,而另外一条就不会运行,这样一来,在该节点的后驱汇聚点那里,我们就需要知道具体运行下去的支路数到底是几条?怎么才能够获取这个支路数呢?我们在流程运行控制器(流程引擎)中加入一段算法,使得我们确定的知道一个条件汇聚点的前驱分支点是哪个节点,然后我们先计算一次嵌入条件公式,预先知道该前驱分支点具体要走几条支路,然后再把这个支路数值作为参数传递给用于控制条件汇聚点的控制器中,使得汇聚点按照实际运行的支路来判断是否该继续运行到下一个节点去,那么我们按照这个思路设计伪代码算法
混合伪代码5步描述法
1: 条件表达式解析函数 public java.util.ArrayList CFS(SID,GID)()
这个函数是流程控制器中用于解析流程嵌入的条件表达式,并根据流程的变量数值计算出流程嵌入公式的结果,函数参数SID是传递给流程控制器中的需要处理的节点ID,GID是流程图的ID,下面一致
2: 获取输入汇聚节点的所有前驱汇聚点函数 public java.util.ArrayList GAS(SID,GID)() 这个函数用于获取该节点前面出现的所有汇聚点
3: 获取输入汇聚节点的所有前驱分支点函数 public java.util.ArrayList GAJ(SID,GID)() 这个函数用于获取该节点前面出现的所有分支点
4: 对该节点的所有前驱分支点集合和前驱汇聚点集合进行计算,找出该汇聚节点的匹配分支点SSID public String GRN(GAS,GAJ,GID)() 节点匹配算法的实质是对称集合配对差算法
5: 在找到这个匹配的分支点SSID之后,我们就可以对其中嵌入的条件公式进行提前计算
public int PCSF(SSID,GID)(
CFS(SSID,GID)()
return K;
)
这样获得了一个int数值k,然后我们就在流程控制器中在流程汇聚点进行控制的过程中使用这个数值,那么前面提到得问题就这样初步解决了,离圆满的解决这个问题,我们又近了一步............
=======================================================================
11 楼
baozhengw999
2009-10-31
本人已开始学习工作流了,在工作流研究领域,comsci算是老前辈了。JWFD有许多地方值得我们深入学习和研究。
12 楼
ysjhbukn
2009-10-31
永远的支持你....comsci会像你们学习的..
13 楼
fredguo
2009-10-31
我从事流程系统的开发已经一年多了,的确遇到很多楼主所说的问题,也想过要自己开发一个流程引擎,但在很多方面的知识与经验还很不足,请问楼主,在哪里可以找到好的流程设计相关的材料
14 楼
linliangyi2007
2009-10-31
comsci 写道
另外请楼上说我数学没有学好的,指导下,下面的算法设计有什么问题
==========================================================================
本文主要介绍在JWFD工作流引擎设计中遇到的一个实际问题的解决方案,请参考我的博文"带条件选择的并行汇聚路由问题"中图例A2描述的情况 (http://comsci.iteye.com/blog/339756),我现在把我对图例A2的一个解决方案公布出来,请大家多指点
节点匹配搜索算法(用于解决标准对称流程图条件汇聚点运行控制参数的算法)
需要解决的问题:已知分支点的运行路径数值S,求流程图中一个汇聚点的实际访问(实际汇聚)数值,通过获取该数值,使得流程引擎控制器能够准确的控制流程的运转,即准确的控制对条件异步汇聚点放行的时机(对于该问题,国内另外一个开源工作流 Fireworkflow的作者非也有另外一个思路 请参考 http://www.fireflow.org/viewthread.php?tid=9&extra=page%3D3 )
算法设计思路: 对于标准的对称的流程图而言,一个汇聚点一般来讲是应该对应一个分支点的,也就是说汇聚支路数应该和它前面的分支支路数相吻合(当然,这只是对很规则的对称流程图模型来讲),那么如果在分支节点中如果出现了条件选择公式(或者智能脚本),那么从这个分支节点所分出来的支路,就不一定都会被选中(简单举例, 我们在分支节点中嵌入了一个条件表达式a>2,那么如果分支实际有三条支路,在流程运行过程中,a的数值大于2,符合嵌入的条件,三条支路其中的2 条就会运行下去,而另外一条就不会运行,这样一来,在该节点的后驱汇聚点那里,我们就需要知道具体运行下去的支路数到底是几条?怎么才能够获取这个支路数呢?我们在流程运行控制器(流程引擎)中加入一段算法,使得我们确定的知道一个条件汇聚点的前驱分支点是哪个节点,然后我们先计算一次嵌入条件公式,预先知道该前驱分支点具体要走几条支路,然后再把这个支路数值作为参数传递给用于控制条件汇聚点的控制器中,使得汇聚点按照实际运行的支路来判断是否该继续运行到下一个节点去,那么我们按照这个思路设计伪代码算法
混合伪代码5步描述法
1: 条件表达式解析函数 public java.util.ArrayList CFS(SID,GID)()
这个函数是流程控制器中用于解析流程嵌入的条件表达式,并根据流程的变量数值计算出流程嵌入公式的结果,函数参数SID是传递给流程控制器中的需要处理的节点ID,GID是流程图的ID,下面一致
2: 获取输入汇聚节点的所有前驱汇聚点函数 public java.util.ArrayList GAS(SID,GID)() 这个函数用于获取该节点前面出现的所有汇聚点
3: 获取输入汇聚节点的所有前驱分支点函数 public java.util.ArrayList GAJ(SID,GID)() 这个函数用于获取该节点前面出现的所有分支点
4: 对该节点的所有前驱分支点集合和前驱汇聚点集合进行计算,找出该汇聚节点的匹配分支点SSID public String GRN(GAS,GAJ,GID)() 节点匹配算法的实质是对称集合配对差算法
5: 在找到这个匹配的分支点SSID之后,我们就可以对其中嵌入的条件公式进行提前计算
public int PCSF(SSID,GID)(
CFS(SSID,GID)()
return K;
)
这样获得了一个int数值k,然后我们就在流程控制器中在流程汇聚点进行控制的过程中使用这个数值,那么前面提到得问题就这样初步解决了,离圆满的解决这个问题,我们又近了一步............
=======================================================================
==========================================================================
本文主要介绍在JWFD工作流引擎设计中遇到的一个实际问题的解决方案,请参考我的博文"带条件选择的并行汇聚路由问题"中图例A2描述的情况 (http://comsci.iteye.com/blog/339756),我现在把我对图例A2的一个解决方案公布出来,请大家多指点
节点匹配搜索算法(用于解决标准对称流程图条件汇聚点运行控制参数的算法)
需要解决的问题:已知分支点的运行路径数值S,求流程图中一个汇聚点的实际访问(实际汇聚)数值,通过获取该数值,使得流程引擎控制器能够准确的控制流程的运转,即准确的控制对条件异步汇聚点放行的时机(对于该问题,国内另外一个开源工作流 Fireworkflow的作者非也有另外一个思路 请参考 http://www.fireflow.org/viewthread.php?tid=9&extra=page%3D3 )
算法设计思路: 对于标准的对称的流程图而言,一个汇聚点一般来讲是应该对应一个分支点的,也就是说汇聚支路数应该和它前面的分支支路数相吻合(当然,这只是对很规则的对称流程图模型来讲),那么如果在分支节点中如果出现了条件选择公式(或者智能脚本),那么从这个分支节点所分出来的支路,就不一定都会被选中(简单举例, 我们在分支节点中嵌入了一个条件表达式a>2,那么如果分支实际有三条支路,在流程运行过程中,a的数值大于2,符合嵌入的条件,三条支路其中的2 条就会运行下去,而另外一条就不会运行,这样一来,在该节点的后驱汇聚点那里,我们就需要知道具体运行下去的支路数到底是几条?怎么才能够获取这个支路数呢?我们在流程运行控制器(流程引擎)中加入一段算法,使得我们确定的知道一个条件汇聚点的前驱分支点是哪个节点,然后我们先计算一次嵌入条件公式,预先知道该前驱分支点具体要走几条支路,然后再把这个支路数值作为参数传递给用于控制条件汇聚点的控制器中,使得汇聚点按照实际运行的支路来判断是否该继续运行到下一个节点去,那么我们按照这个思路设计伪代码算法
混合伪代码5步描述法
1: 条件表达式解析函数 public java.util.ArrayList CFS(SID,GID)()
这个函数是流程控制器中用于解析流程嵌入的条件表达式,并根据流程的变量数值计算出流程嵌入公式的结果,函数参数SID是传递给流程控制器中的需要处理的节点ID,GID是流程图的ID,下面一致
2: 获取输入汇聚节点的所有前驱汇聚点函数 public java.util.ArrayList GAS(SID,GID)() 这个函数用于获取该节点前面出现的所有汇聚点
3: 获取输入汇聚节点的所有前驱分支点函数 public java.util.ArrayList GAJ(SID,GID)() 这个函数用于获取该节点前面出现的所有分支点
4: 对该节点的所有前驱分支点集合和前驱汇聚点集合进行计算,找出该汇聚节点的匹配分支点SSID public String GRN(GAS,GAJ,GID)() 节点匹配算法的实质是对称集合配对差算法
5: 在找到这个匹配的分支点SSID之后,我们就可以对其中嵌入的条件公式进行提前计算
public int PCSF(SSID,GID)(
CFS(SSID,GID)()
return K;
)
这样获得了一个int数值k,然后我们就在流程控制器中在流程汇聚点进行控制的过程中使用这个数值,那么前面提到得问题就这样初步解决了,离圆满的解决这个问题,我们又近了一步............
=======================================================================
这个预判断的思路不错啊,我没说不支持自己做引擎研究啥的哈。
我的意思是,从目前的理论上可以知道,没有你说的那种可以解析任意流程图型(随意定义的)工作流。
你可以设计个很power的工作流,你可以扩大现有工作流的模型,但即使这样,新模型依然存在约束,而非任意灵活。
而且扩大后的模型算法将变的很复杂,比如你上述的算法,要进行预判断的(貌似大学的时候学到过这个向前预处理一步的状态机,具体叫啥给忘了)。而相对复杂的模型,所需要的语法就变得复杂了,就不能面向最终用户来自定义了。
抽象一点说,你可以认为C++和java都是一种流程语言,他们通过循环、顺序、选择三种基本模式来处理多样化的流程,使我们可以在它的基础上实现各种功能。当然,他们的语法就很复杂了,就不是一般的人能用的了。我不知道这样说是否能表明我的意思。
从数学的闭包理论上讲,如果你基于java语言上开发一个新语言,那么这个新语言的最大功能集合等同于java语言本身。
说的我自己都觉得有点晕了。对楼主的精神是支持的,希望不走弯路
15 楼
comsci
2009-11-01
嘿嘿,包括图灵在内的很多计算机科学家其实对计算机的一个终极梦想就是想让计算机有朝一日能够成为处理类似那种非常非常复杂的智能问题的一种工具,这是我们的梦想,只不过现在还无法实现,但是并不意味着永远无法实现。。。大家一起向着这个目标努力吧。。。。。
16 楼
comsci
2009-11-01
fredguo 写道
我从事流程系统的开发已经一年多了,的确遇到很多楼主所说的问题,也想过要自己开发一个流程引擎,但在很多方面的知识与经验还很不足,请问楼主,在哪里可以找到好的流程设计相关的材料
这个地址去下载 http://download.****.net/source/954819
另外图论和算法设计的书籍应该准备几本,到时候要用到
17 楼
comsci
2009-11-01
其实工作流的使用领域是多方面的,也是多个层次的,不同的企业,不同的行业对工作流的侧重点不同,关注点也不同,所以我们在设计工作流系统的时候,还是应该在思想里面准备多套方案和多个设计思想,根据情况来使用,而不是以为用单个设计方法就能够解决问题,这就更需要我们吸纳不同的工作流设计思想,兼收并蓄
18 楼
pocketduck
2009-11-02
我做过3个行业,工作流是第一个,当时认为工作流非常非常重要,几乎无处不在,但是接触的后两个领域(视频点播,电子商务),发现其他领域会更加关心本行的核心业务.工作流概念都会被淡化(其实也都是存在的).我要表达的是,工作流本身非常复杂,从商业上来说做一个成熟的产品成本很高,但是在很多其他领域会把资金投到核心业务上去,而在工作流上只能投入很少的一部分.也就是说我们要花很高的成本去研究工作流而只能获得很低的回报,我认为这个矛盾也是现在工作流发展的一大瓶颈.除非工作流产品发展到一个成熟度很高的层次,成本才能将下来,但是谁来为这个发展过程砸钱呢?总结起来一句话:工作流发展前景在国内不容乐观
19 楼
comsci
2009-11-02
目前工作流的技术水平离企业真正需要的层次还有一定的距离,单纯从技术来讲,就流程的用户自定义与流程引擎的设计水平之间存在着明显的差距,而这种差距是需要时间,资金和技术的多重投入才能够弥补的,工作流技术也正是在这个过程中才会不断的成熟,工作流是个新技术,在这个领域中我们需要可持续的发展,而不是短平快的赚钱,用户和企业都需要对此有个正确的认识,而不应该仅仅把它当做一个赚快钱的工具和机会,也只有这样这个蛋糕才能够吃得长久。。。。。
20 楼
linliangyi2007
2009-11-02
comsci 写道
嘿嘿,包括图灵在内的很多计算机科学家其实对计算机的一个终极梦想就是想让计算机有朝一日能够成为处理类似那种非常非常复杂的智能问题的一种工具,这是我们的梦想,只不过现在还无法实现,但是并不意味着永远无法实现。。。大家一起向着这个目标努力吧。。。。。
你这个劲头让我想起我的一个死党,哈哈,加油加油!!不能发明AI,也能搞个牛的工作流
21 楼
comsci
2009-11-02
搞JAVA工作流的朋友也应该关注下wf工作流,下面介绍位这方面的专家 wxwinter
他的博客 http://www.cnblogs.com/foundation/
22 楼
linliangyi2007
2009-11-02
comsci 写道
搞JAVA工作流的朋友也应该关注下wf工作流,下面介绍位这方面的专家 wxwinter
他的博客 http://www.cnblogs.com/foundation/
收藏起来
23 楼
comsci
2009-11-04
linliangyi2007 写道
comsci 写道
搞JAVA工作流的朋友也应该关注下wf工作流,下面介绍位这方面的专家 wxwinter
他的博客 http://www.cnblogs.com/foundation/
收藏起来
这位WXWINTER同志在他的博客中,提出了规则引擎在工作流设计中的应用,这点比较有趣。。。。对于并行路由的选择和算法,应用规则引擎是个不错的思路。。。。。
24 楼
comsci
2009-11-08
工作流给用户自定义会对流程运行控制带来一定的难度,这就导致流程运行自动控制器的出现,如果工作流不给用户提供自定义,仅仅面向程序员等开发人员,那么流程运行的自动控制部分就变成开发人员自己编写的流程运行控制模块,总之,这个这个自动运行控制模块是躲不掉的。。。。。。。
25 楼
linliangyi2007
2009-11-08
comsci 写道
工作流给用户自定义会对流程运行控制带来一定的难度,这就导致流程运行自动控制器的出现,如果工作流不给用户提供自定义,仅仅面向程序员等开发人员,那么流程运行的自动控制部分就变成开发人员自己编写的流程运行控制模块,总之,这个这个自动运行控制模块是躲不掉的。。。。。。。
为此,我专门开发了IK-Expression表达式引擎。从实用层面上看,最终用户对流程的修订是很有限的,给他们几个下拉框,或者选择框,最多一个写简单算式的输入框,就能够满足绝大多树的需求了。个人工作经验。
26 楼
comsci
2009-11-09
linliangyi2007 写道
comsci 写道
工作流给用户自定义会对流程运行控制带来一定的难度,这就导致流程运行自动控制器的出现,如果工作流不给用户提供自定义,仅仅面向程序员等开发人员,那么流程运行的自动控制部分就变成开发人员自己编写的流程运行控制模块,总之,这个这个自动运行控制模块是躲不掉的。。。。。。。
为此,我专门开发了IK-Expression表达式引擎。从实用层面上看,最终用户对流程的修订是很有限的,给他们几个下拉框,或者选择框,最多一个写简单算式的输入框,就能够满足绝大多树的需求了。个人工作经验。
嘿嘿,去年自己用antrl写了一个语法解析器,早知道就用您的作品了,哎,又造了一个轮子,我总喜欢自己造轮子。。。请您多多指教
============================================================================
本模块简称JGAM 是 jwfd GrammarAnalysis module (JWFD语法分析模块) 的缩写
用于JWFD或者其它流程系统中处理用户自定义的公式和脚本语言的模块
本模块使用开源软件ANTLR-3.0为基础,经过COMSCI对语法文件的修改而成,适用于各种流程引擎,可以结合JWFD使用也可以嵌入到其它JAVA系统中使用
使用方法:
用户只需要在自己的系统中调用GrammarInterface类中的ScriptAnalysis()的方法即可,通过在 ScriptAnalysis()方法中把string参数STR赋值为公式或者脚本
具体公式和脚本例子请参考代码中GrammarInterface类的方法说明
请将压缩包中的antlr-3.0.jar文件放在项目的JAR库中...
请用户根据项目具体情况自行修改类的package路径,默认路径为 org.jwfd.workflow.GrammarAnalysis
=======================================================
下载地址 http://download.****.net/source/1777990
27 楼
comsci
2009-11-11
实际上,如果一个自定义流程设计器交给用户设计流程,用人工的方法设计出来的流程图的规模是非常有限的,如果流程规模庞大,节点数量大,连接复杂,那么这种人工设计流程图的方式是否还可以进行下去,就值得进一步的探讨了,如果到时候这种方式不行,怎么办呢?
我想的办法是-通过用户给工作流系统制定若干个需求,流程系统根据需求,并结合事先输入的组织机构和权限结构,调用若干算法,在流程展示版面上面显示出系统自动生成的流程图,然后由用户根据实际情况对该流程图进行微调,直到满意为止,流程在运行过程中,系统和用户可以根据情况对流程进行实时的调整,包括拓扑结构的调整,权限的调整,内置脚本的调整。。。。。
我想的办法是-通过用户给工作流系统制定若干个需求,流程系统根据需求,并结合事先输入的组织机构和权限结构,调用若干算法,在流程展示版面上面显示出系统自动生成的流程图,然后由用户根据实际情况对该流程图进行微调,直到满意为止,流程在运行过程中,系统和用户可以根据情况对流程进行实时的调整,包括拓扑结构的调整,权限的调整,内置脚本的调整。。。。。
28 楼
comsci
2009-11-21
这篇文章的核心是阐述一个矛盾,并提出解决这个矛盾的方法。。。
29 楼
terryh
2009-11-22
linliangyi2007 写道
嗨~~一看就是数学没学好的。
从FSM有限状态机--》无限状态机--》图灵机,计算机的数学理论证明,楼主要的那种流程引擎在现有的计算机上是不可能的。
所谓的工作流模型实际上都是状态机的一种子集,并不是楼主想的为了垄断而产生的东西。说道垄断,就要说说开源,这点恰恰是国外比国内做好太多了。
倒是觉得Fireworkflow做的很务实。
从FSM有限状态机--》无限状态机--》图灵机,计算机的数学理论证明,楼主要的那种流程引擎在现有的计算机上是不可能的。
所谓的工作流模型实际上都是状态机的一种子集,并不是楼主想的为了垄断而产生的东西。说道垄断,就要说说开源,这点恰恰是国外比国内做好太多了。
倒是觉得Fireworkflow做的很务实。
第一次发帖,不谈技术。不过要先鄙视一下linliangyi2007,学会说话才能走得更远。