BTE增强的概念:
有点类似财务的替代增强
SAP有很多这种增强方式,就是相当于复制一个原有FM,替换FM里面的逻辑
事务码:FIBF--维护事务BTE
一、操作步骤:FIBF->环境->信息系统,查找事件号及需要替换的函数
双击或者点击样本函数模块可以查看具体的FM
二、复制一个函数,更名(一般是在前面加一个Z*原函数名,也可以随意)
三、FIBF->设置->产品->一个客户(这里为创建是否激活)
四、FIBF->设置->处理函数模块->一个客户的
备注:此需求一般为配置请求,所以TR产生的请求为定制请求TR,而非工作台TR,这个需要注意一下
(很多时候,SAP给了这种可以配置的TR,一般建议在100环境执行,当然在200开发环境执行也没啥问题,反正对应的800都一样,看个人和整体规划,我一般都是建议,类似于配置的TR在100执行,开发的TR在200执行,先配置再开发的,也区分开)
以下为操作具体案例:也可以不看
需求:在函数BAPI_ACC_DOCUMENT_POST生成凭证时,增强一下,使得某个字段能够增强进入表BKPF-XREF1_HD这个字段中
找到对应的需要替换的函数:/SAPPCE/DPC_PROCESS_EXTENSION (不要问我是怎么找到这个函数的,大佬直接告诉我的,这个我没有找到,我是渣渣😭)
一、拷贝函数/SAPPCE/DPC_PROCESS_EXTENSION,函数命名自定义为ZSAMPLE_PROCESS_RWBAPI01
二、修改函数ZSAMPLE_PROCESS_RWBAPI01的代码,不要修改出入参(防止出问题)
代码如下:
DATA gs_extension TYPE bapiacextc.
IF NOT extension[] IS INITIAL.
LOOP AT extension INTO gs_extension.
IF gs_extension-field1 EQ 'XREF1_HD' AND gs_extension-field2 IS NOT INITIAL.
it_accit-xref1_hd = gs_extension-field2 .
ENDIF.
IF gs_extension-field1 EQ 'XREF2_HD' AND gs_extension-field2 IS NOT INITIAL.
it_accit-xref2_hd = gs_extension-field2 .
ENDIF.
CLEAR gs_extension.
ENDLOOP.
MODIFY it_accit INDEX 1 TRANSPORTING xref1_hd xref2_hd.
ENDIF.
三、FIBF->设置->产品->一个客户(这里为创建是否激活)
四、FIBF->设置->处理函数模块->一个客户的
五、保存生成TR
六、运用到实际代码中
DATA:lt_extension1 LIKE TABLE OF bapiacextc, "增强结构
ls_extension1 LIKE bapiacextc.
ls_extension1-field1 = 'XREF1_HD'.
ls_extension1-field2 = gs_receipt-notecode+0(17).
APPEND ls_extension1 TO lt_extension1.
CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
EXPORTING
documentheader = gs_documentheader
* CUSTOMERCPD =
* CONTRACTHEADER =
* IMPORTING
* OBJ_TYPE =
* OBJ_KEY =
* OBJ_SYS =
TABLES
accountgl = gt_accountgl
accountreceivable = gt_accountreceivable
accountpayable = gt_accountpayable
* ACCOUNTTAX =
currencyamount = gt_currencyamount
* CRITERIA =
* VALUEFIELD =
extension1 = lt_extension1 (在这里)
return = gt_return
* PAYMENTCARD =
* CONTRACTITEM =
extension2 = gt_extension2
* REALESTATE =
* ACCOUNTWT =