JAVA调用SAP端接口

JAVA调用SAP端接口 

1、这里我们不讲述SAP端接口的开发,sap端接口已经写好了,java端只是调用sap的接口名;

2、调用过程中所需要的包及配置文件,在“java连接sap接口包sapjco3”中可以直接下载使用。

本博文中提供两个例子:

1、检查SAP商品SN码;

2、查询SAP采购单 。

SAPConn.java即JAVA与sap连接代码 


   
   
   
   
  1. package com.pcmall;
  2. import java.io.File;
  3. import java.io.FileOutputStream;
  4. import java.util.Properties;
  5. import org.apache.log4j.Logger;
  6. import com.sap.conn.jco.JCoDestination;
  7. import com.sap.conn.jco.JCoDestinationManager;
  8. import com.sap.conn.jco.JCoException;
  9. import com.sap.conn.jco.ext.DestinationDataProvider;
  10. /**
  11. * 与SAP连接配置
  12. * @author jay
  13. */
  14. public class SAPConn {
  15. private static final String ABAP_AS_POOLED = "ABAP_AS_WITH_POOL";
  16. static{
  17. Properties connectProperties = new Properties();
  18. connectProperties.setProperty(DestinationDataProvider.JCO_ASHOST, "xxx.xxx.xxx.xxx"); //服务器
  19. connectProperties.setProperty(DestinationDataProvider.JCO_SYSNR, "xxx"); //系统编号
  20. connectProperties.setProperty(DestinationDataProvider.JCO_CLIENT, "xxx"); //SAP集团
  21. connectProperties.setProperty(DestinationDataProvider.JCO_USER, "xxx"); //SAP用户名
  22. connectProperties.setProperty(DestinationDataProvider.JCO_PASSWD, "xxx"); //密码
  23. connectProperties.setProperty(DestinationDataProvider.JCO_LANG, "zh"); //登录语言
  24. connectProperties.setProperty(DestinationDataProvider.JCO_POOL_CAPACITY, "3"); //最大连接数
  25. connectProperties.setProperty(DestinationDataProvider.JCO_PEAK_LIMIT, "10"); //最大连接线程
  26. createDataFile(ABAP_AS_POOLED, "jcoDestination", connectProperties);
  27. }
  28. /**
  29. * 创建SAP接口属性文件。
  30. * @param name ABAP管道名称
  31. * @param suffix 属性文件后缀
  32. * @param properties 属性文件内容
  33. */
  34. private static void createDataFile(String name, String suffix, Properties properties){
  35. File cfg = new File(name+ "."+suffix);
  36. if(cfg.exists()){
  37. cfg.deleteOnExit();
  38. }
  39. try{
  40. FileOutputStream fos = new FileOutputStream(cfg, false);
  41. properties.store(fos, "for tests only !");
  42. fos.close();
  43. } catch (Exception e){
  44. log.error( "Create Data file fault, error msg: " + e.toString());
  45. throw new RuntimeException( "Unable to create the destination file " + cfg.getName(), e);
  46. }
  47. }
  48. /**
  49. * 获取SAP连接
  50. * @return SAP连接对象
  51. */
  52. public static JCoDestination connect(){
  53. JCoDestination destination = null;
  54. try {
  55. destination = JCoDestinationManager.getDestination(ABAP_AS_POOLED);
  56. } catch (JCoException e) {
  57. log.error( "Connect SAP fault, error msg: " + e.toString());
  58. }
  59. return destination;
  60. }
  61. private static Logger log = Logger.getLogger(SAPConn.class); // 初始化日志对象
  62. }

检查SAP商品SN码


