sap jco connector์์ ํต์ ์ java object relation mapping์ ํ๋ ๋ฐฉ๋ฒ
-
์์ค๋ https://github.com/hibersap/hibersap-sapjco3 ์์ ๋ค์ด๋ฐ์์ import๋ฅผ ํ๋ค.
-
์ด ์์ด๋์ด๋ spring์์ ์๋ resttemplate, asyncresttemplate์ ๋ฐฉ์์ ์ฐจ์ฉํ์ฌ SAP์ ํ ์ด๋ธ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ java object relation mapping์ ๊ตฌํํ ๊ฒ์ด๋ค.
-
์ด ๋ก์ง์ ๊ธฐ๋ณธ ์์ด๋์ด๋ง ๊ฐ๋จํ ๊ตฌํํ์๊ธฐ ๋๋ฌธ์, java generics์ super type token์ ๊ดํ ๋ถ๋ถ์ ์ฒ๋ฆฌํ์ง ์์๋ค. ๋ํ, sap์ structure๋ถ๋ถ๋ ์ ์๊ตฌํํ์ง ์์๋ค.
SAP์ sample code๋ ๊ตฌ๊ธ ๋ฑ์์ ๊ฒ์ํ์ฌ ๋ณด๋ฉด ์๋์ URL๋ฑ์ด ๋์จ๋ค.
- http://www.erpworkbench.com/java/jco/jco_callfunc.htm
- https://www.programcreek.com/java-api-examples/index.php?api=com.sap.conn.jco.JCoFunction
- https://blogs.sap.com/2017/08/25/sap-jco-server-example/
์์ ๋ก์ง์ ํต์ฌ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ ์์ค์ธ๋ฐ function์ Table์ ํ๋ผ๋ฏธํฐ ๋ณด๋ด๊ณ , ๋ฐ์์ iterate๋ฅผ ํ์ฌ ์ผ์ผํ ๋งคํ์ ํด์ฃผ๋ ๋ฐฉ์์ด๋ค.
JCoFunction function = destination.getRepository().getFunction("SAP_DATA");
JCoTable codes = function.getTableParameterList().getTable("ํ
์ด๋ธ๋ช
");
List<Map<String, Object>> outputs = new ArrayList<>();
for (int i = 0; i < codes.getNumRows(); i++) {
codes.setRow(i);
Map<String, Object> map = new HashMap<String, Object>();
map.put("์ปฌ๋ผ1", codes.getString("์ปฌ๋ผ1"));
map.put("์ปฌ๋ผ2", codes.getString("์ปฌ๋ผ2"));
map.put("์ปฌ๋ผ3", codes.getString("์ปฌ๋ผ3"));
//๋ฆฌ์คํธ์ ๋ด์์ ์ฌ์ฉ
outputs.add(map);
}
System.out.println(outputs);
๋ด๊ฐ ๊ตฌํํ ์์ด๋์ด๋ ์์๋ก์ง์ ๋ค์๊ณผ ๊ฐ์ ์ฌํํ ์ฝ๋๋ก ๋ฐ๊ฟ์์๊ฒํ๋๊ฒ์ด๋ค.
JCOInput input = JCOInput.of("SAP_DATA", "ํ
์ด๋ธ๋ช
");
List<HashMap> outputs = template.executeTable(input, HashMap.class);
System.out.println(outputs);
Map์ด ์๋ Object๋ mapping์ด ๊ฐ๋ฅํ๋ฐ, ๊ทธ ์ฐ๊ฒฐ๊ณ ๋ฆฌ๋ @JCOValue
์ด๋ค.
์์ ๋์ผํ ์์ค๋ฅผ Map์ด ์๋ Output Object๋ก ๊ตฌํํ๋ค๋ฉด ์๋์ ๊ฐ์ ์ฝ๋๊ฐ ๋ ๊ฒ์ด๋ค.
@Getter @Setter
class Output {
@JCOValue("์ปฌ๋ผ1")
private String type;
@JCOValue("์ปฌ๋ผ2")
private String year;
@JCOValue("์ปฌ๋ผ3")
private String name;
@JCOValue(value = "LOGTIME", dateFormat = "yyyy-mm-dd")
private String logTime;
}
JCOInput input = JCOInput.of("SAP_DATA", "ํ
์ด๋ธ๋ช
");
List<Output> outputs = template.executeTable(input, Output.class);
System.out.println(outputs);