Java Down SAP数据的整合

Java Down SAP数据的整合

SAP是一个面向数据库的一个接口协议,将所需要的数据类型暴露出来供开发者进行调用的一种协议。

Maven下引入Jar包

 <dependency>
		    <groupId>org.hibersap</groupId>
		    <artifactId>sapjco3</artifactId>
		    <version>3.0</version>
		    <scope>system</scope>     
		    <systemPath>${project.basedir}/lib/sapjco3.jar</systemPath>
		</dependency>

SAP连接的实现类

public class DownSapUtils {

    private static final String ABAP_AS_POOLED = "ABAP_AS_WITH_POOL";

    static{
        Properties connectProperties = new Properties();

        connectProperties.setProperty(DestinationDataProvider.JCO_ASHOST, "10.173.173.47");//服务器 10.173.173.55为正式sap服务器       10.173.173.47为测试sap服务器
        connectProperties.setProperty(DestinationDataProvider.JCO_SYSNR,  "00");        //系统编号
        connectProperties.setProperty(DestinationDataProvider.JCO_CLIENT, "870");       //SAP集团
        connectProperties.setProperty(DestinationDataProvider.JCO_USER,   "SAPRFCQA");  //SAP用户名saprfc为正式服务器用户名  saprfcqa为测试服务器用户名
        connectProperties.setProperty(DestinationDataProvider.JCO_PASSWD, "foxconn8");     //密码
        connectProperties.setProperty(DestinationDataProvider.JCO_LANG,   "ZF");        //登录语言
        //connectProperties.setProperty(DestinationDataProvider.JCO_POOL_CAPACITY, "3");  //最大连接数
        //connectProperties.setProperty(DestinationDataProvider.JCO_PEAK_LIMIT, "10");     //最大连接线程

        createDataFile(ABAP_AS_POOLED, "jcoDestination", connectProperties);
    }

    /**
     * 创建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){
            XxlJobLogger.log("Create Data file fault, error msg:{} ", e.toString());
            throw new RuntimeException("Unable to create the destination file " + cfg.getName(), e);
        }
    }

    /**
     * 获取SAP连接
     * @return	SAP连接对象
     */
    public static JCoDestination connect(){
        JCoDestination destination =null;
        try {
            destination = JCoDestinationManager.getDestination(ABAP_AS_POOLED);
        } catch (JCoException e) {
            XxlJobLogger.log("Connect SAP fault, error msg:{} ", e.toString());
        }
        return destination;
    }
}

