我正在尝试使用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=" ";
答案 0 :(得分:2)
参数PASSWORD
的类型为BAPIPWD
,这是一个结构,而这个结构只包含一个名为BAPIPWD
的字段。因此,您需要像这样访问结构:
JCO.Structure sPassword = userChangeInput.getStructure("PASSWORD");
sPassword.setValue(newPassword, "BAPIPWD");
答案 1 :(得分:1)
尝试使用BAPIPWD或PASSWORD-BAPIPWD代替PASSWORD,以防万一,确保密码为全部大写