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

一、建立sap连接

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

二、测试项目环境准备

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

三、源码编写及测试

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

  1. /**
  2. * Created by gang.xu01@hand-china.com on 2018/12/5
  3. */
  4. public class SapData {
  5.  
  6. // 列数
  7. private int fieldCount;
  8.  
  9. // 列的具体名称
  10. private String[] fieldNames;
  11.  
  12. // 全部数据
  13. private List<Map<String, String>> data;
  14.  
  15. public SapData(int fieldCount, String[] fieldNames, List<Map<String, String>> data) {
  16. this.fieldCount = fieldCount;
  17. this.fieldNames = fieldNames;
  18. this.data = data;
  19. }
  20.  
  21. public SapData() {
  22.  
  23. }
  24.  
  25. public int getFieldCount() {
  26. return fieldCount;
  27. }
  28.  
  29. public void setFieldCount(int fieldCount) {
  30. this.fieldCount = fieldCount;
  31. }
  32.  
  33. public String[] getFieldNames() {
  34. return fieldNames;
  35. }
  36.  
  37. public void setFieldNames(String[] fieldNames) {
  38. this.fieldNames = fieldNames;
  39. }
  40.  
  41. public List<Map<String, String>> getData() {
  42. return data;
  43. }
  44.  
  45. public void setData(List<Map<String, String>> data) {
  46. this.data = data;
  47. }
  48.  
  49. @Override
  50. public String toString() {
  51. return "SapData{" +
  52. "fieldCount=" + fieldCount +
  53. ", fieldNames=" + Arrays.toString(fieldNames) +
  54. ", data=" + data +
  55. '}';
  56. }
  57. }

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

编写连接类 MultiFromSAP 下面是源码

  1. /**
  2. * Created by gang.xu01@hand-china.com on 2018/12/4
  3. */
  4. public class MultiFromSAP {
  5.  
  6. /**
  7. * description: 从sap获取数据的工具类
  8. *
  9. * @date 2018/12/6 10:17 AM
  10. * @author gang.xu01@hand-china.com
  11. * @param sapConn sap连接
  12. * @param interfaceName 接口名称
  13. * @param firstParamKey 一级参数key 用逗号分隔
  14. * @param firstParamValue 一级参数value 用逗号分隔
  15. * @param secondParamKey 二级参数key 用逗号分隔
  16. * @param secondParamValue 二级参数value 用逗号分隔
  17. *
  18. * @return List
  19. */
  20. public static List<SapData> getSapData(SapConn sapConn, String interfaceName,
  21. String firstParamKey, String firstParamValue,
  22. String secondParamKey, String secondParamValue) {
  23. List<SapData> returnList = new ArrayList<SapData>();
  24. JCoFunction function;
  25. JCoDestination destination = SAPConnUtils.connect(sapConn);
  26. System.out.println("正在从SAP获取数据");
  27. try {
  28. // 调用interface函数
  29. function = destination.getRepository().getFunction(interfaceName);
  30.  
  31. // 遍历全部得到的table并处理
  32. for (JCoField field : function.getTableParameterList()) {
  33.  
  34. // 按照需求可以整理出一条一条的数据以便插入数据库
  35. JCoTable responseTable = field.getTable();
  36. // 一级参数
  37. if("".equals(firstParamKey) || "".equals(firstParamValue)) {
  38. // 不需要参数
  39. }else {
  40. String[] paramKeys = firstParamKey.split(",");
  41. String[] paramValues = firstParamValue.split(",");
  42. for (int i = 0; i < paramKeys.length; i++) {
  43. function.getImportParameterList().setValue(paramKeys[i],
  44. "null".equals(paramValues[i]) ? "" : paramValues[i]);
  45. }
  46. }
  47.  
  48. // 二级参数
  49. if("".equals(secondParamKey) || "".equals(secondParamValue)) {
  50. // 不需要参数
  51. }else {
  52. responseTable.appendRow();
  53. String[] paramKeys = secondParamKey.split(",");
  54. String[] paramValues = secondParamValue.split(",");
  55. for (int i = 0; i < paramKeys.length; i++) {
  56. responseTable.setValue(paramKeys[i],
  57. "null".equals(paramValues[i]) ? "" : paramValues[i]);
  58. }
  59. }
  60. // 调用函数得到返回结果(调用接口把值放到function中)
  61. function.execute(destination);
  62.  
  63. // 获取metaData(包含表的关键信息)
  64. JCoRecordMetaData metaData = responseTable.getRecordMetaData();
  65. SapData sapData = new SapData();
  66. sapData.setFieldCount(metaData.getFieldCount());
  67. String[] name = new String[sapData.getFieldCount()];
  68. List<Map<String, String>> sapList = new ArrayList<Map<String, String>>();
  69. // 获取全部名称
  70. for (int j = 0; j < sapData.getFieldCount(); j++) {
  71. name[j] = metaData.getName(j);
  72. }
  73. sapData.setFieldNames(name);
  74. // 获取全部数据
  75. for (int i = 0; i < responseTable.getNumRows(); i++) {
  76. responseTable.setRow(i);
  77. Map<String, String> sapMap = new HashMap<String, String>();
  78. for (String fieldName : sapData.getFieldNames()) {
  79. sapMap.put(fieldName, responseTable.getString (fieldName));
  80. }
  81. sapList.add(sapMap);
  82. }
  83. sapData.setData(sapList);
  84. returnList.add(sapData);
  85. }
  86.  
  87. }catch (Exception e) {
  88. e.printStackTrace();
  89. return null;
  90. }
  91. System.out.println("获取成功");
  92. return returnList;
  93. }
  94. }
  1. 接下来编写一个简单的测试类testData
  1. /**
  2. * Created by gang.xu01@hand-china.com on 2018/12/9
  3. */
  4. public class testData {
  5.  
  6. public static void main(String[] args) {
  7.  
  8. final String interfaceName = "xxx";
  9. // 一级参数
  10. final String firstParamKey = "xx";
  11. final String firstParamValue = "xx";
  12. // 二级参数
  13. final String secondParamKey = "xx";
  14. final String secondParamValue = "xx";
  15.  
  16. SapConn con = new SapConn(
  17. "xx",
  18. "xx",
  19. "xx",
  20. "xxx",
  21. "xxx",
  22. "xx",
  23. "xx",
  24. "xx",
  25. "xxx"
  26. );
  27.  
  28. // 测试数据
  29. MultiFromSAP.getSapData(con, interfaceName, firstParamKey, firstParamValue, secondParamKey, secondParamValue);
  30. }
  31.  
  32. }

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

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

