阅读 104

java链接SAP工具类

java链接SAP工具类

先将jar引入


<!-- 链接SAP -->

<dependency>

<groupId>com.github.easonjim</groupId>

<artifactId>com.sap.conn.jco.sapjco3</artifactId>

<version>3.0.11</version>

</dependency>

1

2

3

4

5

6

因为我将SAP登录名都放在数据库表里面保存了,所以不想一样做的可以直接填入参数

ISysSapDatasourceService就是获取数据库表信息的,不这样做可以删除掉


import com.sap.conn.jco.JCoDestination;

import com.sap.conn.jco.JCoDestinationManager;

import com.sap.conn.jco.JCoException;

import com.sap.conn.jco.ext.DestinationDataProvider;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Component;


import java.io.File;

import java.io.FileOutputStream;

import java.util.Properties;



@Component

public class SAPConnUtils {


    private static String ABAP_AS_POOLED;


    @Autowired

    private ISysSapDatasourceService iSysSapDatasourceService;


    /**

     * 创建SAP接口属性文件。

     * @param name  ABAP管道名称

     * @param suffix    属性文件后缀

     * @param properties    属性文件内容

     */

    private static void createDataFile(String name, String suffix, Properties properties){

        File cfg = new File(name+"."+suffix);

        if(cfg.exists()){

            cfg.deleteOnExit();

        }

        try{

            FileOutputStream fos = new FileOutputStream(cfg, false);

            properties.store(fos, "for tests only !");

            fos.close();

        }catch (Exception e){

            System.out.println("Create Data file fault, error msg: " + e.toString());

            throw new RuntimeException("Unable to create the destination file " + cfg.getName(), e);

        }

    }


    /**

     * 初始化SAP连接

     */


    private void initProperties(String companyCode) {

        SysSapDatasource sysSapDatasource = iSysSapDatasourceService.selectSysSapDatasourceByCode(companyCode);


        ABAP_AS_POOLED = sysSapDatasource.getDataname();


        Properties connectProperties = new Properties();

        // SAP服务器

        connectProperties.setProperty(DestinationDataProvider.JCO_ASHOST, sysSapDatasource.getHostname());

        // SAP系统编号

        connectProperties.setProperty(DestinationDataProvider.JCO_SYSNR,  sysSapDatasource.getSystemnum());

        // SAP集团

        connectProperties.setProperty(DestinationDataProvider.JCO_CLIENT, sysSapDatasource.getClient());

        // SAP用户名

        connectProperties.setProperty(DestinationDataProvider.JCO_USER,   sysSapDatasource.getUsername());

        // SAP密码

        connectProperties.setProperty(DestinationDataProvider.JCO_PASSWD, sysSapDatasource.getPassword());

        // SAP登录语言

        //connectProperties.setProperty(DestinationDataProvider.JCO_LANG,   sapConn.getJCO_LANG());

        // 最大连接数

        //connectProperties.setProperty(DestinationDataProvider.JCO_POOL_CAPACITY, sapConn.getJCO_POOL_CAPACITY());

        // 最大连接线程

        //connectProperties.setProperty(DestinationDataProvider.JCO_PEAK_LIMIT, sapConn.getJCO_PEAK_LIMIT());

        // SAP ROUTER

        //connectProperties.setProperty(DestinationDataProvider.JCO_SAPROUTER, sapConn.getJCO_SAPROUTER());


        createDataFile(ABAP_AS_POOLED, "jcoDestination", connectProperties);

    }


    /**

     * 获取SAP连接

     * @return  SAP连接对象

     */

    public JCoDestination connect(String companyCode){

        System.out.println("正在连接至SAP...");

        JCoDestination destination = null;

        initProperties(companyCode);

        try {

            destination = JCoDestinationManager.getDestination(ABAP_AS_POOLED);

            destination.ping();

            System.out.println("已成功建立sap的连接");

        } catch (JCoException e) {

            System.out.println("Connect SAP fault, error msg: " + e.toString());

        }

        return destination;

    }


}


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

import com.sap.conn.jco.JCoDestination;

import com.sap.conn.jco.JCoException;

