最新消息:本站持续更新中,请注意添加收藏夹。搜索关键词时,多换一个同义词。比如要搜索界面,可以尝试页面,画面,PER档等词汇。善于搜索,将大大提高你的查找效率。

e-cology7Request(RequestService)Web Service接口使用说明

实施与配置 bron1984 5472浏览

目 录

 

一、前言 4

1.1编写目的 4

1.2名词定义 4

二、接口调用步骤 5

2.1 Ecology系统流程接口部署 5

2.2表单字段 5

2.3检查ecology web service是否已部署 5

2.4接口方法概述 7

2.5 流程相关对象说明 10

2.6 生成客户端 15

三、示例程序 19

3.1创建带附件的留言 19

3.2 使用客户端代理创建留言 19

3.3 使用客户端实现流程删除 22

3.4 使用客户端查询留言 23

3.5 使用客户端实现流程转发 24

3.6 使用客户端实现流程提交 24

3.7 使用客户端实现流程退回 25

3.8 使用客户端获得待办列表 26

3.9 使用客户端获得已办列表 27

3.10 使用客户端获得办结列表 28

3.11 使用客户端获得我的请求列表 29

一、前言

1.1编写目的

本文给有研发能力的客户或有系统集成需求的客户提供web service接口调用的参考例程。本文的面向具有一定web service开发能力或了解web service技术的开发人员。

1.2名词定义

1、Axis:

著名的开源web service引擎。

2、Xfire:

是codeHaus组织提供的一个java web service开源引擎。

3、外部系统:

指调用或实现e-cology工作流输入输出接口,与e-cology系统进行数据交接的其他系统。

二、接口调用步骤

2.1 Ecology系统流程接口部署

修改/WEB-INF/web.xml文件

在相应处增加servlet部署(参考系统中已有很多servlet部署),加入如下描述

<servlet>

<servlet-name>XFireServlet</servlet-name>

<servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>XFireServlet</servlet-name>

<url-pattern>/services/*</url-pattern>

</servlet-mapping>

注意:不要添加在注释中(即以“<!—”开始至“–>”结束为注释)!

2.2表单字段

在确定调用web service接口之前需要在ecology系统中设计好表单, 记下表单字段名(主字段和明细字段),在调用接口的时候需要用到。字段名在‘工作流程->表单管理->编辑字段’菜单中可以查到,如下图所示为留言表单的字段列表:

 

2.3检查ecology web service是否已部署

在浏览器中输入http://ecologyServer/services,应显示如下页面:

点击RequestService后面的wsdl链接应出现如下页面:

wsdl具体描述文件如下:

如果未出先上述页面,则web service未部署成功,请与泛微项目人员联系。

2.4接口方法概述

Web services服务名称 流程相关服务
Web services 服务地址 http://ecology7服务器地址/services/RequestService?wsdl
名称 参数 返回值 功能描述
createRequest RequestInfo requestinfo:

请求信息对象

String:新流程的requestid

如果小于0表示失败

-1:创建流程失败

-2:用户没有流程创建权限

-3:创建流程基本信息失败

-4:保存表单主表信息失败

-5:更新紧急程度失败

-6:流程操作者失败

-7:流转至下一节点失败

-8:节点附加操作失败

根据请求信息对象创建一条新的流程
deleteRequest int creatorId:

创建人id (大于0时该条件有效)

Boolean:

True 成功

False 失败

根据参数删除流程请求信息
getMyRequestBySearch int creatorId:

创建人id (大于0时该条件有效)

String createStartDate:

创建日期(起)日期格式“YYYY-MM-DD” (不为空时该条件有效)

String createEndDate:

创建日期(止)日期格式“YYYY-MM-DD” (不为空时该条件有效)

String workflowid:

工作流id 多个用逗号分隔 (不为空时该条件有效)

RequestBase[]:请求基本信息列表 根据参数条件获取我的请求列表
getPendingRequestBySearch int userId:

用户id (大于0时该条件有效)

String createStartDate:

创建日期(起)日期格式“YYYY-MM-DD” (不为空时该条件有效)

String createEndDate:

创建日期(止)日期格式“YYYY-MM-DD” (不为空时该条件有效)

String workflowid:

工作流id 多个用逗号分隔 (不为空时该条件有效)

RequestBase[]:请求基本信息列表 根据参数条件获取代办事宜列表
getHendledRequestBySearch int userId:

用户id (大于0时该条件有效)

String createStartDate:

创建日期(起)日期格式“YYYY-MM-DD” (不为空时该条件有效)

String createEndDate:

创建日期(止)日期格式“YYYY-MM-DD” (不为空时该条件有效)

String workflowid:

工作流id 多个用逗号分隔 (不为空时该条件有效)

RequestBase[]:请求基本信息列表 根据参数条件获取已办事宜列表
getProcessedRequestBySearch int userId:

用户id (大于0时该条件有效)

String createStartDate:

创建日期(起)日期格式“YYYY-MM-DD” (不为空时该条件有效)

String createEndDate:

创建日期(止)日期格式“YYYY-MM-DD” (不为空时该条件有效)

String workflowid:

工作流id 多个用逗号分隔 (不为空时该条件有效)

RequestBase[]:请求基本信息列表 根据参数条件获取归档事宜列表
getRequest int requestId:

请求requestid

RequestInfo:

请求信息对象

根据流程requestid获得表单数据
getRequest RequestManager requestManager:

requestManager对象

RequestInfo:

请求信息对象

根据requestmanager对象获取表单数据
nextNodeBySubmit RequestInfo request:

请求信息对象

int requestid:

请求id

int userid:

提交人ID

String remark:

提交意见

Boolean:

True 成功

False 失败

流程提交
nextNodeByReject int requestid:

请求id

int userid:

提交人ID

String remark:

退回意见

Boolean:

True 成功

False 失败

流程退回
forwardFlow int requestid:

请求id

int forwardoperator:

转发人id

String recipients:

接收人id 多个用逗号分隔

String remark:

转发意见

String clientip:

客户端ip地址

Boolean:

True 成功

False 失败

流程转发

2.5 流程相关对象说明

1)RequestInfo

/**

* 工作流id

*/

