问题:执行HR_INFOTYPE_OPERATION报DUMP,信息如下
查了资料:参考note 493984,HR模块早期缓存设计的问题。无法通过打note的方式解决。官方建议在应用程序开始前使用PERFORM do_nothing(sapfp50p) ;
其实问题就是在同一个程序中已经有其他FM或report调用了DELAYED_CONSTRUCTOR已经给A_IS_INITIALIZED赋值为X了,这时后面如果再有程序调就会出现DUMP,截图如下
第一张图可以看到FM:HR_ECM_GET_DATETYP_FROM_IT0041已经调用了方法DELAYED_CONSTRUCTOR ,导致后面HR_INFOTYPE_OPERATION再调用SET_FRAMEWORK时A_IS_INITIALIZED为X所以直接抛异常了。
查找问题:可以类CL_HRPA_MASTERDATA_FACTORY的方法DELAYED_CONSTRUCTOR打个断点,看在调用人事事件操作前是什么接口或程序调用了DELAYED_CONSTRUCTOR,找到了问题基本找到了
解决方案:1.替换调在HR_INFOTYPE_OPERATION前调用了DELAYED_CONSTRUCTOR的接口或程序,比如截图中的HR_ECM_GET_DATETYP_FROM_IT0041改用直接查询0041。2.在整个程序最开始就调用下PERFORM do_nothing(sapfp50p).如图在处理事件前调用PERFORM do_nothing(sapfp50p).