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



我使用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系统

获得要调用的功能模块的元信息。

如果这不起作用,您可以通过下面的列表步骤并发布响应

  1. 您使用的是哪个版本的JCO ?
  2. 是否有一个名为dev_jco_rfc.trc的文件
    1. 看看这个。它非常有用,可以告诉您凭据和/或连接参数是否错误
  3. 在SAP中永远不会触发RFC调用
    1. sap系统是否使用ACL限制RFC连接?然后让基础管理清除白名单
    2. 中的连接
    3. 您是否在SM59上定制了连接?
    4. 是您正在与您的程序使用的一个吗?
    5. 当Java程序正在运行时,您是否尝试过连接测试
    6. 交易SMGW告诉你什么?
  4. 调用在SAP中触发,您可以在此设置调试器
    1. 调试器对IT_LIST
    2. 的内容说了什么?
    3. 您使用的是哪种交易框架?
      1. 经典吗?
      2. OO吗?

相关内容

  • 没有找到相关文章

最新更新