调用接口代码如下


   
   
   
   
  1. package com.pcmall;
  2. import com.sap.conn.jco.JCoDestination;
  3. import com.sap.conn.jco.JCoFunction;
  4. import com.sap.conn.jco.JCoParameterList;
  5. import com.sap.conn.jco.JCoTable;
  6. public class CheckSnFromSAP {
  7. public static void main(String[] args) {
  8. JCoFunction function = null;
  9. JCoDestination destination = SAPConn.connect();
  10. String result= ""; //调用接口返回状态
  11. String message= ""; //调用接口返回信息
  12. try {
  13. //调用ZRFC_GET_REMAIN_SUM函数
  14. function = destination.getRepository().getFunction( "ZFMPOS_SN_CHECK");
  15. JCoParameterList input = function.getImportParameterList();
  16. //发出扫码仓库
  17. input.setValue( "ZSNWERKS", "1000");
  18. //发出扫码库位
  19. input.setValue( "ZSNLGORT", "0001");
  20. //采购凭证号
  21. input.setValue( "EBELN", "1");
  22. //获取传入表参数SN_ITEM
  23. JCoTable SN_ITEM = function.getTableParameterList().getTable( "SN_ITEM");
  24. SN_ITEM.appendRow(); //增加一行
  25. //给表参数中的字段赋值,此处测试,就随便传两个值进去
  26. //商品编码
  27. SN_ITEM.setValue( "MATNR", "1");
  28. //商品序列号
  29. SN_ITEM.setValue( "ZSERIAL", "1");
  30. function.execute(destination);
  31. result= function.getExportParameterList().getString( "RESULT"); //调用接口返回状态
  32. message= function.getExportParameterList().getString( "MESSAGE"); //调用接口返回信息
  33. System.out.println( "调用返回状态--->"+result+ ";调用返回信息--->"+message);
  34. SN_ITEM.clear(); //清空本次条件,如果要继续传入值去或者还要循环,那得将之前的条件清空
  35. } catch (Exception e) {
  36. e.printStackTrace();
  37. }
  38. }
  39. }
测试输出结果如下,说明SAP接口已经调通


查询SAP采购单 


调用接口代码如下


   
   
   
   
  1. package com.pcmall;
  2. import com.sap.conn.jco.JCoDestination;
  3. import com.sap.conn.jco.JCoFunction;
  4. import com.sap.conn.jco.JCoParameterList;
  5. import com.sap.conn.jco.JCoTable;
  6. public class GetPoFromSAP {
  7. public static void main(String[] args) {
  8. JCoFunction function = null;
  9. JCoDestination destination = SAPConn.connect();
  10. String result= ""; //调用接口返回状态
  11. String message= ""; //调用接口返回信息
  12. try {
  13. //调用ZRFC_GET_REMAIN_SUM函数
  14. function = destination.getRepository().getFunction( "ZFMPOS_PO_QUERY");
  15. JCoParameterList input = function.getImportParameterList();
  16. //采购凭证号
  17. input.setValue( "EBELN", "4500004135");
  18. //单据类型
  19. input.setValue( "BSART", "TR");
  20. //制单日期从
  21. input.setValue( "AEDATF", "");
  22. //制单日期到
  23. input.setValue( "AEDATT", "");
  24. //出入库标识
  25. input.setValue( "INOUT", "I");
  26. //地点库位权限值
  27. input.setValue( "AUTHORITY", "");
  28. function.execute(destination);
  29. result= function.getExportParameterList().getString( "RESULT"); //调用接口返回状态
  30. message= function.getExportParameterList().getString( "MESSAGE"); //调用接口返回信息
  31. if(result.equals( "E")){
  32. System.out.println( "调用返回状态--->"+result+ ";调用返回信息--->"+message);
  33. return;
  34. } else{
  35. System.out.println( "调用返回状态--->"+result+ ";调用返回信息--->"+message);
  36. JCoParameterList tblexport = function.getTableParameterList();
  37. //JCoParameterList tblexport = function.getTableParameterList().getTable("QUERY_H");
  38. String msg = tblexport.toXML();
  39. System.out.println( "调用返回表XML--->"+msg);
  40. }
  41. } catch (Exception e) {
  42. e.printStackTrace();
  43. }
  44. }
  45. }

测试输出结果如下,说明SAP接口已经调通


