论坛首页 Ruby版 ruby

写了一个简单的工作流引擎

浏览 8512 次
该帖已经被评为良好帖
作者 正文
时间:2008-06-19

仿照OSWORKFLOW写了一个简单的工作流引擎,支持简单流程,分支,合并等操作。

工作流所采用的数据库如下:

create table wf_instances(
	id integer primary key,
	name,
	filename,
	status	--CREATED, ACTIVATED, SUSPENDED, KILLED 和 COMPLETED
)
create table wf_curr_steps(
	id integer primary key,
	wf_instance_id integer,
	step integer,
	action integer,
	status,
	owner,
	started_at datetime,
	finished_at datetime,
	caller
)
create table wf_properties(
	id integer primary key,
	wf_instance_id integer,
	item_key,
	item_value
)
 

采用YAML来描述流程定义,比如一个请假流程的定义如下:

workflow:
  init-actions:
    1:
      name: 开始
      results:
        -
          step: 1
          status: 在填写
          owner: @wf_params['caller']
  steps:
    1:
      name: 填写请假单
      actions:
        1:
          name: 修改
          params:
            page-name: edit_leave
          results:
            -
              step: 1
              status: 在填写
              owner: @wf_params['caller']
        2:
          name: 提交申请
          params:
            page-name: apply_leave
          results:
            -
              condition: @wf_params['days'].to_i <= 3
              step: 2
              status: 待审核
              owner: 部门经理
            -
              step: 3
              status: 待审核
              owner: 公司领导
    2:
      name: 部门经理审核
      actions:
        1:
          name: 同意
          params:
            page-name: verify_leave
          results:
            -
              step: 4
              status: 待归档
              owner: 资料员
        2:
          name: 不同意
          params:
            page-name: verify_leave
          results:
            -
              step: 1
              status: 不同意
              owner: @wf_params['applier']
    3:
      name: 公司领导审核
      actions:
        1:
          name: 同意
          params:
            page-name: verify_leave
          results:
            -
              step: 4
              status: 待归档
              owner: 资料员
        2:
          name: 不同意
          params:
            page-name: verify_leave
          results:
            -
              step: 1
              status: 不同意
              owner: @wf_params['applier']
    4:
      name: 归档
      actions:
        1:
          name: 归档处理
          condition: curr_instance_step(4).status=='待归档'
          params:
            page-name: verify_leave
          results:
            -
              step: 4
              status: 已归档
              owner: 资料员

 

使用的基本方法介绍如下:

1、建立工作流实例:

@wf = Workflow.new(caller)
@wf_id = @wf.create('请假流程.yml', 2, nil)

2、执行一个ACTION:

@wf.do_action(@wf_id,step_id,action_id,wf_params)

3、获取当前可执行的动作:

@wf.available_actions(@wf_id,wf_params)

4、获取当前实例的全部全部STEP全部:

@wf.curr_steps(@wf_id)

5、删除工作流实例:

@wf.destroy(@wf_id)
 

 

   
时间:2008-06-19
很好,继续努力,成为ruby的第一个开源工作流
   
0 请登录后投票
时间:2008-06-19
redmine算不算是个开源的工作流呢?
   
0 请登录后投票
时间:2008-06-19
太粗糙了吧, 可以参考oswf等其他,结合中国国情的wf。
写出想法, 大家共同参与。 我想应该是很有前途的。
   
0 请登录后投票
时间:2008-06-20
呵呵,楼主精神可嘉!

虽然workflow原理不是很复杂,可感觉做一个成熟的workflow真的很难,需要投入巨大的研发力量。一个成熟的workflow产品至少要包含流程设计(一般都是支持傻瓜式的图形操作),Role管理,Form设计,业务逻辑控制模块等,用户管理模块。

我现在的工作就是做基于工作流进行二次开发。有成熟的workflow平台支持,感觉开发e-workflow类的电子流程系统效率还是挺高的。

目前我使用的是adobe workflow.公司花了不少钱买的。功能很强,就是开发工具傻了点,不过也没办法,产品好像都是这样。
   
0 请登录后投票
时间:2008-06-21
写的太粗糙,?Action定义怎么配置的?
   
0 请登录后投票
时间:2008-06-21
Rocwo 写道
呵呵,楼主精神可嘉!

虽然workflow原理不是很复杂,可感觉做一个成熟的workflow真的很难,需要投入巨大的研发力量。一个成熟的workflow产品至少要包含流程设计(一般都是支持傻瓜式的图形操作),Role管理,Form设计,业务逻辑控制模块等,用户管理模块。

我现在的工作就是做基于工作流进行二次开发。有成熟的workflow平台支持,感觉开发e-workflow类的电子流程系统效率还是挺高的。

目前我使用的是adobe workflow.公司花了不少钱买的。功能很强,就是开发工具傻了点,不过也没办法,产品好像都是这样。


Role管理,业务逻辑控制模块等,用户管理模块。这些东西根本不属于工作流系统本身应该有的,因为不用工作流也会需要这些东西,工作流只是和这些东西有接口。

Form设计,也就是说工作单的开发吧,谁会用一个专用Form设计工具去开发工作单呢?更多的程序员还是用eclipse,vs等通用的开发工具开工作单。
   
0 请登录后投票
时间:2008-06-21
ltian 写道
Rocwo 写道
呵呵,楼主精神可嘉!

虽然workflow原理不是很复杂,可感觉做一个成熟的workflow真的很难,需要投入巨大的研发力量。一个成熟的workflow产品至少要包含流程设计(一般都是支持傻瓜式的图形操作),Role管理,Form设计,业务逻辑控制模块等,用户管理模块。

我现在的工作就是做基于工作流进行二次开发。有成熟的workflow平台支持,感觉开发e-workflow类的电子流程系统效率还是挺高的。

目前我使用的是adobe workflow.公司花了不少钱买的。功能很强,就是开发工具傻了点,不过也没办法,产品好像都是这样。


Role管理,业务逻辑控制模块等,用户管理模块。这些东西根本不属于工作流系统本身应该有的,因为不用工作流也会需要这些东西,工作流只是和这些东西有接口。

Form设计,也就是说工作单的开发吧,谁会用一个专用Form设计工具去开发工作单呢?更多的程序员还是用eclipse,vs等通用的开发工具开工作单。

楼上很正确, 工作流最重要的是引擎部分, 其他的给个接口就行了。
还有, 没必要用jaml吧? 用ruby 做dsl不是很好么?
   
0 请登录后投票
时间:2008-06-21
ltian 写道

Form设计,也就是说工作单的开发吧,谁会用一个专用Form设计工具去开发工作单呢?更多的程序员还是用eclipse,vs等通用的开发工具开工作单。

现在有些工作流产品带表单设计的,自定义表单+自定义流程,这是一大卖点。
   
0 请登录后投票
时间:2008-06-23
以前用过actionflow,rails的一个插件
   
0 请登录后投票
论坛首页 Ruby版 ruby

跳转论坛:
JavaEye推荐