原创 无峰 [ ABAP 技巧与实战 ](javascript:void\(0\);)
一
前言
物料主数据批量修改是一个项目中常有的需求 .
之前曾经写过一篇文章,介绍了标准的批量修改工具MASS以及一个开发的工具ZUP_ANY
> 详见链接 无峰,公众号:ABAP 技巧与实战 [ SAP工具箱 批量更新任意表字段内容
> ](https://mp.weixin.qq.com/s?__biz=Mzg4MjA1MjE4NQ==&mid=2247486782&idx=1&sn=799f9e61c2bbaac4381feae88496383d&chksm=cf5dd008f82a591e8b33ddb739c87381d4abf4f64b51534b067af6d84f956a1dfef59395fb85&scene=21#wechat_redirect)
**通用修改程序及动态调用物料修改的BAPI函数结合的物料批量修改方式**
二
MASS缺点
MASS的最大缺点可能就是易用性,根据前言中的链接对MASS的执行步骤统计, 需要12个步骤才能完成物料主数据的批量修改.
其次是授权无法控制, 从下图可以看到, MASS仅能控制数据维护对象.一旦开放了物料主数据对象, 意味着用户能修改物料的任意字段.
基于上述两点理由: MASS无法开放给最终用户使用.
三
ZUP_ANY缺点
• 易用性
通过与通用修改程序结合,已经解决了易用性.
> 详见链接 无峰,公众号:ABAP 技巧与实战 [ SAP工具箱 通用修改程序(一 简介)
> ](https://mp.weixin.qq.com/s?__biz=Mzg4MjA1MjE4NQ==&mid=2247487788&idx=1&sn=fc797a64874c042d31da33bb91f2e0dc&chksm=cf5dcc1af82a450cd38be3ebf1e10cf5ccc12c3d9b52ac95bfdfbce7c8a7f3b7881eec609aee&token=470123494&lang=zh_CN&scene=21#wechat_redirect)
• 信任度
因为ZUP_ANY是直接更新数据库表,增强字段的直接更新肯定没问题, 大部分标准字段的更新大概率也不会有问题. 个别标准字段的更新可能有问题.
(可以通过配置控制是否可以更新特定字段). 这样带来的问题是,更新的标准字段需要通过验证确保直接更新不会带来风险.
调用标准物料修改的BAPI则可以解决信任度的问题
四
动态调用BAPI函数
整体逻辑封装在类 ZCL_MATERIAL_BAPI 中. 目前仅支持工业行业的物料主数据,后续根据项目情况补充零售行业的BAPI
_**01** _
**思维导图**
_**02** _
**待补充完善部分**
其中添加表与BAPI参数关系 及BAPI参数的删除重复项部分需要后续根据项目情况补充更多的内容,暂时只支持
MARA,MARC,MBEW,MARD,MVKE等常用表
五
调用方式
如下图, 定义一个函数(该函数后续在通用修改中配置调用),传入通用内表,为了简化对通用内表的处理, 在函数中定义一个特定内表,包含相关信息.
特定内表调用类方法即可
CALL METHOD zcl_material_bapi=>common_mm01( CHANGING ct_data = lt_data ).六
与通用修改程序的整合
配置ZTBC_CHANGE_C1.使用上述的保存函数Z_BC_PP1065_SAVE
其中ZDDL_PP1065是CDS视图, 完成业务部分逻辑,比如数据的限制条件或关联其它要显示的内容.
整合后, 就可以达成如下的界面处理
事务代码进入通用修改程序界面
通过动态生成的选择屏幕限制数据, 限制的数据可以自动保存,也可以保存变式,以便后续载入使用
可以添加批量修改按钮,通过下图三个配置项完成. (需要先完成相应的开发对象)
成功/失败信息通过处理标记的图标呈现. 错误消息集中放到消息字段, 也可以通过双击处理图标,显示详细的BAPI返回消息.
七
总结
动态调用物料的BAPI函数是一个封装的类,目的是简化BAPI调用的代码编写. 传入的动态内表只需要包含
• 关键字
• 待修改字段
• 附加控制字段(ZZICON,MESSAGE,ERRNO)
剩余调用BAPI部分由类中方法实现. 极大的简化了修改物料主数据特定字段的程序的开发. 再配合通用修改程序,可以快速完成一个指定字段的物料主数据修改程序.
**约定**
如果你对这篇文章感兴趣,请帮忙点赞,在看,分享.
( **如果你真的喜欢这篇文章,请记得回来打个赏,作为支持我继续下去的动力,这是一个正反馈过程.
越多的人打赏,作者越有动力分享,读者就能享受更多的福利.毕竟打赏的金额富不了我,穷不了你,却能支持这个公众号长久发文.** )
syjf1976
sharry_xlp
Yannick_Duan
申请进入公众号讨论群提问或者参与话题讨论