连接SAP操作以及对输出的数据进行处理

 // 調用Sap接口
        JCoFunction jcoFunction = null;
        JCoDestination destination = null;

        try {
            destination = DownSapUtils.connect();
            //SAP连接名
            jcoFunction = destination.getRepository().getFunction("ZRFC_MM_IDP_0253");
            //传入参数
            JCoParameterList inputParm = jcoFunction.getImportParameterList();
            inputParm.setValue("P_TYPE", "0");
            // 获取传入表结构参数,一般来讲这个参数是表名
            JCoTable sapTable = jcoFunction.getTableParameterList().getTable("INPUT");
            sapTable.appendRow();
            //查询表填入的参数
            sapTable.setValue("FIRSTEDITDT", "20210201");
            sapTable.setValue("LASTEDITDT", "20210225");
            sapTable.setValue("WERKS", "AEG1");
            //对传入的表以及参数进行执行
            jcoFunction.execute(destination);
            // 调用接口返回状态表数据信息,这个参数是变化的,是SAP开发者进行命名的
            JCoTable output = jcoFunction.getTableParameterList().getTable("ORDHEAD");
            //对获取的数据进行处理
            List<TestVo> testVos = new ArrayList<>();
            if (output.getNumRows() > 0) {
                for (int i = 0; i < output.getNumRows(); i++) {
                    output.setRow(i); //获取相应的行数
                    TestVo testVo = new TestVo();
                    String GINNO = output.getString("GINNO"); //申报单据
                    testVo.setGINNO(GINNO);
                    Integer GINIT = output.getInt("GINIT"); //申报单据项次
                    testVo.setGINIT(GINIT);
                    String GINTY = output.getString("GINTY"); //类型
                    testVo.setGINTY(GINTY);
                    Date GINDA = output.getDate("GINDA");
                    testVo.setGINDA(GINDA);
                    String GINDE = output.getString("GINDE");
                    testVo.setGINDE(GINDE);
                    String COMCO = output.getString("COMCO");
                    testVo.setCOMCO(COMCO);
                    String LIFNR = output.getString("LIFNR");
                    testVo.setLIFNR(LIFNR);
                    String PARTN = output.getString("PARTN");
                    testVo.setPARTN(PARTN);
                    String MBLNR = output.getString("MBLNR");
                    testVo.setMBLNR(MBLNR);
                    String IOTYPE = output.getString("IOTYPE");
                    testVo.setIOTYPE(IOTYPE);
                    String CUSTY = output.getString("CUSTY");
                    testVo.setCUSTY(CUSTY);
                    Date IODATE = output.getDate("IODATE");
                    testVo.setIODATE(IODATE);
                    String WERKS = output.getString("WERKS");
                    testVo.setWERKS(WERKS);
                    String EBELN = output.getString("EBELN");
                    testVo.setEBELN(EBELN);

                    Integer EBELP = output.getInt("EBELP");
                    testVo.setEBELP(EBELP);
                    String GRNNO = output.getString("GRNNO");
                    testVo.setGRNNO(GRNNO);
                    Integer GRNIT = output.getInt("GRNIT");
                    testVo.setGRNIT(GRNIT);
                    String GRFLAG = output.getString("GRFLAG");
                    testVo.setGRFLAG(GRFLAG);
                    Date GRNDAT = output.getDate("GRNDAT");
                    testVo.setGRNDAT(GRNDAT);
                    String MATNR = output.getString("MATNR");
                    testVo.setMATNR(MATNR);
                    String MENGE = output.getString("MENGE");
                    testVo.setMENGE(MENGE);
                    //------------红色部分
                    Integer MEINS = output.getInt("MEINS");
                    testVo.setMEINS(MEINS);
                    String EDOCN = output.getString("EDOCN");
                    testVo.setEDOCN(EDOCN);
                    Integer EDOCIT = output.getInt("EDOCIT");
                    testVo.setEDOCIT(EDOCIT);
                    String ENUMBER = output.getString("ENUMBER");
                    testVo.setENUMBER(ENUMBER);
                    String ESTAS = output.getString("ESTAS");
                    testVo.setESTAS(ESTAS);
                    String EDISNO = output.getString("EDISNO");
                    testVo.setEDISNO(EDISNO);
                    Integer EDISNOIT = output.getInt("EDISNOIT");
                    testVo.setEDISNOIT(EDISNOIT);
                    String PLANU = output.getString("PLANU");
                    testVo.setPLANU(PLANU);
                    Integer PKGS = output.getInt("PKGS");
                    testVo.setPKGS(PKGS);
                    String CONT2 = output.getString("CONT2");
                    testVo.setCONT2(CONT2);
                    String BRAND = output.getString("BRAND");
                    testVo.setBRAND(BRAND);
                    String YL1 = output.getString("YL1");
                    testVo.setYL1(YL1);
                    String YL2 = output.getString("YL2");
                    testVo.setYL2(YL2);
                    String YL3 = output.getString("YL3");
                    testVo.setYL3(YL3);
                    String YL4 = output.getString("YL4");
                    testVo.setYL4(YL4);
                    String YL5 = output.getString("YL5");
                    testVo.setYL5(YL5);
                    testVos.add(testVo);
                }
            }
            System.out.println(testVos);
            sapTable.clear();
        } catch (Exception e) {
            System.out.println(e);
        }
    }

连接SAP接口都是套路化的,先进行连接再对其进行数据的处理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个在努力为老板实现梦想的搬砖工

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值