Osworkflow部分类说明及名词解释

来源:互联网 发布:淘宝店铺商品展示代码 编辑:程序博客网 时间:2024/05/05 09:02

接口选择:
  osworkflow提供几种实现com.opensymphony.workflow.Workflow接口的类。
   
  BasicWorkflow:
  不提供事务支持,你可以通过持久层来实现事务处理。
  Workflow wf = new BasicWorkflow(username)
  这里的username是用来关联当前请求的用户。
   
  EJBWorkflow:
  用ejb容器来管理事务。在ejb-jar.xml中进行配置。
  Workflow wf = new EJBWorkflow()
  这里没有必要想basicworkflow和ofbizworkflow那样给出username。因为ejb容器已经校验过的。
   
  Ofbizworkflow:
  与basicworkflow比较相似,不同只在于需要事务支持的方法由ofbiz TransactionUtil calls来包装。
   
  创建新的工作流实例:
  这里是以basicworkflow为例子
   

  Workflow wf = new BasicWorkflow(username);
  HashMap inputs 
= new HashMap();
  inputs.put(
"docTitle", request.getParameter("title");
  wf.initialize(
"workflowName"1, inputs);


   
  执行action:

  Workflow wf = new BasicWorkflow(username);
  HashMap inputs 
= new HashMap();
  inputs.put(
"docTitle", request.getParameter("title");
  
long id = Long.parseLong(request.getParameter("workflowId");
  wf.doAction(id, 
1, inputs);


  查询:
  值得注意的是:并不是所有的 workflow stores支持查询。当前的hibernate,jdbc和内存工作流存储支持查询。Hibernate存储不支持mixed-type查询(如,一个查询使用到了历史和当前step contexts)。为了执行一个查询,需要构造出一个WorkflowExpressionQuery对象。查询方法是在这个对象上被调用的。
  简单查询、嵌套查询、mixed-context查询(不支持hibernate工作流存储)在docs文档的5.4部分都有。
   
Step
大致相当于流程所在的位置。譬如企业年检,年检报告书在企业端算一个step,在工商局算第二个step,在复核窗口算第三个step。每个step可以有多种状态(status)和多个动作(action),用Workflow.getCurrentSteps()可以获得所有当前的step(如果有并列流程,则可能同时有多个step,例如一次年检可能同时位于“初审”step和“广告经营资格审查”step)。
 
Status
流程在某个step中的状态。很容易理解,譬如“待认领”、“审核不通过”之类的。OSWorkflow中的状态完全是由开发者自定义的,状态判别纯粹是字符串比对,灵活性相当强,而且可以把定义文件做得很好看。
 
Action
导致流程状态变迁的动作。一个action典型地由两部分组成:可以执行此动作的条件(conditions),以及执行此动作的结果(results)。条件可以用BeanShell脚本来判断,因此具有很大的灵活性,几乎任何与流程相关的东西都可以用来做判断。
 
Result
执行动作后的结果。这是个比较重要的概念。result分为两种,conditional-result和unconditional-result。执行一个动作之后,首先判断所有conditional-result的条件是否满足,满足则使用该结果;如果没有任何contidional-result满足条件,则使用unconditional-result。unconditional-result需要指定两部分信息:old-status,表示“当前step的状态变成什么”;后续状态,可能是用step+status指定一个新状态,也可能进入split或者join。
 
conditional-result非常有用。还是以年检为例,同样是提交年检报告书,“未提交”和“被退回”是不同的状态,在这两个状态基础上执行“提交”动作,结果分别是“初次提交”和“退回之后再次提交”。这时可以考虑在“提交”动作上用conditional-result。
 
Split/Join
流程的切分和融合。很简单的概念,split提供多个result;join则判断多个current step的状态,提供一个result。

0 0
原创粉丝点击