1. 问题描述
- 在CRM里面创建合同审批流程,审批结束后,需要在OA里面创建一条对应的合同流程。
- OA合同流程表单有个"客户"字段,CRM需要传客户的id到数据库,但CRM系统中客户的id和OA里面客户的id不对应,所有需要给CRM写一个根据客户名称查询客户id的方法。
- 原webservice的方法只有三个:新增,编辑,删除。没有查询接口。
2. 解决办法
直接修改源代码,增加查询接口。
- 到服务器上,将OA目录下(D:\WEAVER\ecology\classbean\com\engine\crm\interfaces\webservice)的CrmService.class和CrmServiceImpl.class文件拷贝到idea进行反编译。
- 新建对应的CrmService.java和CrmServiceImpl.java文件,使用notepad++打开,将反编译的代码复制进去。
- 依葫芦画瓢增加客户查询("customerFind")方法
在CrmService.java里面加入如下代码:
// 根据客户名称查询客户id,接口名称叫"customerFind"
@WebMethod(
operationName = "customerFind",
action = "urn:com.engine.crm.interfaces.webservice.CrmService.customerFind"
)
String customerFind(String var1) throws Exception;
在CrmServiceImpl.java里面加入如下代码:
// 根据客户名称查询客户id,实现"customerFind"接口
public String customerFind(String khmc) {
String khid = "";
RecordSet rs = new RecordSet();
rs.executeQuery("select id from CRM_CustomerInfo where name=?", new Object[] {khmc});
if (rs.next()) {
khid = rs.getString("id");
}
return khid;
}
3. 更新。
3.1 放入服务器,服务器会自动编译java文件生成class文件。
3.2 在OA里面注册webservice的"customerFind"方法。
4. 测试
4.1 基于CXF(Celtix + XFire)调用webservice,引入pom依赖:
<!--webservice -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>3.1.10</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http</artifactId>
<version>3.1.10</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-ws</artifactId>
<version>1.3.3.RELEASE</version>
</dependency>
<dependency>
<groupId>wsdl4j</groupId>
<artifactId>wsdl4j</artifactId>
</dependency>
4.2 代码测试
/**
* 调用webservice接口,查找客户。
*/
public String customerFind() {
// 创建动态客户端
JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
// 对方的wsdl地址
Client client = dcf.createClient("http://192.168.10.116/services/CrmService?wsdl");
String json = null;
try {
QName qName = new QName("http://localhost/services/CrmService", "customerFind");
String paraXml = "泛微网络233"; // 参数不用传xml格式的,直接传String
String userId = "730"; // OA里面用户的id
Object[] objects1 = client.invoke(qName, paraXml.toString(), userId); // 参数1,参数2,参数3......按顺序放就看可以
json = JSONObject.toJSONString(objects1[0]);
System.out.println("返回数据:" + json.toString());
} catch (Exception e) {
e.printStackTrace();
}
return json;
}
4.3 返回结果
接口增加成功。