private java.lang.String _workflowid;

/**

* 请求id

*/

private java.lang.String _requestid;

/**

* 创建者id

*/

private java.lang.String _creatorid;

/**

* 请求标题

*/

private java.lang.String _description;

/**

* 紧急程度

*/

private java.lang.String _requestlevel;

/**

* 提醒类型

*/

private java.lang.String _remindtype;

/**

* Field _hostid

*/

private java.lang.String _hostid;

/**

* 最后操作者

*/

private java.lang.String _lastoperator;

 

/**

* 表单主表信息

*/

private weaver.soa.workflow.request.MainTableInfo _mainTableInfo;

/**

* 表单明细表信息

*/

private weaver.soa.workflow.request.DetailTableInfo _detailTableInfo;

/**

* 流转日志

*/

private weaver.soa.workflow.request.RequestLog _requestLog;

/**

* 流程流转控制对象

*/

private weaver.workflow.request.RequestManager _RequestManager;

 

/**

* 创建流程是否自动流转至下一节点

* 0:不自动流程

* 其它:自动流程

*/

private java.lang.String _isNextFlow;

2)RequestBase

/**

*请求id

*/

private String requestId;

/**

*当前节点id

*/

private String currentNodeId;

/**

*流程id

*/

private String workflowId;

/**

*当前节点类型 3为归档

*/

private String currentNodeType;//归档:3

/**

*请求名称

*/

private String requestName;

/**

*创建人

*/

private String creater;

/**

*创建人类型 0:内部用户 1:外部用户

*/

private String creatertype;

/**

*最后操作者

*/

private String lastOperator;

/**

*最后操作者类型 0:内部用户 1:外部用户

*/

private String lastOperatortype;

/**

*创建时间

*/

private String createTime;

/**

*最后操作时间

*/

private String lastOperateTime;

3)RequestManager

/**

*请求id

*/

private int requestid = 0;

/**

*工作流id

*/

private int workflowid = 0;

/**

*工作流类型

*/

private String workflowtype = “”;

/**

*是否是批注提交 1: 是

*/

private int isremark = 0;

/**

*表单或者单据的id

*/

