gpt4 book ai didi

java - 如何从abap接收使用RFC从java发送的表数据

转载 作者:行者123 更新时间:2023-12-01 09:29:43 26 4
gpt4 key购买 nike

我正在使用 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(目的地);这样您就可以从连接的SAP系统中获取要调用的功能模块的元信息

如果这不起作用,请您逐步浏览下面的列表并发布回复

  1. 您使用的是哪个版本的 JCO?
  2. 是否有名为 dev_jco_rfc.trc 的文件
    1. 看看这个。它的信息非常丰富,可以告诉您凭据和/或连接参数是否错误
  3. SAP 中永远不会触发 RFC 调用
    1. SAP 系统是否使用 ACL 来限制 RFC 连接?然后请基础管理人员清除白名单中的连接
    2. 您是否在 SM59 上自定义了连接。
    3. 这是您在程序中使用的吗?
    4. 您是否尝试过在 Java 程序运行时进行连接测试
    5. 事务 SMGW 告诉您什么?
  4. 该调用在 SAP 中触发,您可以对此设置调试器
    1. 调试器对 IT_LIST 的内容有何评价
    2. 您使用哪种交易框架?
      1. 古典?
      2. 哦?

希望这对您有帮助。

关于java - 如何从abap接收使用RFC从java发送的表数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39544776/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com