我使用RFC函数从sap abap端接收从java发送的数据。java端没有错误。问题是我无法从sap端捕获数据。我需要将这些数据保存在sap ztable中。
这是我的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表
我认为你必须提供更多的信息来回答这个问题,但我还是要试一试。
您正在使用方法createRFCFunction
。为什么?我建议使用这种方式来获得ABAP功能模块的完整签名:JCoFunction function = destination.getRepository().getFunction("ZZSL_ATEND_CRT_LOG_TBL");
和最终function.execute(destination);
。通过这种方式,您可以从连接的SAP系统
如果这不起作用,您可以通过下面的列表步骤并发布响应
- 您使用的是哪个版本的JCO ?
- 是否有一个名为dev_jco_rfc.trc的文件
- 看看这个。它非常有用,可以告诉您凭据和/或连接参数是否错误
- 在SAP中永远不会触发RFC调用
- sap系统是否使用ACL限制RFC连接?然后让基础管理清除白名单 中的连接
- 您是否在SM59上定制了连接?
- 是您正在与您的程序使用的一个吗?
- 当Java程序正在运行时,您是否尝试过连接测试
- 交易SMGW告诉你什么?
- 调用在SAP中触发,您可以在此设置调试器
- 调试器对IT_LIST 的内容说了什么?
- 您使用的是哪种交易框架?
- 经典吗?
- OO吗?