服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

基本的osworkflow api

接口选择:

osworkflow提供几种实现com.opensymphony.workflow.workflow

 

basicworkflow

不提供事务支持,你可以通过持久层来实现事务处理。

workflow wf = new basicworkflow(username)

这里的username是用来关联当前请求的用户。

 

ejbworkflow

ejb容器来管理事务。在ejb-jar.xml中进行配置。

workflow wf = new ejbworkflow()

这里没有必要想basicworkflowofbizworkflow那样给出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支持查询。当前的hibernatejdbc和内存工作流存储支持查询。hibernate存储不支持mixed-type查询(如,一个查询使用到了历史和当前step contexts)。为了执行一个查询,需要构造出一个workflowexpressionquery对象。查询方法是在这个对象上被调用的。

简单查询、嵌套查询、mixed-context查询(不支持hibernate工作流存储)在docs文档的5.4部分都有。

 

 

2.7版的osworkflow提供一种配置接口。默认实现是defaultconfiguration,通过abstractworkflowsetconfiguration方法来更改历史遗留的singleton静态模型使其不会被使用。应该避免每次都创建新的工作流实例。

遗留部分:

workflow workflow = new basicworkflow("blah");
long workflowid = workflow.initialize("someflow", 1, new hashmap());
workflow.doaction(workflowid, 2, new hashmap());
...
//in some other class, called later on
workflow workflow = new basicworkflow("blah");
workflow.doaction(workflowid, 3, new hashmap());

推荐方法:

workflow workflow = new basicworkflow("blah");
configuration config = new defaultconfiguration();
workflow.setconfiguration(config);
long workflowid = workflow.initialize("someflow", 1, new hashmap());
workflow.doaction(workflowid, 2, new hashmap());
//keep track of workflow object somewhere!
...
//in some other class, called later on
//look up workflow instance that was held onto earlier
workflow workflow = ...; //note, do not create a new one!
workflow.doaction(workflowid, 3, new hashmap());

 

实际当中还是需要到javadoc中不断去查。

扫描关注微信公众号