(二)通过JAVA调用SAP接口 (增加一二级参数)

一、建立sap连接

请参考我的上一篇博客
JAVA连接SAP

二、测试项目环境准备

  1. 在上一篇操作下已经建好的环境后,在上面的基础上新增类即可

三、源码编写及测试

首先建立用来传递数据的实体类SapData,方便直接取出数据进行下一步处理
SapData

/**
* Created by gang.xu01@hand-china.com on 2018/12/5
*/
public class SapData { // 列数
private int fieldCount; // 列的具体名称
private String[] fieldNames; // 全部数据
private List<Map<String, String>> data; public SapData(int fieldCount, String[] fieldNames, List<Map<String, String>> data) {
this.fieldCount = fieldCount;
this.fieldNames = fieldNames;
this.data = data;
} public SapData() { } public int getFieldCount() {
return fieldCount;
} public void setFieldCount(int fieldCount) {
this.fieldCount = fieldCount;
} public String[] getFieldNames() {
return fieldNames;
} public void setFieldNames(String[] fieldNames) {
this.fieldNames = fieldNames;
} public List<Map<String, String>> getData() {
return data;
} public void setData(List<Map<String, String>> data) {
this.data = data;
} @Override
public String toString() {
return "SapData{" +
"fieldCount=" + fieldCount +
", fieldNames=" + Arrays.toString(fieldNames) +
", data=" + data +
'}';
}
}

然后编写用来从sap连接中获取数据的工具类 MultiFromSAP

编写连接类 MultiFromSAP 下面是源码

/**
* Created by gang.xu01@hand-china.com on 2018/12/4
*/
public class MultiFromSAP { /**
* description: 从sap获取数据的工具类
*
* @date 2018/12/6 10:17 AM
* @author gang.xu01@hand-china.com
* @param sapConn sap连接
* @param interfaceName 接口名称
* @param firstParamKey 一级参数key 用逗号分隔
* @param firstParamValue 一级参数value 用逗号分隔
* @param secondParamKey 二级参数key 用逗号分隔
* @param secondParamValue 二级参数value 用逗号分隔
*
* @return List
*/
public static List<SapData> getSapData(SapConn sapConn, String interfaceName,
String firstParamKey, String firstParamValue,
String secondParamKey, String secondParamValue) {
List<SapData> returnList = new ArrayList<SapData>();
JCoFunction function;
JCoDestination destination = SAPConnUtils.connect(sapConn);
System.out.println("正在从SAP获取数据");
try {
// 调用interface函数
function = destination.getRepository().getFunction(interfaceName); // 遍历全部得到的table并处理
for (JCoField field : function.getTableParameterList()) { // 按照需求可以整理出一条一条的数据以便插入数据库
JCoTable responseTable = field.getTable();
// 一级参数
if("".equals(firstParamKey) || "".equals(firstParamValue)) {
// 不需要参数
}else {
String[] paramKeys = firstParamKey.split(",");
String[] paramValues = firstParamValue.split(",");
for (int i = 0; i < paramKeys.length; i++) {
function.getImportParameterList().setValue(paramKeys[i],
"null".equals(paramValues[i]) ? "" : paramValues[i]);
}
} // 二级参数
if("".equals(secondParamKey) || "".equals(secondParamValue)) {
// 不需要参数
}else {
responseTable.appendRow();
String[] paramKeys = secondParamKey.split(",");
String[] paramValues = secondParamValue.split(",");
for (int i = 0; i < paramKeys.length; i++) {
responseTable.setValue(paramKeys[i],
"null".equals(paramValues[i]) ? "" : paramValues[i]);
}
}
// 调用函数得到返回结果(调用接口把值放到function中)
function.execute(destination); // 获取metaData(包含表的关键信息)
JCoRecordMetaData metaData = responseTable.getRecordMetaData();
SapData sapData = new SapData();
sapData.setFieldCount(metaData.getFieldCount());
String[] name = new String[sapData.getFieldCount()];
List<Map<String, String>> sapList = new ArrayList<Map<String, String>>();
// 获取全部名称
for (int j = 0; j < sapData.getFieldCount(); j++) {
name[j] = metaData.getName(j);
}
sapData.setFieldNames(name);
// 获取全部数据
for (int i = 0; i < responseTable.getNumRows(); i++) {
responseTable.setRow(i);
Map<String, String> sapMap = new HashMap<String, String>();
for (String fieldName : sapData.getFieldNames()) {
sapMap.put(fieldName, responseTable.getString (fieldName));
}
sapList.add(sapMap);
}
sapData.setData(sapList);
returnList.add(sapData);
} }catch (Exception e) {
e.printStackTrace();
return null;
}
System.out.println("获取成功");
return returnList;
}
}
接下来编写一个简单的测试类testData
/**
* Created by gang.xu01@hand-china.com on 2018/12/9
*/
public class testData { public static void main(String[] args) { final String interfaceName = "xxx";
// 一级参数
final String firstParamKey = "xx";
final String firstParamValue = "xx";
// 二级参数
final String secondParamKey = "xx";
final String secondParamValue = "xx"; SapConn con = new SapConn(
"xx",
"xx",
"xx",
"xxx",
"xxx",
"xx",
"xx",
"xx",
"xxx"
); // 测试数据
MultiFromSAP.getSapData(con, interfaceName, firstParamKey, firstParamValue, secondParamKey, secondParamValue);
} }

