BAPI_INCOMINGINVOICE_CREATE1连续多张发票校验时,系统DUMP问题解决过程
问题描述:每次创建一张发票时,利用BAPI_INCOMINGINVOICE_CREATE1是可以的,一次创建多张发票时,第一张发票可以创建成功,创建第二张发票时系统直接DUMP。
系统错误关键描述:"UNCAUGHT_EXCEPTION" /BOBF/CX_FRW_FATAL
"/BOBF/CL_TRA_TRANSACTION_MGR==CP" bzw. /BOBF/CL_TRA_TRANSACTION_MGR==CM00K
"SET_APPLICATION_ERROR"
查了N多NOTES,没有相匹配的解决方案,没办法只能跟踪系统标准代码。跟踪系统代码涉及到的标准对象如下:
BAPI:BAPI_INCOMINGINVOICE_CREATE1,FM:MRM_INVOICE_POST,CLASS:/BOBF/CL_TRA_TRANSACTION_MGR,/BOBF/CL_TRA_TRANS_MGR_FACTORY
解决方法:创建发票的过程中类/BOBF/CL_TRA_TRANSACTION_MGR的属性mv_transaction_state会依次从0更新到6,具体0~6的意思可查看参考的数据元素。依次更新的过程
中的系统会依次调用Method:finalize,check_before_save,adjust_numbers,do_save等等来出来数据。0~6的次序不可颠倒,也就是说类的方法调用次序不能颠倒,否则系统就会DUMP。
第一次创建时,系统会初始化类,mv_transaction_state的值默认为‘0’,第二次调用时,系统不会再次初始化类,属性mv_transaction_state的值是‘6’,这时系统就会DUMP。
为了每次调用使类的方法依次执行,不得不对系统做了隐式增强(被逼的,想不到其他好的办法了)。增强的位置如图:
注意:对BOBF相关的类做增强时,要十分的小心!!!一定要加限制条件,否则对系统的影响特别大。