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>

        <div class="person-messagebox">
            <div class="left-message"><a href="https://blog.csdn.net/Jay_1989">
                <img src="https://profile.csdnimg.cn/E/7/4/3_jay_1989" class="avatar_pic" username="Jay_1989">
            </a></div>
            <div class="middle-message">
                                    <div class="title"><span class="tit "><a href="https://blog.csdn.net/Jay_1989" data-report-click="{&quot;mod&quot;:&quot;popu_379&quot;,&quot;ab&quot;:&quot;new&quot;}" target="_blank">Jay_1989</a></span>
                    <!-- 等级,level -->
                                            <img class="identity-icon" src="https://csdnimg.cn/identity/blog6.png">                                            </div>
                <div class="text"><span>原创文章 136</span><span>获赞 360</span><span>访问量 83万+</span></div>
            </div>
                            <div class="right-message">
                                        <a class="btn btn-sm  bt-button personal-watch" data-report-click="{&quot;mod&quot;:&quot;popu_379&quot;,&quot;ab&quot;:&quot;new&quot;}">关注</a>
                                                            <a href="https://bbs.csdn.net/topics/395532828" target="_blank" class="btn btn-sm bt-button personal-messageboard">他的留言板
                    </a>
                                </div>
                        </div>
                    
    </div>
</article>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
调用 SAP 的 RFC 接口,需要使用 SAP 提供的 Java Connector(SAP JCo)库。在使用 SAP JCo 调用 RFC 接口时,需要在 SAP JCo 的配置文件中设置系统 ID(System ID),以便正确地连接到 SAP 系统。 要配置 SAP JCo 的系统 ID,需要进行以下步骤: 1. 打开 SAP JCo 的配置文件 sapjco3.properties,该文件通常位于应用程序的 classpath 下。 2. 在 sapjco3.properties 文件中添加以下配置项: ``` jco.client.sysnr=<系统编号> jco.client.client=<客户> jco.client.user=<用户名> jco.client.passwd=<密码> jco.client.lang=<语言> jco.client.ashost=<应用服务器主机名> jco.client.saprouter=<SAP 路由器> ``` 其中,<系统编号> 是 SAP 系统的编号,<客户> 是 SAP 客户的编号,<用户名> 和 <密码> 是 SAP 用户的登录信息,<语言> 是登录时使用的语言代码,<应用服务器主机名> 是 SAP 应用服务器的主机名,<SAP 路由器> 是可选的 SAP 路由器配置。 3. 在 Java 代码中使用 SAP JCo 的 API 调用 RFC 接口时,可以使用以下代码获取 SAP JCo 的配置信息: ``` JCoDestination destination = JCoDestinationManager.getDestination("<destination>"); ``` 其中,<destination> 是 SAP JCo 的目标名称,可以在 sapjco3.properties 文件中配置。 4. 使用 SAP JCo 的 API 调用 RFC 接口时,需要使用 SAP JCo 的函数模块名称和函数模块的输入参数,例如: ``` JCoFunction function = destination.getRepository().getFunction("<function_module>"); if (function == null) { throw new RuntimeException("<function_module> not found in SAP system."); } function.getImportParameterList().setValue("<parameter_name>", "<parameter_value>"); function.execute(destination); ``` 其中,<function_module> 是 SAP RFC 函数模块的名称,<parameter_name> 和 <parameter_value> 是函数模块的输入参数名称和值。 以上是 Java 调用 SAP RFC 接口时配置系统 ID 的基本步骤。具体的配置和调用方法可能会因不同的 SAP 系统和 RFC 接口而有所不同,需要根据实际情况进行调整和修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值