private int formid = 0;

/**

*是否单据 0:否 1:是

*/

private int isbill = 0;

/**

*如果是单据,对应的单据表的id

*/

private int billid = 0;

/**

*节点id

*/

private int nodeid = 0;

/**

*节点类型 0:创建 1:审批 2:实现 3:归档

*/

private String nodetype = “”;

/**

*请求名称

*/

private String requestname = “”;

/**

*请求的编号

*/

private String requestmark = “”;

/**

*请求重要级别 0:正常 1:重要 2:紧急

*/

private String requestlevel = “”;

/**

*签字批注

*/

private String remark = “”;

/**

*短信提醒类型

*/

private String messageType=””;

/**

*操作人是否需要流程反馈

*/

private String needwfback=””;

/**

*下一个节点的id

*/

private int nextnodeid = 0;

/**

*下一个节点的类型

*/

private String nextnodetype = “”;

/**

*最后节点的id

*/

private int lastnodeid = 0;

/**

*最后节点的类型

*/

private String lastnodetype = “”;

/**

*出口名称

*/

private String status = “”;

/**

*请求创建者

*/

private int creater = 0;

/**

*创建者类型 0:内部 1:外部

*/

private int creatertype = 0;

/**

*请求创建日期

*/

private String createdate = “”;

/**

*创建时间

*/

private String createtime = “”;

/**

*最后操作者

*/

private int lastoperator = 0;

/**

*最后节点的操作者类型 0:内部 1:外部

*/

private int lastoperatortype = 0;

/**

*最后操作日期

*/

private String lastoperatedate = “”;

/**

*最后操作时间

*/

private String lastoperatetime = “”;

/**

*用户对象

*/

private User user;

2.6 生成客户端

大家知道,在本地调用web service,最便利的方法是利用工具生成客户端代理,开发人员通过客户端代理去访问web service将会非常简单,就象调用本地的方法一样。各大主流的编程语言都提供了通过wsdl生成客户端代理的工具,如c#中的wsdl.exe和java中的wsdl2java。本文以java为例说明客户端的生成方法。

2.6.1客户端所需jar

commons-discovery-0.2.jar

javax-wsdl_1.5.1jar

commons-logging_1.0.4.jar

axis.jar

jaxrpc.jar

saaj.jar

activation.jar

mail.jar

2.6.2 生成客户端

使用eclipse向导生成Web Service客户端

三、示例程序

本节介绍怎样利用生成的客户端代理访问ecology工作流, 提供了在外部创建带附件的留言、查询留言、创建多明细表单的示例代码。

3.1创建带附件的留言

在创建留言前我们需要知道留言流程在ecology系统中的workflowid以及留言表单的字段定义。获取字段定义的方法意见在前面的章节介绍过了,获取workflowid的方法如图所示:

工作流程->路径设置

workflowid

可以看出留言表单的workflowid=5

3.2 使用客户端代理创建留言

代码:

/**

* 创建留言的示例代码

* @throws Exception

*/

