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接口都是套路化的,先进行连接再对其进行数据的处理。