胡长城(银狐999)BLOG

专注SOA,MDA,EAI,BPM,工作流,J2EE;个人主页http://www.javafox.org

用户操作
[即时聊天] [发私信] [加为好友]
银狐999ID:james999
568688次访问,排名70好友0人,关注者71
J2EE,Workflow,BPM,EAI,SOA,工作流
james999的文章
原创 187 篇
翻译 0 篇
转载 2 篇
评论 636 篇
银狐999的公告
个人主要工作流文档可从 javafox live网络硬盘下载

最近评论
j2eejia:最近也在看jbpm,谢谢。
看你简历也在中信网络干过,前辈
d_yang:反射, 是因为没用好.
downdoc2:把思路和一些方法多讲讲把
kwlong2008:来看看朋友,最近过的怎么样?俺的空间是介绍网站制作网站建设的,有时间也常去一下我的空间谢谢,来看看朋友,最近过的怎么样?俺的空间是介绍网站制作网站建设的,有时间也常去一下我的空间谢谢,
收藏
    相册
    50 Relational Blogs
    Hongsoft博客
    J2EE与ERP禅话
    Peter's Blog
    俠盜躶奔漢
    切尔斯基(RSS)
    动物园的猪
    胡奇
    赵斌BLog
    阿飞外传
    55 Workflow Preacher
    Ekkart Kindler
    Michael zur Muehlen
    Wil van der Aalst
    存档
    订阅我的博客
    XML聚合  FeedSky

    原创 OSWorkflow讲解系列(三)Function与workitem收藏

    新一篇: 老师,苍老了许多 | 旧一篇: OSWorkflow深层讲解系列(二)流程实例的结束之二

    接下来说说,如何利用OSWorkflow的function进行任务的分配:

          OSWorkflow
    是只是一个workflow engine的内核体。我们都说osworkflow非常的易扩展,但是这也同样说明了,用osworkflow去实现一个能够运行的工作流系统是非常繁琐的事情。繁琐并不是难,因为你要想实现一个流程,不得不自己去实现大量的conditionfunction

           既然说到工作流,那么肯定会涉及到“任务交给谁做”的问题。但是OSWorkflow压根就没有管这种需求,对于其来说,其提供了cf,如果再有什么额外的需求和功能,那么就扩展conditionfunction。于是,你不得不扩展一些function类去处理“角色”“任务分配”“提交任务”等等诸如此类的操作。

     

           在我的标题中提到了workitem,这个概念几乎在其他工作流引擎都有所体现,但是对osworkflow来说,这是一个空白区域。至于workitem的含义,请参考wfmc的《Terminology & Glossary》。

     

           OSWorkflow引擎只负责了“流程的运转”,当然这个运转会根据你所定义的Actioncondtion来判断。Funtionosworkflow来说,只是stepactionresult执行过程需要调用的功能,至于这个功能作什么,OSWorkflow并不关心,引擎只是负责提供几个参数接口。

     

    public interface FunctionProvider {

      public void execute(Map transientVars, Map args, PropertySet ps) throws WorkflowException;
    }

     

           所有的Function实现类都必须实现这个FunctionProvider接口中execute方法,而且能够处理的信息,也全部来自这个方法中的三个参数:

     

    transientVars

    这个是最为核心的参数,记录非常重要的一些对象,比如WorkflowContextWorkflowEntry,输入参数等等。

    args

    这个是function配置中的arg参数,具体请参考osworkflow dtd

    ps

    PropertySet对象,记录了流程实例所需要保存的数据,可以理解成osworkflow所描述的流程相关数据。

     

          




           
    具体transienVars中包含哪些对象,请参考 FunctionProvider api doc

     

           下面就说说如何利用Function进行任务的分配。

     

           个人建议你在Steppre-function中做处理,配置如下:

        <step id="4" name="Assign">

          <pre-functions>

            <function type="class">

              <arg name="class.name">nucleus.assign.AssignmentFunction</arg>

              <arg name="Participant">A</arg>

              <arg name="ParticipantType">role</arg>
              <arg name="actionID">22</arg>

            </function>

          </pre-functions>

          <actions>

             ······

          </actions>

        </step>

     

    看了这个配置形式,我想大家应该明白如何去处理。你可以在function中获取自己所定义的角色、根据角色获取人员、根据人员产生workitem······ 。你在function 所作的这一切操作对osworkflow engine来说都是透明的—— 你所产生的worklist所代表的含义只有你自己知道。

    其中我为什么会附加了一个arg属性:actionID?这是因为我需要告诉每一个workitem在其应该处理哪一个动作。 因为外部程序都是通过Workflow.doAction(long, int, java.util.Map) 这个接口来激活流程的运转或改变实例的状态。

     

    总体来说,利用osworkflow去实现一个完整的工作流例子,还是比较麻烦的。主要是要扩展和自己实现的太多。

    发表于 @ 2004年12月31日 11:03:00|评论(loading...)|编辑

    新一篇: 老师,苍老了许多 | 旧一篇: OSWorkflow深层讲解系列(二)流程实例的结束之二

    评论

    #wlb 发表于2004-12-31 11:31:00  IP: 211.97.133.*
    期待中……
    #不做浮躁的人 发表于2005-01-06 09:24:00  IP: 221.216.162.*
    哥们,我现在的需求是:教育局下达考试计划,那么每个学校就可以根据这个考试计划制定自己的考试计划,然后学校进行报名,审批,考场编排,录入成绩等(这些也是要工作流控制的),全部学校在成绩全部录入完毕,教育局才能做他的计划的成绩分析等操作。也就是说教育局初始工作流后,可能在某个操作产生子流,然后可能对子流进行判断。

    因为我现在系统的架构都是用spring+hibernate+webwork,我这样的需求能够用osworkflow来实现么?

    谢谢。
    #不做浮躁的人 发表于2005-01-06 09:24:00  IP: 221.216.162.*
    哥们,我现在的需求是:教育局下达考试计划,那么每个学校就可以根据这个考试计划制定自己的考试计划,然后学校进行报名,审批,考场编排,录入成绩等(这些也是要工作流控制的),全部学校在成绩全部录入完毕,教育局才能做他的计划的成绩分析等操作。也就是说教育局初始工作流后,可能在某个操作产生子流,然后可能对子流进行判断。

    因为我现在系统的架构都是用spring+hibernate+webwork,我这样的需求能够用osworkflow来实现么?

    谢谢。
    #银狐999 发表于2005-01-07 08:47:00  IP: 210.76.110.*
    这种情况比较难实现,主要难在两点:(1)涉及到子流程 (2)涉及到多个子流程的汇总。

    对于第一种情况,可以考虑采用function中去激活另外的流程的方式来完成;对osworkflow来说,没有子流程的概念,而且没有形参等之类的概念,比较难在流程之间进行数据交互。

    对于第二种情况,好像更加难了。好的方式我也没有想清楚。

    我建议你采用jBpm来实现你的系统。你说的这种情况,jBpm应该可以解决,但是对于多子流程实例的汇总,就需要走点弯路了。
    #不做浮躁的人  发表于2005-01-07 09:20:00  IP: 221.216.13.*
    胡兄,你能不能给我留个联系方式?我决定用osworkflow去扩展,但是我希望能得到你的帮助,看了你的 文章很受启发,希望我的想法能够得到你的论证。

    在多级行政管理的系统中,我说的这个需求是非常多的,至少我公司的系统都会有这样的需求。

    希望你能给我帮助。

    我的e-mail/msn:bjwulin@126.com
    #银狐999 发表于2005-01-07 10:06:00  IP: 210.76.110.*
    我的联系信箱 james-fly@vip.sina.com 。msn:fxciao2000@hotmail.com 。不过一般msn白天不上,晚上才用。如果你在北京,说不定还有见面的机会,我也在北京。呵呵。
    #dev 发表于2005-01-07 22:13:00  IP: 211.158.99.*
    确实,osworkflow中没有workitem的概念,要实现tasklist比较困难。osworkflow对于currentstep可执行活动的判断是基于condition的,condition给osworkflow带来了很强的扩展能力和适应性,但是也正因为此,要想扩展出一个tasklist同时又保留osworkflow在这方面的扩展性比较困难,目前我们还没有找到好的解决办法,不知道银狐似是否找到了。
    #银狐999 发表于2005-01-07 22:26:00  IP: 61.51.101.*
    到目前为止也没有找到比较好的处理方式。上面的方式只解决了一个点点问题,而且应用起来很麻烦。但如果我们把osworkflow看作只解决和只关心“流程”的运转的黑盒子,那么对于worklist来说,都应该是属于外围的扩展了。—— 我是比较倾向于这种处理方式的:核心引擎只负责流程的运转,至于外围的人员分配、权限、数据等等,都交给外设去 处理吧。—— 当然,从一个产品的角度来说,外设也应该提供的,也就是说,我们可以在osworkflow基础上扩展出一套不错的“外设”出来。不过,我还没有去尝试这么干,如果以后有时间,我希望去写一组外设插件出来。
    #herrysun 发表于2005-01-20 11:10:00  IP: 61.185.11.*
    请教一个问题,OSWorkflow和MVC框架,如Struts,最简单、最合理的整合方式是什么?比如,我们已经把OR/Mapping 框架和Struts整合起来了,可以很容易地实现数据库表的录入、修改、查询,现在就差工作流了,如果一个数据库表是在一个流程中完成所有数据的录入的,比如第一步填写字段a,第二步填写字段b,等等,怎样实现?
    #workmars 发表于2005-06-22 00:40:00  IP: 61.186.252.*
    文章介绍的好极了,目前我正在打算实现一个签字的流程,不知道有没有osworkflow的更多的介绍和例子!
    #lambxlamb 发表于2005-08-06 16:45:00  IP: 61.186.252.*
    需求:当前工作环节,可以任选几个下步处理部门,同时派给它们,后续做并发处理。用OSWorkflow如何实现?

    1、OSWorkflow的result只流向第一个判断为真的分支,对吗?
    2、split的后续steps是预先写死的吧,如果把各部门排列组合情况都罗列,是几何级数放大的?
    #匿名 发表于2005-09-19 11:38:00  IP: 211.100.21.*
    不可以扩展condition,通过数据库的相关内容判断所有学校是否全部录入,如果全部录入返回true执行教育局的工作么?我感觉如果教育局在派发的时候像银狐说的那样在post-function中激发新的流程,定义新的initial-action来转到新的step,在教育局派发的step里面写一个action,它的条件之一就是通过数据库的内容判断学校是否全部录入。可以不?

    绝对的班门弄斧,所以连名字都无耻的匿掉了
    #workitem 发表于2006-01-25 17:29:00  IP: 221.226.115.*
    workitem 应该由自己来外挂比较好
    workitem 是跟用户需求关联比较大的部分

    osworkflow 这样设计是合理的.
    #H 发表于2006-03-04 16:46:00  IP: 59.78.3.*
    如何个外挂法呢?
    #shipatrioc 发表于2006-03-10 14:47:00  IP: 10.40.43.*
    把工作项的生成放到pre-function里有些问题,因为第一个活动结束后,就需要生成工作项,派发工单.但pre-function是在后续的活动节点执行的.我目前的做法是在第一个活动节点的post-function来执行的,不方便的是需要添加很多逻辑判断,感觉像是把代码移到xml里了.
    #shipatrioc 发表于2006-03-10 14:55:00  IP: 10.40.43.*
    总之用了osworkflow感觉不是太爽,自己开发的东西太多,太复杂的流程它实现不了,太简单的倒不如自己写一套工单派发,自己维护一套状态.可能是我的理解有些狭隘吧,我加了银狐兄的msn,希望有空能交流交流.
    #pig345 发表于2008-05-29 00:03:19  IP: 123.113.120.*
    看你的文章似乎osworkflow和JBPM都不够理想,还有其他的开源选择么?
    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © 银狐999