【问题标题】:how to receive table data from abap that sending from java using RFC如何从abap接收使用RFC从java发送的表数据
【发布时间】:2016-09-17 08:46:24
【问题描述】:

我正在使用 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 表。

【问题讨论】:

  • 您何时发出 COMMIT 语句?为什么不在 INSERT 语句后检查 SY-SUBRC?如果你这样做,你会得到什么价值?
  • 我什么时候应该使用提交语句?这个 sap rfc 对我来说是新的
  • 如果您不知道如何回答这个问题(无论是自己回答还是阅读文档),我强烈建议您在危及(通常是关键任务)ERP 之前接受适当的培训系统。

标签: java abap saprfc jco


【解决方案1】:

好吧,我认为您必须提供更多信息才能回答这个问题,但无论如何我都会尝试。

您正在使用方法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. 您是否在 SM59 自定义了连接。
    3. 是您在程序中使用的那个吗?
    4. 您是否在 Java 程序运行时尝试过连接测试
    5. 事务 SMGW 告诉您什么?
  4. 调用在 SAP 中触发,您可以在此设置调试器
    1. 调试器对 IT_LIST 的内容有何看法
    2. 您使用什么样的事务框架?
      1. 古典?
      2. OO?

希望对你有帮助。

【讨论】:

  • 很高兴能帮到你。
猜你喜欢
  • 2021-10-10
  • 1970-01-01
  • 1970-01-01
  • 2014-03-20
  • 2014-11-02
  • 2021-12-07
  • 1970-01-01
  • 2011-06-09
  • 2019-07-29
相关资源
最近更新 更多