(二)通过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. 训练计划Day2

    Day2:线段树(可持久化),平衡树(splay,treap),并查集,树链剖分,动态树,树状数组,点分治(可持久). 线段树模板 //区间最大,and,or #include <cstdio& ...

  2. Windows平台编译libevent

    使用VisualStudio来编译,我的电脑上安装的是VS2013.1.在开始菜单项里面(或者在VS安装路径中)打开Developer Command Prompt for VS2013.exe2.在 ...

  3. SPSS分类分析:决策树

    SPSS分类分析:决策树 一.决策树(分析-分类-决策树) "决策树"过程创建基于树的分类模型.它将个案分为若干组,或根据自变量(预测变量)的值预测因变量(目标变量)的值.此过程为 ...

  4. angluar1.8.2 PC Mail项目笔记

    兼容性技术选型 前后端分离 代理gulp nginx jq+angluar1.8.2 使用级别刚刚好的相对目录,方便转移项目或者做接口代理时的切换目录 指令过滤器服务控制器书写位置 方法封装,自己写和 ...

  5. tomcat mysql 练习

    [root@k8s-master tomcat_demo]# cat mysql-rc.yml apiVersion: v1 kind: ReplicationController metadata: ...

  6. MyBatis的查询

    MyBatis的查询 在上一个MyBatis的核心API中介绍了SqlSessionFactoryBuilder.SqlSessionFactory以及SqlSession是什么,它们都有什么作用,本 ...

  7. mac系统升级导致无法在iOS设备中运行Safari Web 调试器

    macOS系统升级之后,可能会导致Safari开发选项中没有iOS设备,进而无法运行Safari Web 调试器. 此问题的解决办法: 请转到设置>常规>重置>重置位置和隐私.现在, ...

  8. struts2文件上传,文件类型 allowedTypes对应

    '.a' : 'application/octet-stream', 2 '.ai' : 'application/postscript', 3 '.aif' : 'audio/x-aiff', 4 ...

  9. git sync tags with remote

    git 同步遠程標籤 在 .git/config的 [remote "origin"] 下加了 fetch = +refs/tags/*:refs/tags/* 最後就變成 [re ...

  10. LJJ爱数数

    LJJ爱数数 求\(\sum_{i=1}^n\sum_{j=1}^n\sum_{k=1}^n\epsilon(gcd(i,j,k))(\frac{1}{i}+\frac{1}{j}==\frac{1} ...