RFC 함수를 사용하여 SAP에서 보낸 데이터를 SAP로부터 받는다. 자바 쪽에서 오류가 없습니다. 문제는 내가 수액 측면에서 데이터를 캡처 할 수 없습니다. 그 데이터를 수액 테이블에 저장해야합니다.abap에서 테이블 데이터를 수신하는 방법 rfc를 사용하여 java에서 보내는 것
이것은 내 자바 코드입니다.
public class CreateAttendence extends TimerTask {
RFCHandler handler;
DBPool_SF pooler;
DataSource dataSource;
DataSource dataSource1;
int rcount = 0;
private Object[][] itemData;
public CreateAttendence() {
handler = new RFCHandler();
}
@Override
public void run() {
try {
getItem();
sendValuesToSap();
} catch (Exception e) {
e.printStackTrace();
}
}
private void getItem() {
// TODO Auto-generated method stub
Connection con3 = null;
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Date date = new Date();
System.out.println(dateFormat.format(date));
String sbQuery3 = "SELECT * FROM attendance_log ";
try {
pooler = DBPool_SF.getInstance();
dataSource1 = pooler.getDataSource();
} catch (Exception e1) {
e1.printStackTrace();
}
try {
con3 = dataSource1.getConnection();
con3.setAutoCommit(false);
Statement st = con3.createStatement();
ResultSet rs = st.executeQuery(sbQuery3);
int lineitem = 0;
try {
rs.last();
rcount = rs.getRow();
rs.beforeFirst();
} catch (Exception ex) {
ex.printStackTrace();
}
itemData = new Object[6][rcount];
while (rs.next()) {
itemData[0][lineitem] = rs.getString("device_id");
itemData[1][lineitem] = rs.getString("user_id");
itemData[2][lineitem] = rs.getDate("check_in"); // in date
itemData[3][lineitem] = rs.getDate("check_out"); // out date
itemData[4][lineitem] = rs.getTime("check_in"); // in time
itemData[5][lineitem] = rs.getTime("check_out"); // out time
lineitem = lineitem + 1;
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
con3.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private void sendValuesToSap() {
JCO.Table IT_LIST = null;
try {
if (rcount > 0) {
handler.createRFCFunction("ZZSL_ATEND_CRT_LOG_TBL");
IT_LIST = handler.getTablePara("IT_LIST");
for (int x = 0; x < rcount; x++) {
IT_LIST.appendRow();
System.out.print(itemData[1][x] + " ");
System.out.print(itemData[2][x] + " ");
System.out.print(itemData[3][x] + " ");
System.out.print(itemData[4][x] + " ");
System.out.print(itemData[5][x] + " ");
System.out.println();
IT_LIST.setValue("110", "MANDT");
IT_LIST.setValue(itemData[1][x], "PERNR");
IT_LIST.setValue(itemData[2][x], "DATE1");
IT_LIST.setValue(itemData[3][x], "DATE2");
IT_LIST.setValue(itemData[4][x], "TIN1");
IT_LIST.setValue(itemData[5][x], "TOUT1");
}
System.out.println(IT_LIST);
handler.excFunction();
handler.releaseClient();
}
} catch (Exception e) {
// TODO: handle exception
handler.releaseClient();
e.printStackTrace();
}
finally {
rcount = 0;
}
}
}
이것은 내 ABAP 코드입니다.
FUNCTION ZZSL_ATEND_CRT_LOG_TBL.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" TABLES
*" IT_LIST STRUCTURE ZSLATENLOG
*" IT_LIST_T STRUCTURE ZSLATENLOG
*"----------------------------------------------------------------------
DATA : wa_list LIKE LINE OF IT_LIST,
wa_list_t LIKE LINE OF IT_LIST.
INSERT ZSLATENLOG FROM IT_LIST.
ENDFUNCTION.
ZSLATENLOG는 내 z 테이블입니다.
언제 COMMIT 문을 발행합니까? INSERT 문 다음에 SY-SUBRC를 검사하지 않는 이유는 무엇입니까? 그렇다면 어떤 가치가 있습니까? – vwegert
sholud 내가 commit 문을 사용할 때? 이 수액의 rfc가 내게 새것임 –
당신이 그 질문에 답하는 법을 모른다면 (혼자서 또는 문서를 읽음으로써) 나는 위험한 상황 (보통 미션 크리티컬 한 ERP)에 앞서 적절한 훈련을받을 것을 강력히 권한다. 체계. – vwegert