0

我正在尝试使用 bapi 重置 SAP 的密码,但我收到错误,因为“密码不是字段输入的类型”。

我在下面发布我的代码。

getRandomString()是用户定义的函数。我从互联网上复制了这段代码,我对此一无所知。

String newPassword = getRandomString();

try{
      JCO.Function bapiUserChange = repository.getFunctionTemplate("BAPI_USER_CHANGE").getFunction();
      if(bapiUserChange != null){
           JCO.ParameterList userChangeInput = bapiUserChange.getImportParameterList();

           JCO.Structure sPassword = userChangeInput.getStructure("PASSWORD");

           //sPassword.setValue(newPassword, ????) //what do I assign it to?

           userChangeInput.setValue(userId, "USERNAME");
           userChangeInput.setValue(newPassword, "PASSWORD");  // this gives an error
           userChangeInput.setValue("X","PASSWORDX"); //I know "X" is true, this will give an error too I believe

           mConnection.execute(bapiUserChange);

           //send E-mail
           boolean emailSent = sendEmail(userId, newPassword, "XXX200");
           msgMgr.reportSuccess("Password Reset Done");     

           if(mConnection != null){
                mConnection.disconnect();
           }

      }
}catch(Exception e){
     msgMgr.reportException("Could not change password " + e.getMessage(),true);
}

String newPassword = getRandomString();在这里它给出了错误,因为getRandomString()是用户定义的函数,我不知道这一点。重置密码时是否有任何作用,或者我可以直接使用String newpassword=" ";

4

2 回答 2

2

该参数PASSWORD的类型为BAPIPWDwhich 是一个结构,而该结构又只包含一个名为 的字段BAPIPWD。因此,您需要大致像这样访问该结构:

JCO.Structure sPassword = userChangeInput.getStructure("PASSWORD");
sPassword.setValue(newPassword, "BAPIPWD");
于 2014-03-20T11:22:29.773 回答
1

尝试使用 BAPIPWD 或 PASSWORD-BAPIPWD 代替 PASSWORD,以防万一,确保密码全部大写

于 2014-03-20T10:57:04.407 回答