<< 关于企业应用集成/企业服务总线的必要性 | 首页 | LinkedIn网站的架构 >>

OSWorkflow的一些应用经验

OSWorkflow是一个值得在企业应用里使用的工作流开源产品。灵活性是可以使用的最大理由,因为小巧而强大,开源可扩展,性能可自行调整,它适应中国各个组织里流程的各种特殊性。因为要充分估计流程的复杂性,要适应流程的特殊性,所以要做好软件最好能够自己控制软件的依赖软件——工作流引擎。OSWorkflow的一些应用经验试图说明在实际应用中的一些使用经验

OSWorkflow的特性

l         业界优秀的开源工作流产品、可扩展性好

l         灵活性好、API可自行开发,只有几个数据库表

l         拥有独立的流程设计器

l         作为嵌入式的流程引擎甚至可以支持流程与应用的事务一致性

l         支持分支和合并流程

l         采用嵌入式集成,且开放源代码,性能可自行调整

l         支持流程图显示

l         支持流程期限

 

OSWorkflow的Designer流程设计器使用

l         新建流程workflow

l         新建人机交互或自动步骤step(自动的action中加入auto="true")

l         新建流程操作action,一个workflowentry包含多个step,一个step可包含多个action,一个action必须要有一个unconditional-result

l         编辑step步骤的转换条件,使用beanshell

l         指定流程步骤step的所有人owner(即角色)

l         指定流程的AttributewfName等)

l         指定流程步骤的到期日期due-date

l         指定流程操作actionAttributeactionURL等)

 

OSWorkflow API的使用

l        发起流程:

Workflow wf =

new BasicWorkflow((String) session.getAttribute("username"));

long id = wf.initialize("example", 0, map);

l        执行流程操作

wf.doAction(id, action, Collections.EMPTY_MAP);

l        待办列表获取

WorkflowQuery queryLeft = new WorkflowQuery(WorkflowQuery.OWNER, WorkflowQuery.CURRENT,

WorkflowQuery.EQUALS, session.getAttribute("username"));

WorkflowQuery queryRight =

new WorkflowQuery(WorkflowQuery.STATUS, WorkflowQuery.CURRENT, WorkflowQuery.EQUALS, "Underway");

WorkflowQuery query =

new WorkflowQuery(queryLeft, WorkflowQuery.AND, queryRight);

    List workflows = wf.query(query);

l        已办列表获取

l        工作流查询

l        挂起流程

l        恢复流程

l        中止流程

l        流程指派

l        流程办理清单

l        流程图展示

 

 

l         待办列表获取问题

1.         如果要支持角色的工作列表获取,去掉os_currentstepos_user的外键约束,去掉os_historystepos_user的外键约束,为工作流适配器增加“public List getTasksForRole(String user, String status) throws StoreException”

在定义workflowxml文件里owner定义为usergroup

2.         接收owner等于操作人的待办任务,即每次发起流程和执行流程操作时都选择下一步骤的接收人owner

l         transientVarspropertySet的用法

propertySet为持久性属性,即读写数据库;transientVars只是瞬时地参数获取。时限设置:due-date

 <initial-actions>

    <action id="0" name="启动工作流">

      <pre-functions>

        <function type="beanshell">

          <arg name="script"><![CDATA[

                                String caller = context.getCaller();

                                propertySet.setString("caller", caller);

                                System.out.println(transientVars.get("shenpi"));

                                System.out.println(transientVars.get("invoice"));

                                propertySet.setString("shenpi", (String)transientVars.get("shenpi"));

                                propertySet.setString("invoice", (String)transientVars.get("invoice"));

                                System.out.println("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$");

                            ]]></arg>

        </function>

      </pre-functions>

      <results>

        <unconditional-result id="5" old-status="Finished" status="Queued" step="1" owner="foos" due-date="3600000"/>

      </results>

    </action>

 </initial-actions>

 

附一个实际应用的osworkflow工作流模板

 

标签 : ,



发表评论 发送引用通报