您的位置:首页 > 其它

Osworkflow部分类说明及名词解释

2014-08-05 10:13 148 查看
接口选择:

  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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: