分享
 
 
 

osworkflow api 之 query and ofbiz

王朝java/jsp·作者佚名  2006-01-10
窄屏简体版  字體: |||超大  

com.opensymphony.workflow.ofbiz

这部分还真不大清楚到底是干什么,知道有个开源的ofbiz工作流项目,但是究竟这个类具体怎么样用还没有实践过。

OfbizWorkflow :里面的三个方法(initialize、doAction、changeEntryState)都是调用abstractworkflow里的相应方法

OfbizWorkflowContext:setRollbackOnly()只有一个rollback方法,调用的是org.ofbiz.core.entity.TransactionUtil.setRollbackOnly()方法。

com.opensymphony.workflow.query

**

该包主要为查询而设计,但不是所有的工作流存储都支持查询。通常,Hibernate 和 JDBC 都支持,而内存工作流存储不支持。值得注意的是 Hibernate 存储不支持混合型查询(例如,一个查询同时包含了 history step 上下文和 current step 上下文)。

Expression

FieldExpression

NestedExpression

WorkflowExpressionQuery

WorkflowQuery

在这里分别介绍两种查询方式:一种是已经被列为不推荐的,另外一种是认为大家可以正在使用的。

先介绍类WorkflowQuery。但是目前这个类已经处于Deprecated状态。就先谈谈这个已经被定为不赞成的类吧。

这个类到底干什么的呢?WorkflowQuery主要是负责装配查询条件,它是如何装配条件的呢?

WorkflowQuery提供了两种类型的构造函数:

public WorkflowQuery(int field, int type, int operator, Object value)

public WorkflowQuery(WorkflowQuery left, int operator, WorkflowQuery right)

我们可以利用第一个构造函数创建基本的WorkflowQuery实例,然后利用第二个构造函数组织装配。以查询执行者是“test”且状态是“Underway”的step实例为例:

WorkflowQuery queryLeft = new WorkflowQuery(

WorkflowQuery.OWNER, WorkflowQuery.CURRENT, WorkflowQuery.EQUALS, “test");

WorkflowQuery queryRight = new WorkflowQuery(

WorkflowQuery.STATUS, WorkflowQuery.CURRENT, WorkflowQuery.EQUALS, “Underway");

WorkflowQuery query = new WorkflowQuery(

queryLeft, WorkflowQuery.AND, queryRight);

List workflows = wf.query(query);

for (Iterator iterator = workflows.iterator(); iterator.hasNext();)

Long wfId = (Long) iterator.next();

}

而实际的真正查询动作还是由AbstractWorkflow里的query方法,

public List query(WorkflowQuery query) throws StoreException {

return getPersistence().query(query);

},

然后再由WorkflowStore的query方法执行具体查询操作。不同的WorkflowStore实例其查询方式不尽相同,以MemoryWorkflowStore为例,它将遍历所有位于cache中的流程,然后将满足条件的流程ID放入一个ArrayList中返回,查询的核心代码采用了递归调用的形式

当我跟踪到AbstractWorkflow的时候发现了,替代WorkflowQuery的类,即WorkflowExpressionQuery。此类的构造函数为一无参数和一以Expression为参数,

其他相关类即是此包内其他剩余的几个包,Expression是一个抽象类。FieldExpression和NestedExpression都继承于Expression.

由于这部分基本没有注释,真不知道他是怎么想的,所以一些部分我也是不能理解。请大家谅解,互相学习吧!通过实例来看看是如何使用WorkflowExpressionQuery进行查询的。对了,使用WorkflowExpressionQuery的实际查询和WorkflowQuery的过程一样,都是通过AbstractWorkflow的query进而调用workflowstroe的query来进行实际查询的。

下面转载一个使用该api进行查询的实例:(来源于http://my.so-net.net.tw/idealist/OSWorkflow/program05.html

Query.java · package tw.idv.idealist;

· import java.util.*;

· import com.opensymphony.workflow.*;

· import com.opensymphony.workflow.query.*;

· import com.opensymphony.workflow.spi.WorkflowEntry;

· /**

· * @author steven

· */

· public class Query extends AbstractWorkflow {

· public List getCompleted() {

· FieldExpression fe = new FieldExpression(FieldExpression.STATE,

· FieldExpression.ENTRY,

· FieldExpression.EQUALS,

· new Integer(WorkflowEntry.COMPLETED));

· List list = null;

· try {

· list = getPersistence().query(new WorkflowExpressionQuery(fe));

· } catch (StoreException e) {

· e.printStackTrace();

· }

· return list;

· }

· }

completed.jsp

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<HTML>

<HEAD>

<%@ page language="java" contentType="text/html; charset=BIG5" pageEncoding="BIG5" %>

<%@ page import="tw.idv.idealist.*" %>

<%@ page import="java.util.*" %>

<META http-equiv="Content-Type" content="text/html; charset=BIG5">

<META http-equiv="Content-Style-Type" content="text/css">

<LINK href="theme/Master.css" rel="stylesheet"

type="text/css">

<TITLE>completed.jsp</TITLE>

</HEAD>

<BODY>

已完成的工作流編號:<br>

<%

Query query = new Query();

List completed = query.getCompleted();

for(int i=0; i<completed.size(); i++) {

Long wfId = (Long) completed.get(i);

out.println("workflow id => " + wfId + "<br>");

}

%>

</BODY>

</HTML>

· 测试

访问jsp页面

欢迎交流yun15291li@hotmail.com

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有