import com.sap.conn.jco.JCoFunction;

import com.sap.conn.jco.JCoFunctionTemplate;

import com.sap.conn.jco.JCoParameterList;

import com.sap.conn.jco.JCoRepository;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Component;



@Component

public class SAPHelper {


    private static Logger log = LoggerFactory.getLogger(SAPHelper.class);


    private static String comPyCode = "";


    @Autowired

    private SAPConnUtils sapConnUtils;



    public JCoFunctionTemplate getRfcTemplate(String rfcName, String companyCode) throws Exception {

        JCoDestination destination = sapConnUtils.connect(companyCode);

        JCoRepository repository = null;

        try {

            repository = destination.getRepository();

        } catch (Exception e) {

            repository = destination.getRepository();

        }

        JCoFunctionTemplate template = repository.getFunctionTemplate(rfcName);

        return template;

    }


    public JCoFunction getRfcFunction(String rfcName, String companyCode) throws Exception {

        JCoFunctionTemplate template = getRfcTemplate(rfcName, companyCode);

        return template.getFunction();

    }


    public JCoFunction getFunction(String functionName, String companyCode) {

        comPyCode = companyCode;

        JCoFunction function = null;

        try {

            function = getRfcFunction(functionName, companyCode);

        } catch (JCoException e) {

            log.info(e.toString());

        } catch (NullPointerException e) {

            log.info(e.toString());

        } catch (Exception e) {

            log.info(e.toString());

        }

        return function;

    }


    public void execute(JCoFunction function) throws JCoException {

        JCoParameterList paramList = function.getImportParameterList();

        if (paramList != null) {

        }

        try {

            function.execute(getDestination(comPyCode));

        } catch (Exception e) {

            log.info(e.toString());

        }

        paramList = function.getExportParameterList();

        if (paramList != null) {


        }

    }


    public JCoDestination getDestination(String companyCode) throws Exception {

        JCoDestination destination = sapConnUtils.connect(companyCode);

        return destination;

    }


    public String ping(String companyCode) {

        String msg = null;

        try {

            getDestination(companyCode).ping();

            msg = "链接成功!";

        } catch (Exception ex) {

            msg = "链接失败!";

            return msg;

        }

        return msg;

    }


}


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

调用方式:



@Autowired

private SAPHelper sapHelper;


public List<Map<String,String>> getMemberList_Sap(){

        log.info("获取SAP人员信息开始》》》》》》》》》》》》》》》》》》》");

        List<Map<String,String>> list = new ArrayList<>();

        try {

            JCoFunction function = null;

            function = sapHelper.getFunction("RFC函数名","1111");//1111为公司代码,用来查数据表的登录名等信息

            JCoParameterList jCoFields = function.getImportParameterList();

            String date = DateUtils.getDate().replace("-","");

            jCoFields.setValue("BEGDA",date);//参数写这里,也可能是表什么的,那就jCoFields.getTable然后循环往里面写数据,参考下面的取值循环

            sapHelper.execute(function);

            JCoTable ZTPERNR_MASTER_DATA_SBH = function.getTableParameterList().getTable("返回的表名");

            for (int i = 0; i < ZTPERNR_MASTER_DATA_SBH.getNumRows(); i++) {

                Map<String,String> map = new HashMap<>();

                ZTPERNR_MASTER_DATA_SBH.setRow(i);

                map.put("memberCode", ZTPERNR_MASTER_DATA_SBH.getString("PERNR"));

                map.put("memberName", ZTPERNR_MASTER_DATA_SBH.getString("ENAME"));

                map.put("memberSex", ZTPERNR_MASTER_DATA_SBH.getString("GESCH"));

                list.add(map);

            }

        }catch (Exception e){

            log.info("获取SAP人员信息出错:"+e.getMessage(),e);

            throw new CustomException(e.toString());

        }

        log.info("结果:"+JsonUtil.listToJSON(list));

        log.info("获取SAP人员信息结束》》》》》》》》》》》》》》》》》》》");

        return list;

    }

————————————————

版权声明:本文为CSDN博主「赚钱买奶茶」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/weixin_38441570/article/details/114700242


文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