前言:
在SAP编写程序批量维护BOM时,可能会用到函数CSAP_MAT_BOM_MAINTAIN等。
而测试程序会发现一些“诡异情况”--函数调用成功,sy-subrc = 0,而数据却未更新。
该如何处理?
调试:
调试发现,函数CSAP_MAT_BOM_MAINTAIN,会进一步调用函数CS_DI_HEADER_OBJECT_CHECK/CS_DI_HEADER_CHECK/,而这些函数的调用发现的错误消息并没有直接返回到函数CSAP_MAT_BOM_MAINTAIN当中,FL_WARNING被置'X'。
方案:
原因是找到了,但是如何处理呢?
如何准确的判断上游函数执行的消息,并作为友好的消息返回给用户?
医界有句老话,毒物附近必有解药。
根据以往经验,就优先查找函数CSAP_MAT_BOM_MAINTAIN的函数组CSAP的其他函数,拎出了列表,初步一看表述,有点失望。
想着:被蛇咬不可能旁边就是解药,于是扩大范围:
表 TADIR
包 DEVCLASS LIKE 'CS*'
对象类型 OBJECT = 'FUGR'
再根据此函数组清单,找表 TFDIR的相关函数。
这个过程可简化为以下使用事务DB02,执行SQL:
SELECT TFDIR.*,ENLFDIR.AREA,TADIR.DEVCLASS,TADIR.AUTHOR FROM TFDIR
INNER JOIN ENLFDIR ON ENLFDIR.FUNCNAME = TFDIR.FUNCNAME
INNER JOIN TADIR ON ENLFDIR.AREA = TADIR.OBJ_NAME AND TADIR.PGMID = 'R3TR' AND TADIR.OBJECT = 'FUGR'