ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

104、BADI定义与实现

2026/8/27 17:04:03 拓冰建站 浏览量
104、BADI定义与实现 104、BADI定义与实现你写了个报表,跑得挺好。某天业务说,财务要加个校验,物料主数据保存前不能是删除标记。你改了代码,测试通过,上线。两周后,另一个工厂说,校验逻辑不对,我们允许某些特殊物料删除。你又改代码,加了工厂判断。再过一个月,一个新需求:质检部门想在保存时同步一个自定义表。你发现每个需求都要改原来那个FM,代码里全是IF,越来越乱,你甚至不敢动那段逻辑,怕影响别的流程。这时候你才想起来,SAP有增强,有BADI,你早该用它的。可BADI这个东西,网上资料要么老得掉渣,要么讲得云里雾里,你翻了一堆博客还是不知道怎么下手。今天我们从真实调试场景切入,把这个事彻底讲明白。先看一个现场。你给某个标准程序挂了一个BADI实现,运行的时候,断点打在你的实现方法里,但断点根本没停。你检查SE19里的绑定,没错。你检查过滤器,没问题。你重新激活,还是不行。你怀疑缓存,SE03刷新,没用。你开始怀疑人生,是不是BADI定义本身就有问题?这时候你把断点打在标准程序调用BADI的语句处,也就是CALL BADI那行,进去一看,居然没有走到你实现的方法。再往深里看,cl_badi_...内部有个badi_cache,里面维护的implementation列表里压根没有你的类。为什么?多半是BADI定义里,接口的FILTER类型填错了,或者你实现类里根本没勾上对应的过滤值。别急着敲代码,先搞清楚BADI到底是啥。BADI全称Business Add-In,是SAP提供的一种面向对象的增强机制。你可以把BADI想象成一个插座,SAP标准程序里预留了插座孔,