主持人:
欢迎大家参加火龙果在线讲座 ,今天的主题是《工作流引擎的原理与设计》。主 讲: 胡长诚 老师
银狐999: 大家好
主持人: 胡老师 目前就职于TIBCO中国研发中心,Infrastructure
Team,负责Application Deployment的底层对象模型框架的开发工作。主要关注于SOA,MDA,BPM,Workflow等领域,在J2EE领域有着多年构架和开发经验。J2EE开源应用的拥护者,huihoo开源组织成员。
主持人: 今天的会议共设了三个部分
银狐999: 这个问题是很多人都很有疑问的问题。在这里,我首先推荐大家看一本参考资料,是wfmc发布的《工作流参考模型》
主持人: 1. 大家提问,我们会收集6个问题,在会议最后为大家进行解答。(用时5分钟)
主持人: 2. 会议主题讨论(用时35分钟
)
主持人: 时间可以根据情况临时扩展
主持人: 3. 胡老师按照问题的优先级为大家解答问题,同时大家也可以发表自己的意见(每个问题20分钟)
火锅飘香: 胡老师好
银狐999: 很高兴能为与大家交流 工作流引擎 方面的内容和问题。
xiaojun: 工作流的引擎设计时主要考虑那些问题啊?
ygh: 胡老师好
xiaojun: 胡老师好
zyjie825: 主持人好,大家好!
henrysoft: 胡老师好,主持人好,大家好。
银狐999: 主持人已经简要介绍了我,这里我就不重复了,直接进入主题。这次主要是以交流为主,如果大家有什么问题,请及时的提。
银狐999: 今天的内容主要是围绕“微内核工作流引擎”来展开。在这个主题上,实际上是两个层面的问题:第一个是工作流引擎,第二个是“微内核”。
火锅飘香: 好的
火锅飘香: 那我提个问题
zhangch: 能介绍一下工作流引擎的设计思想吗?
银狐999: 行,从问题入手,更利于大家理解。
火锅飘香: 不太明白工作流引擎应该做什么
xiaojun: 工作六引擎主要解决的问题时什么?
银狐999: 在这份资料中,详细的诠释了什么是工作流引擎。不过,在这里,我稍微简要解释一下,什么是引擎。
henrysoft: 什么是“微内核”?
主持人: 好现在大家可以提问题,我整理一下
zhangch: 我看了胡老师的工作流引擎的分析模型,我想,要实现这里面的内容,我觉得无论从设计还是实现上,恐怕是比较困难的.
god: 好的
银狐999: ok,我们一个一个的解决问题,先来回答“火锅飘香”的什么是工作流引擎,如何?
zhangch: 好的.
银狐999: 然后是henrysoft的“微内核”问题。
银狐999: (4) 引擎主要是有几个基本功能:根据流程定义来维护流程实例的正确运行,并负责执行活动实例。也就是说,当我们将一个流程定义发布到引擎(或者工作流服务器之后),当客户启动流程(创建一个流程实例)到这个流程实例完整,整个生命周期是引擎来负责维护
火锅飘香: 好的
火锅飘香: 哦
火锅飘香: 那如果 流程需要变化呢
zhangch: 能介绍一下工作流引擎的设计思想吗?
火锅飘香: 会不会有引擎也变化的影响
银狐999: 引擎最基本的功能,包括:解析流程定义、创建流程实例、推动实例运行、维护活动实例(创建、运行、结束)。
火锅飘香: 有什么会造成引擎不支持的情况么
银狐999: 在现实实践过程中,一个引擎并不是不变的,很多需求都有可能涉及到对引擎早期实现的颠覆性修改。
银狐999: 不过,这个问题我暂时不继续深入,我们先围绕主题,来回答 henrysoft:
什么是“微内核”?
xiaojun: 好的
henrysoft: 好的。
xiaojun: 不同的流程对应的具体页面应该是不一样的吧!是不是增加一个流程,就得增加一套页面呢?
银狐999: 完全微内核的工作流引擎是很难实现的,因为目前并没有一个非常适合的标准,来规范引擎与其他系统之间的交互接口和数据,也因为一些因素的影响,引擎内部的组件差异也比较大。但是“微内核”是一个知道思想,实现过程中,会尽量往这方面考虑
银狐999: 一个微内核的引擎构架,大体会遵循如下的结构:http://p.blog.csdn.net/images/p_blog_csdn_net/james999/71e5159be8d7473eb89f2f730b5567ad.png
(大家可以参看这张图所示)。
火锅飘香: 说说为什么为内核
银狐999: 这张图只是从一个“高层次”的构架层来诠释引擎内部组件及与外部组件之间的关系,之中关系,我们会尽量用一些“服务性”接口来减少之间的耦合度。
火锅飘香: 微代表什么
henrysoft: 这里的微内核和操作系统微内核有什么异同
god: 是啊,什么叫微内核
银狐999: 这个问题,说真的我不会,不知道答案。因为我对操作系统了解不多,只是大学学过一点点皮毛,早忘了。
wangbing: 你好,最好的开元工作流系统是什么?
god: 胡老师,您说的微内核 指的是什么
银狐999: ok,这个问题不错,为什么微内核。—— 原因只有一个:为了更容易的抽象问题和扩展实现。
god: 工作流 微内核
银狐999: (9) 为何更容易抽象:这是因为再复杂的流程问题,无非抽象时候,就是保证从一个节点运行到另外一个节点,也就是流程调度的准确性问题。因为有这样的抽线,所以可以将“调度”问题进行尽可能的“底层实现”,而将业务化问题尽可能的“维护扩展”和“封装”,比如“回退”“跳跃”这些业务化问题,对于底层来说,无非就是“某一个节点应该被执行或处于某种状态”,至于为什么改是这个状态,则应该由上层封装来逐步解决。
henrysoft: 那是否可以这么理解,这里工作流引擎的微内核就是让引擎做的最少,所以灵活?
god: 粒度太小了,对于不同类型的应用,提供流程模板,是必要的么
god: 粒度小,所以灵活,呵呵,可以这么理解么
银狐999: 对,但不是最少,而是最有价值:也就是保证能够按照设计的流程,从一个节点运行的到一个节点,但引擎底层不需要关心每个节点具体干什么。----
god: 哦
mnm35: 您觉着微软的 workflow foundion 如何啊?
god: 不过我有个困惑,我们如何把握业务流程的粒度呢
银狐999: 抱歉,我是属于j2EE阵营的,对ms的东西不熟悉。
god: 如何 找到微内核的对应节点
银狐999: 回答为什么需要微内核:为了更容易扩展:这个似乎不需要过多的解释,一个工作流引擎首先是一个复杂的系统(维护实例生命周期),同时也需要与其他系统之间进行交互(组织、权限、工作项管理),可以需要依赖一些服务(数据存储、时间调度、消息服务)等等
god: 还有
火锅飘香: 阿
火锅飘香: 工作流如何和其他系统交互,能说说么
pengzhq: 有没有关于工作流交互方式,以及数据格式的标准
银狐999: 现在,我先按照我预先设想的一些内容,与大家交流,如果有问题,请及时的中途打断我,随时提问,随时解答。
火锅飘香: 好
火锅飘香: 大家慢慢来
火锅飘香: 呵呵
JietLi: 微内核?叫的名字好抽象啊,听着好像数据仓库的数据粒度细化
银狐999: (题外话)聊天室的速度似乎很慢,我这边几乎刷不出来大家提交的内容。
小试牛刀: 我觉得大家 可以到 银狐的网站 下点PDF资料 一边看一边 问
zhangch: 胡老师,你能系统的介绍一下,今天讲座的内容吗?
小试牛刀: http://www.javafox.org/mydoc/mydocwf.html
其实你们提的问题都在这里
银狐999: 刚才还有其他问题吗?
主持人: 问题收集如下:
问题1: zhangch: 能介绍一下工作流引擎的设计思想吗?
问题2: 火锅飘香: 不太明白工作流引擎应该做什么
问题3: xiaojun: 工作六引擎主要解决的问题时什么?
问题4: henrysoft: 什么是“微内核”?
问题5: xiaojun: 不同的流程对应的具体页面应该是不一样的吧!是不是增加一个流程,就得增加一套页面呢?
问题6:wangbing: 你好,最好的开源工作流系统是什么?
问题7: 火锅飘香: 工作流如何和其他系统交互
问题8: pengzhq: 有没有关于工作流交互方式,以及数据格式的标准
银狐999: 这几个问题还真不少,我就一个个的回答。
银狐999: 可以说,工作流引擎的设计思想:就是寻找到一套可以满足流程从一个节点运行到另一个节点的模型和算法,并利用一套实现,来尽可能的支持更多的服务和其它应用(诸如组织、工作列表等)。"
银狐999: 整个工作流引擎的设计,需要从很多方面考虑
银狐999: (1)你如何去描述流程,因为引擎需要解析流程定义(2)你采用什么样的模型来描述流程:活动图、状态机等等(3)你如何让流程以什么算从一个节点运行到另一个节点
银狐999: (4)流程实例和活动实例的状态 如何管理
银狐999: (5)流程实例数据如何管理
银狐999: (6)不同节点的执行方式和效果不同,自动节点,人工节点,路由节点,如何解决。
PengZhQ(彭振球): 我有一个问题.
银狐999: 这是考虑引擎设计之前,必须考虑清楚的问题,然后才能谈,如何设计引擎。
银狐999:
======================
接下来回答这个问题:不同的流程对应的具体页面应该是不一样的吧!是不是增加一个流程,就得增加一套页面呢?
======================
银狐999: 其实,这个跟引擎关系大,其实这是你的工作流系统如何解决“流程”与“表单”之间的关系和挂接问题。
Tao: 好的
PengZhQ(彭振球): 可不可以具体的页面分离, 引擎只关注接受的表单
银狐999: 一个流程实例,在运行过程中,可能所有节点,都采用同一张表单,也可能每个节点表单不一样。
银狐999: 但是,结构比较好的引擎,底层其实是不知道表单的存在与否的。
银狐999: 表单的处理和挂架,是由上层应用来负责绑定。
PengZhQ(彭振球): 你这里说的表单与工作流中的"相关数据"的概念是一样的吗
银狐999: 不是一个概念。
PengZhQ(彭振球): 有什么区别, 能解释一下吗.
银狐999: 表单是一个业务数据的概念,相关数据,表示的是一个流程内部的维护的变量数据。
PengZhQ(彭振球): 可不可以举一个现实中的例子.
银狐999: 我们说一个流程绑定一个表单,实际上,可能就是采用一个相关数据变量来记录这个表单的id;
也可能这个表单的几个元素,被提取出来,与相关数据做了 输入输出的 映射。
银狐999: 可以。我们就拿请假流程例子来说吧。
银狐999: 这个流程是这样的:申请--->项目经理审批--->部门经理审批--->总监---财务
zhang_can_hui@hotmail.com: 这两者应该还是有关系的吧。
银狐999: 在这个流程中有个分支,如果审批金额小于5000,部门经理就可以直接交给财务,而大于5000,必须交给总监。
于广华: 请假流程怎么还有金额?
银狐999: 我们假设这个流程只绑定一个表单 FormA。这个表单有几个元素:员工ID,申请金额,申请日期
,等等。
张晓军: 这个>5000还是<5000是根据表单中的某个属性来判断的吧!
银狐999: 错了,报销流程把,
银狐999: 呵呵
于广华: 好的
zhang_can_hui@hotmail.com: 我觉得表单中的数据与相关数据,他们之间的关系就好象是程序中的变量和值的关系
银狐999: 那么在这个流程中,我只需要设置一个相关数据变量:审批金额。
zhang_can_hui@hotmail.com: 这个变量的值应该来自表单的某项数据吧。
银狐999: 在运行过程中,员工填写的表单数据,只有“金额”这一项会被提取出来,传递给流程实例(因为流程实例需要这个相关变量值来判断分支),而其他的表单数据,则有表单系统自己维护存储。
乐天知命也: 哦,工作流引擎解析流程定义时根据节点的ID,触发节点,然后由节点调用页面?
乐天知命也: 哦,工作流引擎解析流程定义时根据节点的ID触发节点,然后由节点调用页面?
银狐999: 引擎不关心调用哪个界面,是工作流系统的其他组件负责,讲流程与表单绑定。--- 一般是与工作列表组件关系密切。
银狐999: 当然,在现实中,处理表单与流程之间的关系,也是很复杂的,如果把组织权限也牵扯进来,会更为复杂。-----
但这个问题,超出了本次讨论主题,我们暂且不深入。如果有兴趣,以后可以继续探讨。如何?
PengZhQ(彭振球): 好的.
银狐999:
=======================================
回答:最好的开源工作流系统是什么?
=======================================
银狐999: 怎么说呢,只能说,没有最好,只有合适不合适。
功夫: IBM 的WPS
银狐999: 也就是,合适不合适你当前的流程需求,也就是你当前客户对流程的应用需求。如果不合适,那么基于哪个开源引擎,扩展更容易,更容易实现客户的需求。
张金海: 说明现在没有一个引擎可以满足所有需求
张金海: 而这个正是我们追求的
银狐999: 事实上,这个原则,对商业流程产品也是符合。---- 目前在国内、国际上,都没与一套标准,来衡量一个工作流产品的优良与不足。
银狐999: 没有这样的引擎,或者说,很难。
银狐999: 引擎工作流系统的业务性比较强,所以与行业用户使用特色也会有所关系。
zhang_can_hui@hotmail.com: 能具体讲讲微内核设计的思想及每个功能组件具体要事项的功能吗?
张晓军: 也就是说没有一套能够满足各种客户需求的工作流引擎!?
银狐999: ok,稍后,我先把前面的问题讲完。
银狐999: 是的,没有。
银狐999: 也不可能有。
张晓军: 只能定制开发?
银狐999: 客户是要的是一个系统,而不是一个引擎。而且是一个适合的系统。
张晓军: 没有那种拖拉几下就好的吗?流程可以任意组合的?
张晓军: 哦!
张晓军: 了解
银狐999: 这个话题有些偏了,但是这是现实的情况。实施上,这么多年,我给客户实施的流程相互,都是基于我们的工作流系统之上,做了或多或少的扩展的
张晓军: 恩!
银狐999: 因为我是J2EE阵营的,所以对于开源工作流系统和引擎,关注度主要在java实现的这方面。
zhang_can_hui@hotmail.com: 我感觉目前的工作流产品从流程定义到应用,还是有很多的工作要做的。
银狐999: 个人比较推崇jBpm和OSWorkflow。
张晓军: 开源工作流系统和引擎哪呢个介绍几个吗?
银狐999: 另外,如果有兴趣研究工作流引擎,可以考虑再研究研究OBE 和YAWL。
张晓军: 可以介绍一下特点吗?
银狐999: ok,顺带就简要介绍一下。
张晓军: 我们好在宏观上把握
银狐999: 先说jbpm
银狐999: jbpm是一款基于活动图模型的工作流引擎
银狐999: 当然,现在也可以称其为系统,
银狐999: 有关jbpm的设计思想和架构,可以参考我的一篇blog,《jBpm引擎内核设计思想及构架》,在http://blog.csdn.net/james999
上有
银狐999: 这里就不多叙述,接下来讲讲OSWorkflow
功夫: 你们是自己开发的的工作流引擎吗?IBM的WPS已经实现了基于web service的流程定义、流程编排...,谈谈对它的看法吧
银狐999: OSWorkflow我研究的不是很多,但是这是一款非常灵活的工作流引擎,内部实现非常的简单,这也是其采用FSM模型的好处,完全依赖于客户选择Action来往前推进。
银狐999: 并且提供了大量的function接口和其它扩展接口,方便二次扩展。
银狐999: 只是osworkflow的设计器很不好使用。
PengZhQ(彭振球): 哪OSWorkflow这是一个很好的选择啊.
银狐999: 我对ibm的流程系统不了解,无从评价,但感觉其应该是基于bpel规范的。
Wallace.Zhang ★ ?Panda? ★: 实现bpel 然后有自己的拓展
银狐999: 这种bpel规范暂时不太适合国内应用,即使今年刚刚发布的bpel4people规范,增加了对人工处理的支持,但还是需要一些时间来实现和完善的
Wallace.Zhang ★ ?Panda? ★: 当然 这些拓展将来会不会成为新规范里面的标准
这就不好说了
银狐999: 刚才谈了jbpm和osworkflow,接下来谈谈OBE和YAWL
功夫: 你们是自己开发的的工作流引擎吗?引用了哪些框架组件、技术?
银狐999: OBE可以说是最早的开源引擎之一,但由于维护的不够尽力,自从2006年发布1.0之后几乎没有什么动作,而且构架有些庞杂,采用J2ee分布式结构,不是很灵活,扩展点比较少
银狐999: YAWL是Aalst大师主导的一款研究型工作流引擎,主要是用于研究工作流模式的,实际应用型价值不高,但是其基于Petri
Net的设计思想和实现,以及内部的一些算法,还是很值得参考和学习的。
银狐999: ok,就简要介绍这四款。
功夫: 你们是自己开发的的工作流引擎吗?引用了哪些框架组件、技术?有哪些优势
银狐999: 我开发过三个工作流引擎的了,从2002年开始,到现在。
银狐999: 这三个是不一样的,最早的那个是基于FSM的,内部实现比较简单,也没有考虑什么构架。
Tao: 好的
Tao: 问个问题
银狐999: 第二个是基于XPDL模型的,内部采用的Petri Net算法调度的,结构是尽量是考虑微内核的结构,就是如http://p.blog.csdn.net/images/p_blog_csdn_net/james999/71e5159be8d7473eb89f2f730b5567ad.png
这张图所示
银狐999: ok,请问。
Tao: 对于 那种存在多种可能的流程
Tao: 例如 可以先申请再包销,
Tao: 也可以先报销在 补充申请
Tao: 业务中需要多种可能的流程支持
Tao: 但是需要根据不同的流程进行提醒,而不是控制
Tao: 工作流引擎可以迟迟么
Tao: 支持么
银狐999: 我想,你的意思是,流程的有很多节点,可能某些节点会先执行,也可能会后执行。是这个意思吗?
Tao: 是的
Tao: 这种情况在大客户的业务系统中比较多见
Tao: 就是 需求很容易变化,需要灵活
银狐999: 这个问题不是引擎支持不支持的问题,而是系统支持不支持了。----- 如果你希望系统支持,就不许引擎提供一些额外的接口,允许从外部对某型活动实例的状态进行强制性更改,而不是由引擎内部依靠调度来更改。
银狐999: 就必须引擎提供一些额外的接口
Tao: 哦
银狐999: 我们可以强制更改实例的状态,但是一般很难更改 引擎的调度机制和算法。
Tao: 我原来想,如果这样可能经常配置流程,还有就是,对于这种状态机模式,引擎还是要考虑如何支持的
银狐999: 其实,任何引擎的内部,都有一个状态机。
Tao: 或者这样说,流程存在多种可能都是允许的,但是有不同的提示业务规则
Tao: 呵呵
Tao: 存在多种可能的流程,这个需要引擎考虑吗?
银狐999: 那些实例的变化,就是由状态机来影响的。只是这个状态机并不是非常明显的存在,更多的来说,是一种机制,是参考了状态机机制,每个引擎由自己的实现。
Tao: 恩,好的,理解了
Tao: 还有,如何控制工作流的支持范围
银狐999: 在设计引擎的时候需要考虑,但是在实现的时候,引擎不应该考虑有特殊的情况,只考虑“状态”“按照规则的调度”。
Tao: 因为 总要扩展和定制的,胡老师有什么建议
银狐999: 你所说的支持范围是什么意思?
Tao: 就是,很多行为都可以归入工作流的范畴,流入操作流程,业务流程,审批流程,
Tao: 可能存在多个级别,是否都提供支持,还是有所取舍
银狐999: 是需要有一些取舍的,工作流系统不是万能的,有些流程不一定可以很好的支持。
银狐999: 即使针对审批流程,有些审批需要会签,有些需要业务化规则的审批,有写会签带有权重,有些可能需要单独审批后运行@@@@
很多客户的场景不一样。但是工作流系统很难满足全部的要求,必须有所取舍
银狐999: 取舍不了的,就必须分析是在流程外部扩展,还是外部定制化实施。
Tao: 是啊
Tao: 工作流系统和外部系统的交互一般都可以采用那些方式呢?例如,刚才提到的数据影射,
Tao: 还有其他的么
银狐999: 这方面唯一把握:就是将客户的需求,与工作流系统所能支持的能力,做个分析比较。才能权衡。----
另外,尽量劝说客户采用简易规范的方式。
Tao: 基于活动图,状态机,PetriNet的工作流理论都有哪些不同呢
银狐999: 方式很多,消息传递,直接api调度,web service访问,等等。这个一般来说,现在已经不是很大太难的问题,甚至很多时候,会包装成统一的接口,调用这不关心采用哪种协议。
Tao: 有的时候会混淆,感觉不是很清楚
PengZhQ(彭振球): 我支持你的"简易规范方式". 这样程序的稳定性,
可靠性, 可操作性 会得到及大的提高.
Tao: 恩,也就是可以采用所有可利用的系统交互形式,
Tao: 这个会不会依赖于工作流引擎的提供,
银狐999: 所以要尽量微内核而,讲服务和调用都暴露在外围扩展。
PengZhQ(彭振球): 可以消息传递, web service 都可以放在外围扩展,
银狐999: 8月份的时候,写了篇《微内核过程引擎的设计思路和构架》,现在已经放在我的blog上了,http://blog.csdn.net/james999,可以看看,这里面诠释了在设计引擎的时候,需要考虑哪些问题,以及为什么需要考虑。
Tao: 还有一个,前段遇到一个这种案例,手里有工作流平台,开发人员不清楚如何从业务流程中进行工作流的提炼和映射
Tao: 能给些建议么
银狐999: 这个问题有两方面:
(1)需求分析人员没有搞清楚客户的流程
(2)开发人员对存在工作流系统(平台)不是很了解,或者不知道如何去开发。
Tao: 业务流程基本有的,开发也做过一些
Tao: 不过业务流程是一种凌乱的文字加图表达
银狐999: 这个问题也必须从这两方面来解决:尽可能与客户多沟通流程,因为客户一般很难一下子将流程描述的很清晰,需要比较长时间的沟通和交互
Tao: 存在多种流程的 交叉
银狐999: 第二:必须让开发人员尽快了解如何开发一个工作流应用,基于现有平台。
Tao: 恩
银狐999: 第三:根绝客户的需求,绘制最基本的流程,然后与客户再沟通,再绘制,再确认
银狐999: 反复几次。
Tao: 呵呵
Tao: 推荐UML
Tao: 还有就是有的时候,针对觉得交叉的流程很难理清
银狐999: 说实话,这种问题,如果有现存的流程设计器,就直接拿流程设计器来绘制客户所描述的流程,比用uml绘制效果会更好,呵呵。----
客户有时候很难懂开发人员绘制的uml图的,呵呵。
Tao: 流程设计器里面的也是UML的活动图
Tao: 呵呵
功夫: 用ppt比较好
张晓军: 交叉的流程一般是如何解决的?
PengZhQ(彭振球): 感觉现在有一些偏题了.
银狐999: 交叉型,动态型的流程应用,可能必须依赖于开发人员的理解了。---- 这种情况一般很难在流程图中绘制出来,必须在后台依靠代码实施来实现。
银狐999: 呵呵,是有些跑题了,不好意思。
Tao: 呵呵,不过也是关键问题,描述流程,虽然不在此次范围
银狐999: 主要是工作流牵扯的范围很多,呵呵。
张晓军: 关键就是交叉点在流程图显示的时候比较麻烦
Tao: 还有,流程的粒度如何把握,完全从用户的视角么
张晓军: 后退也是相当的麻烦
laser: 最好在线空间的交流可以允许是否自动滚屏,否则老往往上拉着看,跳来跳去的太累
银狐999: 是的,这必须依赖于详细的需求记录,以及开发人员的理解了。没有什么更好的办法。
银狐999: 今天跑题比较多,呵呵,不够有关工作流的很多资料,都在我的个人主页(http://www.javafox.org)和blog上有,有兴趣,可以读读。
银狐999: 也可以从 http://cid-1b933f11dd671a75.skydrive.live.com/browse.aspx/WorkflowResearch
下载一些工作流资料。
Tao: 好的
Tao: 不过没关系
Tao: 讨论问题,也需要一些连带分析
Tao: 专门研究引擎的人毕竟不是很多
PengZhQ(彭振球): 哪我想问一下,回退, 你们一般是怎么处理 的.
银狐999: 回退是个比较复杂的问题,直接回退,回退直接返回,分支到主枝,等等。
PengZhQ(彭振球): 是啊. 回退是一个很复杂的流程, 有简单回退, 有与业务相关的回滚.
银狐999: 但一般会做一些限制,内部实现来讲,主要是重新创建一个活动实例(在已经执行的节点上),这样便于记录运行轨迹历史,
银狐999: 至于数据,一般不会回退。
银狐999: 如果要,回退数据,对系统存储是个压力,而且一般客户也不要求回退数据。
PengZhQ(彭振球): 也就是说数据回退一般有一个反向工作流, 也许可以做到.
umlo@uml.com.cn: 时间快到了,大家还有什么问题吗
张晓军: 应该是要的,比如上个节点输入的信息有误,到本节点时,审核有问题肯定回退并让其修改,并带有本节点的相关修改意见
张晓军: 所以回退时,带有数据回退是非常常见的
Tao: 回退数据可以作为行为回退的结果
银狐999: 是的。
Tao: 这样是否需要定义每个活动的回退活动呢
银狐999: 这个看系统是如何支持的了
银狐999: 以及业务的权限和客户的要求。
PengZhQ(彭振球): 如果哪个活动与数据处理 相关, 哪是要定义回退活动.
Tao: 最后一个问题:请谈谈对基于关系数据库的工作流引擎的看法
银狐999: 这个问题我们以前探讨过,呵呵。
Tao: 个人觉得还是挺灵活的,而且简单
Tao: 呵呵
银狐999: 我的观点是:引擎与数据存储市没有关系的,引擎不关心存储结构,只关心对象。
Tao: 恩
银狐999: 至于如何存储,是存储服务层的事情。
Tao: 不同的观点:有的时候我们会直接通过数据实现流程,对象是一种内存影射
Tao: 呵呵
Tao: 好吧,有机会在深入探讨一下
银狐999: ok,时间也差不多了,希望这次讨论能给大家带来一丝的收获。
张晓军: 引擎设计时一般分几层啊?
银狐999: 有些问题回答的不是很到位,详细,希望见谅。
PengZhQ(彭振球): 以后多多联系.
Tao: 好的
Tao: 多谢胡老师
Tao: 受益匪浅
银狐999: 这个问题,请参看:http://blog.csdn.net/james999/archive/2007/09/17/1788724.aspx
银狐999: 呵呵。
张晓军: 恩!谢谢
银狐999: 谢谢大家参与讨论。
Tao: 经常读你的文章,觉得很不错
主持人: 时间差不多了,今天我们就讨论到这吧。感谢大家的参与,欢迎大家对我们的讲座提意见。
大家有什么意见可以在UML@UML.NET.CN的群里说,也可以给我发邮件:ZHGX@UML.NET.CN
Tao: 多写点啊,呵呵,
主持人: 也谢谢胡老师
主持人: 就到这里吧
|