胡长城(银狐999)BLOG

工作流,BPM,SOA,Java,J2EE、Flex;个人主页http://www.javafox.org;普元BPS业务流程平台

原创 Oracle BPEL的研究(3)workflow service api的使用收藏

oracle bpel process manager提供了的java api来满足对workflow service的操作。具体Workflow Services API Reference文档可以从 %SOA_Oracle_Home%\bpel\docs\workflow\index.html 查看 编写api操作之前,肯定需要引入相关jar包,至少需要包含如下:   为了便于远程访问process server,还需要将·wf_client_config.xml和wf_config.xml配置文件引入到classpath中。这个文件的原始模板可以从%SOA_Oracle_Home%\bpel\system\services\config 目录中获取。此目录中还有其他一些配置文件,后续可能也会用到。 对wf_client_config.xml需要做一些修改,以满足你特定的情况。最主要的修改,是使用正确的用户名和密码,以及那些web service的访问url(主要是机器地址和端口)。以及对ejb模式的rmi声明,一般需要从默认的:

 <serverURL>ormi://FOX000/hw_services</serverURL> 
变更为: <serverURL>opmn:ormi://FOX000:oc4j_soa/hw_services</serverURL> 

(其中oc4j_soa是你自己的oc4j instance的名称) 

  ------------------------------------------------------------------------------------------------------------------ 这种准备工作做完了,接下来就可以使用java api来操作workflow service了。 首先需要获取IWorkflowServiceClient这个最初接口,可以通过SOAP, Remote EJB, Local EJB, Java, WSIF 这几种方式来获取。

//获取client接口 

IWorkflowServiceClient client =WorkflowServiceClientFactory.getWorkflowServiceClient(                                                                                                   WorkflowServiceClientFactory.REMOTE_CLIENT); 



//然后获取TaskQueryService,进行任务查询操作: 

ITaskQueryService taskQueryService = client.getTaskQueryService(); 



//获取一个workflow context,主要用于后续验证用户是否有相应的权限 

IWorkflowContext ctx = taskQueryService.authenticate("istone","welcome1","jazn.com", null); 



//构造查询过滤条件 

Predicate subFilter1 = new Predicate(TableConstants.WFTASK_STATE_COLUMN, Predicate.OP_EQ, "ASSIGNED"); 

Predicate subFilter2 = new Predicate(TableConstants.WFTASK_ACQUIREDBY_COLUMN, Predicate.OP_EQ, ctx.getUser()); 

Predicate mainFilter = new Predicate(subFilter1, Predicate.AND, subFilter2 ); 



//构造查询显示元素         

List queryColumns = new ArrayList();         

queryColumns.add(TableConstants.WFTASK_TITLE_COLUMN.getName());         

queryColumns.add(TableConstants.WFTASK_PRIORITY_COLUMN.getName());        

 queryColumns.add(TableConstants.WFTASK_STATE_COLUMN.getName());         

queryColumns.add(TableConstants.WFTASK_SUBSTATE_COLUMN.getName());         

queryColumns.add(TableConstants.WFTASK_ACQUIREDBY_COLUMN.getName());         
queryColumns.add(TableConstants.WFTASK_TASKID_COLUMN.getName());         

queryColumns.add(TableConstants.WFTASK_TASKNUMBER_COLUMN.getName()); 



//查询 

List<Task> resultSet = taskQueryService.queryTasks(ctx, queryColumns, null, ITaskQueryService.ASSIGNMENT_FILTER_ALL , null, mainFilter , null, 0, 0); 

当然,如上的代码只是很简单的使用api操作。具体有兴趣,可以参考api doc进行。

发表于 @ 2008年06月12日 22:32:00|评论(loading...)|收藏

新一篇: Oracle BPEL的研究(4)Human Task Display Form介绍 | 旧一篇: Oracle BPEL的研究(2)Human Task的人工流程demo部署

Csdn Blog version 3.1a
Copyright © 银狐999