如何使用RFC在JCO表中设置多个数据?

时间:2016-10-13 11:05:44

标签: java servlets sap jco

我想使用RFC到SAP服务器在我的JCO Table中添加多个数据。

以下是我的代码。

但问题只是最后一次将被设置为sap。

我缺少什么?

我正在使用一个功能与SAP同步数据。

JCO.Function function = null;
JCO.Repository mRepository;

public String updateCustomerToSAP(String bapi){

    String message = null;
    Connection conn = new Connection();
    JCO.client mConnection = conn.open();
    JCO.Table GETZPRTL_VISIT = null;
    mConnection.connect();

    try{
        function = this.createFunction(bapi);
        if(function == null){
            // Not fount
        }else{
            GETZPRTL_VISIT = function.getTableParameterList().getTable("CUSTOMER_VISIT");

            for(int i = 0 ; i < 10 ; i++){
                GETZPRTL_VISIT.appendRow();
                GETZPRTL_VISIT.setValue("0001 "+i,"ID");
                GETZPRTL_VISIT.setValue("john_ro "+i,"USER_NAME");
                GETZPRTL_VISIT.setValue("John "+i,"FIRST_NAME");
                GETZPRTL_VISIT.setValue("Martin "+i,"LAST_NAME");
                GETZPRTL_VISIT.setValue("john.martin@gmail.com "+i,"EMAIL");
            }

            // Above data is just for and example. I fetch those data from ArrayList and all data are diffrent.

            function.getImportParameterList().setValue("Data1","USER_ID");
            function.getImportParameterList().setValue("type goes here","TYPE");
            function.getImportParameterList().setValue("reason goes here","REASON");
            function.getImportParameterList().setValue("final status","STATUS");
            function.getImportParameterList().setValue("0001","NUMBER");

            mConnection.execute(function);
            message = (String) function.getExportParameterList().getValue("MESSAGE");

        }
    }catch(Exception e){

    }
    conn.disconnect();

    return message;
} 

public JCO.Function createFunction(String name) throws Exception{
    try{
        IFunctionTamplate ft = mRepository.getFunctionTamplate(name.toUpperCase());

        if(ft == null)
            return null;
        return ft.getFunction();

    }catch(Exception e){
        throw new Exception("Problem retriving JCO.Function object"+ e);
    }
}

此处 CUSTOMER_VISIT ,它位于我的RFC中。

结构示例

USER_ID
TYPE
REASON
STATUS
NUMBER
CUSTOMER_VISIT    <= This is Table inside function module.

CUSTOMER_VISIT 表格结构

ID
USER_NAME
FIRST_NAME
LAST_NAME
EMAIL

1 个答案:

答案 0 :(得分:0)

问题在于功能模块的ABAP代码吗?不熟悉ABAP的人很容易将“表格的标题行”与“表格本身”混淆......

是否可能只将标题行插入数据库?

如果激活JCo跟踪级别,您可以看到JCo向R / 3发送的数据。您还可以在ABAP端设置外部断点,然后单步执行功能模块以查看第一手资料,获取的数据。