Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么SAP JCo会提出错误;领域不是……的成员。”;即使这个领域存在?_Java_Sap - Fatal编程技术网

Java 为什么SAP JCo会提出错误;领域不是……的成员。”;即使这个领域存在?

Java 为什么SAP JCo会提出错误;领域不是……的成员。”;即使这个领域存在?,java,sap,Java,Sap,我想从Servlet应用程序将数据发送到SAP RFC表 我试着用下面的方法来做这件事 JCO.Function function = null; Connection conn = new Connection(); JCO.Client mConnection = conn.open(); JCO.Repository mRepository; mConnection.connect(); mRepository = new JCO.Repository("KEYWORD",mConnec

我想从Servlet应用程序将数据发送到SAP RFC表

我试着用下面的方法来做这件事

JCO.Function function = null;
Connection conn = new Connection();
JCO.Client mConnection = conn.open();
JCO.Repository mRepository;
mConnection.connect();

mRepository = new JCO.Repository("KEYWORD",mConnection);

try{
    function = this.createFunction("MY RFC NAME");
    if(function != null){
         function.getImportParameterList.setValue("ID1","USERID");
         function.getImportParameterList.setValue("Test Name","UNAME");
         function.getImportParameterList.setValue("CLASSA","UCLASS");

         mConnection.execute(function);
    }
}catch(Exception ex){
    // Exception handling goes here.
}
conn.disconnected();
但我有以下错误

com.sap.mw.jco.jco$Exception:jco\u ERROR\u FIELD\u NOT\u FOUND:FIELD USERID不是输入的成员

但我检查了一下,SAP中有exist列

这里少了什么?
我应该也传递RFC表名吗?那么如何解决呢?

我通过下面的代码来解决这个问题

JCO.Function function = null;
Connection conn = new Connection();
JCO.Client mConnection = conn.open();
JCO.Table GET_DATA = null;
JCO.Repository mRepository;
mConnection.connect();

mRepository = new JCO.Repository("KEYWORD",mConnection);

try{
    function = this.createFunction("MY RFC NAME");
    if(function != null){

         GET_DATA = function.getTableParameterList.getTable(TABLE_NAME);
         GET_DATA.appendRow();

         function.getImportParameterList.setValue("ID1","USERID");
         function.getImportParameterList.setValue("Test Name","UNAME");
         function.getImportParameterList.setValue("CLASSA","UCLASS");

         GET_DATA.nextRow();
         mConnection.execute(function);
    }
}catch(Exception ex){
    // Exception handling goes here.
}
conn.disconnected();

连接的sap系统上是否存在此功能? 如果是这样,我建议使用
function=conn.getRepository.getFunction('MY\u RFC\u NAME')
。通过该方法,您可以获得连接的SAP系统上存在的功能模块的元数据和签名。这允许您检查函数是否存在
if(function==null)抛出新异常(“连接的SAP系统上不存在函数模块MY_RFC_NAME”)
并检查每个参数是否存在,是否具有您期望的名称和类型


在大多数情况下,发生这种错误是因为参数的名称略有不同。例如,
USERID
而不是
USERID

function.getImportParameterList.setValue
是一个强有力的指示器,表明您发布的不是实际代码,因为
MY TABLE字段
没有出现在代码中的任何地方。如果你漏掉了重要的部分,你不可能得到一个有用的答案。请参阅更新的答案。将
My TABLE FIELD
替换为
USERID
。再次-我怀疑这是实际代码,它应该是
getImportParameterList()。setValue
。我的RFC名称是什么,它的签名是什么?我的RFC名称是
功能模块的名称
。是的。功能模块的实际名称是什么?它的签名是什么?如果你想要一个真实的答案,请发布更多的信息。请看下面我的答案。我已经用下面的代码解决了我的问题。请检查一下。