具体的XML文本内容如下,发现返回有两张表,分别为QUERY_H、QUERY_I主从表,,得到该XML内容,则JAVA端可以对此解析,得到所需要业务信息。


   
   
   
   
  1. xml version="1.0" encoding="utf-8"?>
  2. <TABLES>
  3. <QUERY_H>
  4. <item>
  5. <EBELN>4500004135 EBELN>
  6. <ZTYPE>04 ZTYPE>
  7. <BSART>ZDN BSART>
  8. <ZWCHARG>1 ZWCHARG>
  9. <AEDAT>2014-10-19 AEDAT>
  10. <ZLIFNR>1000 ZLIFNR>
  11. <ZLCAN/>
  12. <KUNNR/>
  13. <NAME1/>
  14. <ZLLAND1>中国 ZLLAND1>
  15. <ZLREGIO>上海 ZLREGIO>
  16. <ZLORT01>南京 ZLORT01>
  17. <ZLSTREET>中国上海南京1000新地址 ZLSTREET>
  18. <ZLPSTLZ>210000 ZLPSTLZ>
  19. <ZLTELF1>888888881 ZLTELF1>
  20. <ZLTELFX/>
  21. <ZLLIAN>王五(新) ZLLIAN>
  22. <ZFA/>
  23. <ZBEIZHU/>
  24. <ZWNO>0 ZWNO>
  25. <ZWSTATUS/>
  26. <ZWBEIZHU/>
  27. <GYS_EBELN/>
  28. <PUSH_FLAG>0 PUSH_FLAG>
  29. <ZSTATUS/>
  30. <ZWCLASS>IBD ZWCLASS>
  31. item>
  32. QUERY_H>
  33. <QUERY_I>
  34. <item>
  35. <EBELN>4500004135 EBELN>
  36. <ZEBELP>00001 ZEBELP>
  37. <MATNR>3 MATNR>
  38. <ZFWERKS>1000 ZFWERKS>
  39. <ZFWNAME>木头若愚 ZFWNAME>
  40. <ZFLGORT>0001 ZFLGORT>
  41. <ZFLNAME>仓库 ZFLNAME>
  42. <ZSWERKS>1000 ZSWERKS>
  43. <ZSWNAME>木头若愚 ZSWNAME>
  44. <ZSLGORT>0002 ZSLGORT>
  45. <ZSLNAME>坏件库 ZSLNAME>
  46. <ZDYU>20141019 ZDYU>
  47. <ZXMENG>1 ZXMENG>
  48. <ZSMENG/>
  49. <ZDFA/>
  50. <ZYMENG>0 ZYMENG>
  51. item>
  52. <item>
  53. <EBELN>4500004135 EBELN>
  54. <ZEBELP>00002 ZEBELP>
  55. <MATNR>2 MATNR>
  56. <ZFWERKS>1000 ZFWERKS>
  57. <ZFWNAME>木头若愚 ZFWNAME>
  58. <ZFLGORT>0001 ZFLGORT>
  59. <ZFLNAME>仓库 ZFLNAME>
  60. <ZSWERKS>1000 ZSWERKS>
  61. <ZSWNAME>木头若愚 ZSWNAME>
  62. <ZSLGORT>0002 ZSLGORT>
  63. <ZSLNAME>坏件库 ZSLNAME>
  64. <ZDYU>20141019 ZDYU>
  65. <ZXMENG>1 ZXMENG>
  66. <ZSMENG/>
  67. <ZDFA/>
  68. <ZYMENG>0 ZYMENG>
  69. item>
  70. <item>
  71. <EBELN>4500004135 EBELN>
  72. <ZEBELP>00003 ZEBELP>
  73. <MATNR>1 MATNR>
  74. <ZFWERKS>1000 ZFWERKS>
  75. <ZFWNAME>木头若愚 ZFWNAME>
  76. <ZFLGORT>0001 ZFLGORT>
  77. <ZFLNAME>仓库 ZFLNAME>
  78. <ZSWERKS>1000 ZSWERKS>
  79. <ZSWNAME>木头若愚 ZSWNAME>
  80. <ZSLGORT>0002 ZSLGORT>
  81. <ZSLNAME>坏件库 ZSLNAME>
  82. <ZDYU>20141019 ZDYU>
  83. <ZXMENG>1 ZXMENG>
  84. <ZSMENG/>
  85. <ZDFA/>
  86. <ZYMENG>2 ZYMENG>
  87. item>
  88. QUERY_I>
  89. TABLES>

        
原创文章 136获赞 360访问量 83万+

你可能感兴趣的:(JAVA调用SAP端接口)