public String testCreateRequest() throws Exception {

weaver.soa.workflow.request.client.RequestServiceHttpBindingStub binding;

try {

binding = (weaver.soa.workflow.request.client.RequestServiceHttpBindingStub)

new weaver.soa.workflow.request.client.RequestServiceLocator().getRequestServiceHttpPort();

}

catch (javax.xml.rpc.ServiceException jre) {

if (jre.getLinkedCause() != null)

jre.getLinkedCause().printStackTrace();

throw new junit.framework.AssertionFailedError(“JAX-RPC ServiceException caught: ” + jre);

}

assertNotNull(“binding is null”, binding);

// Time out after a minute

binding.setTimeout(60000);

// Test operation

weaver.soa.workflow.request.client.RequestInfo ri = new weaver.soa.workflow.request.client.RequestInfo();

ri.setCreatorid(“57”);//表单创建人id

ri.setWorkflowid(“37”);//workflowid

ri.setRequestlevel(“0”);//紧急程度

ri.setRemindtype(“0”);//提醒类型

//添加主表数据

weaver.soa.workflow.request.client.MainTableInfo mti = new weaver.soa.workflow.request.client.MainTableInfo();

//设置主表个字段数据

Property[] p = new Property[3];

p[0] = new Property();

p[0].setName(“resource1”);

p[0].setValue(“57”);

p[1] = new Property();

p[1].setName(“department”);

p[1].setValue(“7”);

p[2] = new Property();

p[2].setName(“desc1”);

p[2].setValue(“测试多明细”);

p[3] = new Property();

p[3].setName(“fujian”);//附件字段

p[3].setType(“http:测试.txt”);//附件文件名,格式http:文件名

p[3].setValue(“http://xxx/xxx/download”);//附件网址,ecology工作流接口从此处获取文件并保存到ecology系统中。目前仅支持以http链接的方式上传附件。

mti.setProperty(new ArrayOfProperty(p));

ri.setMainTableInfo(mti);

//添加明细表数据

DetailTableInfo dti = new DetailTableInfo();

//本例中有两个明细表

DetailTable[] dt = new DetailTable[2];

//添加第一个明细表

dt[0] = new DetailTable();

dt[0].setId(“0”);//tableid is required

//添加一行到第一个明细表

Row[] r = new Row[1];

r[0].setId(“0”); //rowid is required

//添加单元格到行

Cell[] c = new Cell[2];

c[0] = new Cell();

c[0].setName(“dscone”);

c[0].setValue(“this is a cell”);

c[1] = new Cell();

c[1].setName(“int”);

c[1].setValue(“100”);

r[0].setCell(new ArrayOfCell(c));

dt[0].setRow(new ArrayOfRow(r));

//第一个明细表添加完毕

//添加第二个明细表

dt[1] = new DetailTable();

dt[1].setId(“1”);//tableid is required

//添加行到第二个明细表

Row[] dt1_r = new Row[1];

dt1_r[0].setId(“0”); //rowid is required

//添加单元个到行

Cell[] dt1_c = new Cell[1];

dt1_c[0].setName(“sec”);

dt1_c[0].setValue(“2”);

dt1_r[0].setCell(new ArrayOfCell(dt1_c));

dt[1].setRow(new ArrayOfRow(dt1_r));

//添加第二个明细表

dti.setDetailTable(new ArrayOfDetailTable(dt));

ri.setDetailTableInfo(dti);

ri.setDescription(“多明细表单”);

return binding.createRequest(ri);

// TBD – validate results

}

以上代码将在ecology系统中创建一个留言表单,并返回表单id供以后查询使用。

看看ecology中发生了什么?

dmx1

3.3 使用客户端实现流程删除

/**

* 删除请求信息的示例代码

* requestid请求id

* @throws Exception

*/

public weaver.soa.workflow.request.client.RequestInfo deleteRequestById(int requestid) throws Exception {

weaver.soa.workflow.request.client.RequestServiceHttpBindingStub binding;

try {

binding = (weaver.soa.workflow.request.client.RequestServiceHttpBindingStub)

new weaver.soa.workflow.request.client.RequestServiceLocator().getRequestServiceHttpPort();

}

catch (javax.xml.rpc.ServiceException jre) {

if(jre.getLinkedCause()!=null)

jre.getLinkedCause().printStackTrace();

throw new junit.framework.AssertionFailedError(“JAX-RPC ServiceException caught: ” + jre);

}

assertNotNull(“binding is null”, binding);

// Time out after a minute

binding.setTimeout(60000);

// Test operation

return binding.deleteRequest(requestid);

// TBD – validate results

}

3.4 使用客户端查询留言

/**

* 获取请求信息的示例代码

* requestid请求id

* @throws Exception

*/

public weaver.soa.workflow.request.client.RequestInfo GetRequestById(int requestid) throws Exception {

weaver.soa.workflow.request.client.RequestServiceHttpBindingStub binding;

try {

binding = (weaver.soa.workflow.request.client.RequestServiceHttpBindingStub)

new weaver.soa.workflow.request.client.RequestServiceLocator().getRequestServiceHttpPort();

}

catch (javax.xml.rpc.ServiceException jre) {

if(jre.getLinkedCause()!=null)

jre.getLinkedCause().printStackTrace();

throw new junit.framework.AssertionFailedError(“JAX-RPC ServiceException caught: ” + jre);

}

assertNotNull(“binding is null”, binding);

// Time out after a minute

binding.setTimeout(60000);

// Test operation

return binding.getRequest(requestid);

// TBD – validate results

}

3.5 使用客户端实现流程转发

/**

* 流程转发

* requestid请求id

* forwardoperator 转发人id

* recipients 接收人id,多个用逗号分隔

*remark 签字意见

*clientip客户端IP

* @throws Exception

*/

public boolean ForwardFlow(int requestid, int forwardoperator, String recipients, String remark, String clientip) throws Exception {

weaver.soa.workflow.request.client.RequestServiceHttpBindingStub binding;

try {

binding = (weaver.soa.workflow.request.client.RequestServiceHttpBindingStub)

new weaver.soa.workflow.request.client.RequestServiceLocator().getRequestServiceHttpPort();

}

catch (javax.xml.rpc.ServiceException jre) {

if(jre.getLinkedCause()!=null)

jre.getLinkedCause().printStackTrace();

throw new junit.framework.AssertionFailedError(“JAX-RPC ServiceException caught: ” + jre);

}

assertNotNull(“binding is null”, binding);

// Time out after a minute

binding.setTimeout(60000);

// Test operation

boolean value = false;

return binding.forwardFlow( requestid, forwardoperator, recipients, remark, clientip);

// TBD – validate results

}

3.6 使用客户端实现流程提交

/**

* 流程提交

* RequestInfo 主表明细表数据信息

* requestid请求id

* userid处理人

*remark 签字意见

* @throws Exception

*/

public boolean NextNodeBySubmit(weaver.soa.workflow.request.client.RequestInfo request,int requestid,int userid,String remark) throws Exception {

weaver.soa.workflow.request.client.RequestServiceHttpBindingStub binding;

try {

binding = (weaver.soa.workflow.request.client.RequestServiceHttpBindingStub)

new weaver.soa.workflow.request.client.RequestServiceLocator().getRequestServiceHttpPort();

}

catch (javax.xml.rpc.ServiceException jre) {

if(jre.getLinkedCause()!=null)

jre.getLinkedCause().printStackTrace();

throw new junit.framework.AssertionFailedError(“JAX-RPC ServiceException caught: ” + jre);

}

assertNotNull(“binding is null”, binding);

// Time out after a minute

binding.setTimeout(60000);

// Test operation

boolean value = false;

return binding.nextNodeBySubmit( request , requestid, userid, remark);

// TBD – validate results

}

3.7 使用客户端实现流程退回

/**

* 流程退回

* requested 请求id

* userid处理人

*remark 签字意见

* @throws Exception

*/

public boolean NextNodeByReject(int requestid,int userid,String remark) throws Exception {

weaver.soa.workflow.request.client.RequestServiceHttpBindingStub binding;

try {

binding = (weaver.soa.workflow.request.client.RequestServiceHttpBindingStub)

new weaver.soa.workflow.request.client.RequestServiceLocator().getRequestServiceHttpPort();

}

catch (javax.xml.rpc.ServiceException jre) {

if(jre.getLinkedCause()!=null)

jre.getLinkedCause().printStackTrace();

throw new junit.framework.AssertionFailedError(“JAX-RPC ServiceException caught: ” + jre);

}

assertNotNull(“binding is null”, binding);

// Time out after a minute

binding.setTimeout(60000);

// Test operation

boolean value = false;

return binding.nextNodeByReject(requestid,userid,remark);

// TBD – validate results

}

3.8 使用客户端获得待办列表

/**

* 流程待办列表

* creatorId创建人id

* createStartDate创建日期(起)

* createEndDate创建日期(止)

* workflowid工作流id

* @throws Exception

*/

public RequestBase[] GetPendingRequestBySearch(int creatorId, String createStartDate,String createEndDate,String workflowid) throws Exception {

weaver.soa.workflow.request.client.RequestServiceHttpBindingStub binding;

try {

binding = (weaver.soa.workflow.request.client.RequestServiceHttpBindingStub)

new weaver.soa.workflow.request.client.RequestServiceLocator().getRequestServiceHttpPort();

}

catch (javax.xml.rpc.ServiceException jre) {

if(jre.getLinkedCause()!=null)

jre.getLinkedCause().printStackTrace();

throw new junit.framework.AssertionFailedError(“JAX-RPC ServiceException caught: ” + jre);

}

assertNotNull(“binding is null”, binding);

// Time out after a minute

binding.setTimeout(60000);

// Test operation

weaver.soa.workflow.request.client.ArrayOfRequestBase value = null;

return binding.getPendingRequestBySearch(creatorId, createStartDate,createEndDate,workflowid).getRequestBase();

// TBD – validate results

}

3.9 使用客户端获得已办列表

/**

* 流程已办列表

* userId人员id

* createStartDate创建日期(起)

* createEndDate创建日期(止)

* workflowid工作流id

* @throws Exception

*/

public RequestBase[] testGetHendledRequestBySearch(int userId, String createStartDate,String createEndDate,String workflowid) throws Exception {

weaver.soa.workflow.request.client.RequestServiceHttpBindingStub binding;

try {

binding = (weaver.soa.workflow.request.client.RequestServiceHttpBindingStub)

new weaver.soa.workflow.request.client.RequestServiceLocator().getRequestServiceHttpPort();

}

catch (javax.xml.rpc.ServiceException jre) {

if(jre.getLinkedCause()!=null)

jre.getLinkedCause().printStackTrace();

throw new junit.framework.AssertionFailedError(“JAX-RPC ServiceException caught: ” + jre);

}

assertNotNull(“binding is null”, binding);

// Time out after a minute

binding.setTimeout(60000);

// Test operation

return binding.getHendledRequestBySearch( userId, createStartDate, createEndDate, workflowid).getRequestBase();

// TBD – validate results

}

3.10 使用客户端获得办结列表

/**

* 流程办结事宜列表

* userId人员id

* createStartDate创建日期(起)

* createEndDate创建日期(止)

* workflowid工作流id

* @throws Exception

*/

public RequestBase[] testtGetProcessedRequestBySearch(int userId, String createStartDate,String createEndDate,String workflowid) throws Exception {

weaver.soa.workflow.request.client.RequestServiceHttpBindingStub binding;

try {

binding = (weaver.soa.workflow.request.client.RequestServiceHttpBindingStub)

new weaver.soa.workflow.request.client.RequestServiceLocator().getRequestServiceHttpPort();

}

catch (javax.xml.rpc.ServiceException jre) {

if(jre.getLinkedCause()!=null)

jre.getLinkedCause().printStackTrace();

throw new junit.framework.AssertionFailedError(“JAX-RPC ServiceException caught: ” + jre);

}

assertNotNull(“binding is null”, binding);

// Time out after a minute

binding.setTimeout(60000);

// Test operation

return binding.getProcessedRequestBySearch( userId, createStartDate, createEndDate, workflowid).getRequestBase();

// TBD – validate results

}

3.11 使用客户端获得我的请求列表

/**

* 流程我的请求列表

* creatorId创建人id

* createStartDate创建日期(起)

* createEndDate创建日期(止)

* workflowid工作流id

* @throws Exception

*/

public RequestBase[] GetMyRequestBySearch(int creatorId, String createStartDate,String createEndDate,String workflowid) throws Exception {

weaver.soa.workflow.request.client.RequestServiceHttpBindingStub binding;

try {

binding = (weaver.soa.workflow.request.client.RequestServiceHttpBindingStub)

new weaver.soa.workflow.request.client.RequestServiceLocator().getRequestServiceHttpPort();

}

catch (javax.xml.rpc.ServiceException jre) {

if(jre.getLinkedCause()!=null)

jre.getLinkedCause().printStackTrace();

throw new junit.framework.AssertionFailedError(“JAX-RPC ServiceException caught: ” + jre);

}

assertNotNull(“binding is null”, binding);

// Time out after a minute

binding.setTimeout(60000);

// Test operation

return binding.getMyRequestBySearch(creatorId, createStartDate,createEndDate,workflowid).getRequestBase();

// TBD – validate results

}

(完)

SUBMITTED BY WEAVER

2012-10-21

 

转载请注明:赫非域 » e-cology7Request(RequestService)Web Service接口使用说明