好久没来写东西了,原因无非是最近比较忙。
今天第一次处理增强,心里小激动。所以特此把过程记录了一下。
事情的起因是我想在调用BAPI_GOODSMVT_CREATE生成物料凭证的时候,为凭证行去写一个备注。
第一步我去看了表参数里的GOODSMVT_SERIALNUMBER,它对应的数据类型里有列叫ITEM_TEXT,字符型,长度50,短描述叫项目文本,就想拿它试一下。
在我写的Function里,把对应的字段给赋了个值,测试了一下,然而没有达到预期的效果。
那就去MIGO里做个凭证,给行项目写一下文本,测试看它写到MSEG里是哪个字段,从而分析看是不是我把列给搞错了。
结果出乎意料,明明我在MIGO里给行项目写了文本,但保存之后,行项目的文本就丢了。
这可咋整,百度、QQ群、微信群呗。
一顿操作之后得到的结果是要处理一个增强,MBCF0002。
然后去问度娘,啥是增强。最终决定参考这位老哥的文章。
ABAP增强总结_ABAP开发笔记-CSDN博客_abap 增强
理论略过了, 拣有用的看,看老哥都提到了哪些事务代码。
老哥说了“第二代增强(基于函数模块的增强)用事务SAP增强管理(事务代码:SMOD)和增强编译器(事务代码:CMOD)维护。”,那就先进SMOD里看看。
这好像叫瞎猫碰上死耗子。看到的第一个事务代码我就能用得上。也就是说,MBCF0002是一个二代增强。
这里主要看组件。
EXIT_SAPMM07M_001,函数?设置物料单据项中的段文字?瞅着像那么点儿意思,看能不能双击进去瞅瞅。
代码就这么简单。看样就是处理ZXMBCU02了。
选上的这一句是网友们说的修改方法,亲测可用。e_sgtxt = i_mseg-sgtxt.
就是这个“亲测”的过程有点儿曲折。我是这么干的。
在修改代码之前,在ZXMBCU02里打了个断点。去SE37里测试我写的Function,发现在调用方法BAPI_GOODSMVT_CREATE时,也会走这个增强,说明这个增强即会影响事务MIGO,也会影响方法BAPI_GOODSMVT_CREATE,那就按网友说的方法去修改它呗。
修改、激活之后,切换到函数测试的窗口。从“测试功能模块:结果屏幕”,回退到“测试功能模块:初始屏幕”,重新测试。发现并没有得到我想要的结果。好吧,再回到ZXMBCU02里,打断点跟踪程序,甚至调整语句顺序,做了好多种尝试。e_sgtxt仍然是空。最终尝试到重新进行测试,才解决这个问题。也不知道SAP关于这块儿是个什么样的逻辑。不管它了,总之我的问题是解决了。
以上呢。就是我第一次处理增强的过程。总结一下就是SAP里,物料凭证的行文本可以输入,但保存不了。这是SAP的一个先天的毛病。SAP自己也知道有这毛病,出了个解决办法,设置了一个叫MBCF0002的二代增强,它里面的组件是Function,叫EXIT_SAPMM07M_001,这个Function用户改不了,细琢磨就是控制了用户可以改的数据的范围,只允许用户修改e_sgtxt这一个参数。这个Function里只有一句话,说它包含了一个叫ZXMBCU02的文件。用户可以在这里写逻辑。网友们给出了好多利用它去针对导入参数做数据检查的案例。解决物料凭证里保存不了行项目文本的方法就是在这里加一句“e_sgtxt = i_mseg-sgtxt.”就实现了。测试它的时候,调用它的函数要重新执行一下。否则还是会按原来的代码去执行,即使你已经激活了它。
到这儿呢,也就结束了。文章是原创的,技术和知识点都是从网友那里吸收过来的。我这次无非是借着第一次处理增强的激动心情,整理了过程中的细节。希望有网友们看完之后会有收益吧。忙去了。BYE!