如果出现空指针或者取到了结果但是是空值,那么表明取数为空或者不成功,请检查一级参数或者二级参数是否正确。

此时如果调用结果如下则表明取数成功,此时全部数据封装在实体中,直接操作实体便可以操作。

(二)通过JAVA调用SAP接口 (增加一二级参数)的更多相关文章

  1. Java 调用http接口(基于OkHttp的Http工具类方法示例)

    目录 Java 调用http接口(基于OkHttp的Http工具类方法示例) OkHttp3 MAVEN依赖 Http get操作示例 Http Post操作示例 Http 超时控制 工具类示例 Ja ...

  2. Java调用RestFul接口

    使用Java调用RestFul接口,以POST请求为例,以下提供几种方法: 一.通过HttpURLConnection调用 1 public String postRequest(String url ...

  3. Java调用webservice接口方法

                             java调用webservice接口   webservice的 发布一般都是使用WSDL(web service descriptive langu ...

  4. Groovy小结:java调用Groovy方法并传递参数

    Groovy小结:java调用Groovy方法并传递参数 @(JAVA总结) 1. 场景描述 在网上查了资料发现,java有三种方式调用groovy脚本.但是真正在实际的服务器环境中,嵌入groovy ...

  5. Java 调用 php接口(Ajax)(二)

    由于项目里面需要用到Java调用PHP的充值接口,所以学习了一下,以下这个Demo是个小小的例子,写下来做个笔记> jsp页面: <%@ page language="java& ...

  6. 三种方法实现java调用Restful接口

    1,基本介绍 Restful接口的调用,前端一般使用ajax调用,后端可以使用的方法比较多, 本次介绍三种: 1.HttpURLConnection实现 2.HttpClient实现 3.Spring ...

  7. Java基础学习笔记十二 类、抽象类、接口作为方法参数和返回值以及常用API

    不同修饰符使用细节 常用来修饰类.方法.变量的修饰符 public 权限修饰符,公共访问, 类,方法,成员变量 protected 权限修饰符,受保护访问, 方法,成员变量 默认什么也不写 也是一种权 ...

  8. Java调用第三方接口工具类(json、form)

    1.JSON值访问 /** * 调用对方接口方法 * @param path 对方或第三方提供的路径 * @param data 向对方或第三方发送的数据,大多数情况下给对方发送JSON数据让对方解析 ...

  9. java 调用webservice接口wsdl,推荐使用wsdl2java,放弃wsimport

    网上说wsimport是jdk1.6后自带的客户端生成调用webservice接口的工具,其实我挺喜欢原生的东西,毕竟自家的东西用着应该最顺手啊,但往往让人惊艳的是那些集成工具. 本机jdk1.8.1 ...

随机推荐

  1. C#获取当前运行的源代码的文件名和当前源代码的行数的方法

    在C#中记录日志时,为了以后查找错误或者跟踪的方便,最好能记录下出错的源代码的文件名和出错的源代码的行数. 这2个方法如下: /// <summary>         /// 取得当前源 ...

  2. Python 实现快速排序和随机快速排序

    直接上代码: #快速排序 #coding: utf-8 def quicksort(a,left,right): if(left<right): mid = partition(a,left,r ...

  3. 网络安全系列 之 SQL注入学习总结

    目录 1. sql注入概述 2. sql注入测试工具 3. sql注入防御方法 3.1 问题来源 3.2 防御方法 4. SQL注入防御举例 4.1 使用JDBC时,SQL语句进行了拼接 4.2 使用 ...

  4. scrpy--分布式爬虫

    原来的scrapy中的Scheduler维护的是当前机器中的任务队列(存放着Request对象以及回调函数等信息) + 当前的去重队列(存放访问过的url地址) 实现分布式的关键就是需要找一台专门的主 ...

  5. springcloud(十六)、feign+hystrix+ribbon+zuul应用案例

    在 基于 " sringcloud(十四).ribbon负载均衡策略应用案例 "所有工程的基础上,进行如下操作进行网关设置 1.创建eureka-client-consumer-z ...

  6. easyui combotree的使用示例

    一.View: 1.定义输入控件 <input id="ParentId" name="ParentId"> 2.绑定combotree $('#P ...

  7. [JZOJ4633] 【GDOI2017模拟7.15】萌萌哒

    题目 描述 题目大意 给你一个数列,接下来有许多个操作,使得区间[l1,r1][l_1,r_1][l1​,r1​]和[l2,r2][l_2,r_2][l2​,r2​]对应的位置染上同样的颜色(使得它们 ...

  8. 8年前诞生于淘宝,细数阿里云RPA 的前世今生!

    9月10日,踏入55岁的马云正式卸任阿里巴巴董事局主席一职,由阿里巴巴集团CEO张勇接任.公寓创业.西湖论剑.美国敲钟,从成立到登顶中国最值钱的公司,阿里巴巴只用了20年. 阿里云RPA,2011年诞 ...

  9. 二分+2-sat——hdu3062

    hdu3622升级版 注意要保留两位小数 /* 给定n对圆心(x,y),要求从每对里找到一个点画圆,不可相交 使得最小半径最大 二分答案,设最小半径为r 然后两两配对一次进行判断,在2-sat上连边即 ...

  10. go的单引号、双引号、反引号的区别

    Go语言的字符串类型string在本质上就与其他语言的字符串类型不同: Java的String.C++的std::string以及Python3的str类型都只是定宽字符序列 Go语言的字符串是一个用 ...