最近做的一个需求是将ML81N采购服务订单确认产生的会计凭证抬头文本替换为特定格式,试了几种方案,都不成功。原先不成功的方案有:
方案一:
ML81N写个四代增强,实现的是物料凭证抬头文本替换为特定格式,产生的会计凭证抬头文本将自动与物料凭证抬头文本一致。
此方案对ML81N前台操作可行,对于BAPI:BAPI_ENTRYSHEET_CREATE 却不成功。
方案二:
在OBBH/GGB1中写替代。此方法也未成功。
最后采用大名鼎鼎的BTE 1120增强实现了。
现将小编对BTE增强的浅显理解做以下梳理,说的不对和考虑不全的地方,欢迎在下方一起讨论。
BTEs(Business Transaction Events),是SAP的一种增强方式,它主要有两种类型的接口:Publish and Subscribe Interface(P/S接口、消息)、Process Interface(处理接口)。
这两种类型的接口区别小编理解不深,在网上查相关资料,如下
Publish and Subscribe Interface(P/S接口)
用于告诉外部软件在SAP标准应用中触发了某些事件,并且把产生的数据提供给它们。外部软件不能给SAP系统返回任何数据。例如可以用在以下地方:
主数据被创建、修改或锁定
凭证被输入、预制、修改或冲销
项目被清除或重置
也可以在附加的开发中基于此事件和数据产生附加的处理:
启动工作流
产生或修改附加数据
请求通信
Process Interface(处理接口)
用于控制与标准系统处理方法不同的业务流程,也就是用process interface替换标准处理。它们干预标准流程,并返回数据给SAP应用。
(参考资料来源:https://blog.csdn.net/wbin9752/article/details/7954663?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~all~first_rank_v2~rank_v25-1-7954663.nonecase&utm_term=abap%20%E5%9B%9B%E4%BB%A3%E5%A2%9E%E5%BC%BA)
如果不知道ML81N中会用到哪些BTE,可在函数:BF_FUNCTIONS_FIND 和PC_FUNCTION_FIND 中打断点或者在程序中搜索字符串“OPEN_FI_PERFORM_” (函数前缀)。分别查看I_EVENT 、I_PROCS这两个变量的值,分别对应Publish and Subscribe Interface(P/S接口)、和Process Interface(处理接口)。可以找到此程序中的所有用到的BTE。如果同时有多个断点进入,可根据具体的需求和 bte函数的参数确定使用哪个。
1. 运行事务码:FIBF。因为此需求要干预标准流程,因此要查找的是“信息系统(处理)(N)”。选择菜单“环境->信息系统(处理)(N)->F8运行程序”,根据事件描述和事件文档对事件的详细描述逐个筛查,找出最符合要求的1120事件(与会计凭证相关的需求首先考虑1120事件)。
2. 在函数:PC_FUNCTION_FIND 中打断点,查看I_PROCS是否有1120。发现调用此事件。说明1120可用。
3.将样本函数复制并创建到自定义函数组和函数中。
4. 创建产品
5. 配置事件、产品和函数的对应关系
此处要注意!!!如果是“信息系统(处理)(N)”的事件要配置在“处理模块(R)”->“一个客户的”中,如果是“信息系统(P/S)(I)”的事件要配置在“发布/订阅模块” ->“一个客户的”中,配置错误将不进入增强点,增强失败。
有时在BTE中打断点,却没进断点。原因是事件在更新函数中被调用。
这时需在debug界面打开“系统调试”和“更新调试”,同时要确保界面充足,不超过6个,否则无界面展示无法进入断点。
END
往期推荐
关注公众号,加入SAP顾问讨论群!
扫描二维码
获取更多精彩
菜鸟家园
点点在看行不行