BAPI_PERSDATA_CHANGE使用SAP JCo 3更新用户数据

问题描述 投票:0回答:2

我正在使用以下代码段。目标是使用BAPI_PERSDATA_CHANGE bapi更新用户姓氏firstname和co。但不知怎的,它不起作用,我尝试了很多可能性,但它没有用。与BAPI_PERSDATA_CHANGE相关的函数的消息是:

No data stored for 0002 in the selected period

我正在使用以下代码

public boolean writeData(long id, HashMap<String, String>  userData) throws Exception{
    String DST1 = "ABAP_AS";
    JCoDestination dest = JCoDestinationManager.getDestination(DST1);
    JCoFunctionTemplate template = dest.getRepository().getFunctionTemplate("BAPI_PERSDATA_CHANGE");
    JCoFunction jcoFunction = template.getFunction();
    jcoFunction.getImportParameterList().setValue("EMPLOYEENUMBER", id);
    //jcoFunction.getImportParameterList().setValue("SUBTYPE", "002");
    //jcoFunction.getImportParameterList().setValue("OBJECTID", "");
    //jcoFunction.getImportParameterList().setValue("LOCKINDICATOR", "");
    jcoFunction.getImportParameterList().setValue("VALIDITYBEGIN", "19570101"); //"1994-04-24");
    jcoFunction.getImportParameterList().setValue("VALIDITYEND", "99991231");
    jcoFunction.getImportParameterList().setValue("RECORDNUMBER", "000");
    jcoFunction.getImportParameterList().setValue("FIRSTNAME", "FOfie modifier");
    JCoFunction jCoFunction1 = dest.getRepository().getFunctionTemplate("BAPI_TRANSACTION_COMMIT").getFunction();
    JCoFunction BAPI_EMPLOYEE_DEQUEUE = dest.getRepository().getFunction("BAPI_EMPLOYEE_DEQUEUE");
    BAPI_EMPLOYEE_DEQUEUE.getImportParameterList().setValue("NUMBER", id);
    jcoFunction.execute(dest);
    jCoFunction1.execute(dest);
    BAPI_EMPLOYEE_DEQUEUE.execute(dest);
    JCoContext.end(dest);
    return false;
}

我错过了什么吗?或做错了什么?

java sap abap jco bapi
2个回答
1
投票

问题在错误消息中准确描述。

No data stored for 0002 in the selected period

意味着在参数0002VALIDITYBEGIN中给出的时间段内没有信息类型VALIDITYEND的数据,因此没有任何内容需要更新。

确保在要求的时间段内为EMPLOYEENUMBER提供上述信息类型的数据。


0
投票

这条线

JCoContext.begin(dest);

不见了。因此,BAPI_PERSDATA_CHANGE和BAPI_TRANSACTION_COMMIT的执行将在两个不同的ABAP会话中发生......

© www.soinside.com 2019 - 2024. All rights reserved.