SAP工具箱 批量更新任意表字段内容

2021-10-28 22:26发布


          点击此处--->   EasySAP.com 群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)

点击蓝字 关注我们

前言

项目中常常会碰到这个场景: 因为各种原因,已经导入的数据需要调整特定字段的内容.SAP提供了一个批量更改字段内容的功能. (事务代码MASS).

事务代码 MASS. 该功能只涵盖了27个对象类型及这些对象的相关表,如图1.超出这个范围则无法使用MASS修改大量数据的性能较差.

因为MASS的上述局限性.

在项目中开发了一个批量更新工具ZUP_ANY.用于更新指定表的指定字段内容


图一


MASS执行过程

先简单介绍一下通过MASS修改商品属性的过程


10

选定对象类型



20

选择对象中的表



30

选择表中的字段



41

选择要修改的数据


点击执行后, 选择要修改的数据


42

批量修改


输入关键字后,系统会显示所有该数据的字段内容. 此时可以批量修改字段内容.


51

通过文件导入


需要事先准备EXCEL文件, 文件中输入关键字列和要修改的字段列及内容(可以不带标题)


52

选择文件属性



53

映射字段



54

预览数据



55

显示待变更数据


进入和选择数据相同的内容(不同的是,此时目标值已经填写)


60

执行测试按钮



70

保存修改


点击保存,完成修改


80

查看结果


查看商品的变更记录


通过ZUP_ANY完成该过程

通过ZUP_ANY修改商品属性的过程


01

执行ZUP_ANY



02

下载模板


下载模板,在模板中填写数据,重要字段通过批注描述字段的用法


03

导入数据


点击执行后,数据写入内表


04

进入处理


点击保存后, 进入数据处理程序


05

执行处理


选中行,点击处理,此时报错,因为修改的是标准表的标准字段, 所以需要配置一下.

06

配置字段允许


配置标准字段允许修改(ZTUP_ANY_C1)


07

执行通过



08

查看变更结果


查看商品的变更日志


MASS VS ZUP_ANY

对比一下MASS 与ZUP_ANY程序的优缺点.

建议还是尽量使用MASS大量变更数据, 除非碰到MASS不支持的数据对象,或者MASS性能实在太差时, 再使用ZUP_ANY更新.


01

MASS的优点


  • 通过步骤引导用户选择要修改的对象,表,字段.通过选择或导入指定要变更的数据.

  • 允许批量修改为目标值.

  • 提供了测试功能,

  • 记录了应用日志,

  • 记录了变更文档.

  • 标准程序,用户更有信心使用.

  • 可以同时修改同一个表的多个字段

  • 业务关联修改系统自动处理((比如MLAN-TAXM1修改后系统自动调整MARA-TAKLV)


02

MASS的缺点


  • 支持对象有限,目前有27个对象的相关表中的字段允许修改.

  • 修改增强字段需要额外配置(比如商品MARA的增强字段,需要先配置字段状态组,才能用MASS修改)

  • 性能较差(因为要校验的逻辑过多)


03

ZUP_ANY的优点


  • 任意表的非关键字都允许修改

  • 默认支持自定义表或标准表的增强字段修改

  • 对联合主键,允许使用通配符修改大量数据(如图二)

  • 通过码表校验修改的字段内容

  • 记录变更文档(自动识别待更新表/字段的变更对象)

  • 记录下传控制表

  • 便于处理不同数据的不同目标字段内容

  • 修改信息同时记录在(ZTUP_ANY和变更文档中)

  • 可以同时修改多个表的不同字段


04

ZUP_ANY的缺点


  • 非查询式修改(待修改的数据需要用其它方式查询出来)

  • 需要用户自行联合主键到一个字段中(需要注意主键顺序),如图二

  • 对于标准字段的修改需要先行验证并配置(配置表:ZTUP_ANY_C1)

  • 业务关联修改需要自行处理(比如MLAN-TAXM1 需要关联修改MARA-TAKLV)

  • 下传控制表记录可能缺失(比如修改EKPO的字段,则无法记录采购订单的下传控制表ZTIFEKKO)

图二


ZUP_ANY的开发思路

ZUP_ANY按照通用导入模板开发.

详见连接
无峰,公众号:ABAP 技巧与实战SAP工具箱 配置导入模板


通用导入程序
无峰,公众号:ABAP 技巧与实战SAP工具箱 通用导入程序


01

内容记录


导入的数据写入表ZTUP_ANY

通过四个字段存放所有表变更的信息

  • TABNAME       表名

  • TABKEY           主键

  • FIELDNAME    字段名

  • FIELDVALUE    字段值


02

处理程序


处理程序ZUP_ANY_PROC调用处理函数Z_BAPI_ANY_TABLE_UPDATE

函数中对于传入的数据执行如下校验

  • 检查传入的数据属于同一个表

  • 检查传入的数据主键相同.

  • 检查字段是增强字段,或者是配置表中允许的字段

  • 字段内容存在与码表内容中


调用动态SQL语句更新数据后,

  • 查找表对应的变更对象,写入变更表CDHDR/CDPOS,

  • 查找表对应的下传控制表,写入下传控制表


下传控制表: 主数据或单据保存后,通过配置表判断是否需要通过特定接口下传,如果需要,则把主键与接口编号写入特定的下传控制表,后续下传程序读取该下传控制表与业务表获取要下传的数据.



总结

ZUP_ANY 是项目中开发的一个用于更新任意表任意字段的程序.

实际使用时,可以不加限制的修改自定义表或标准表增强字段.

对于标准表字段的修改则需要谨慎对待,因为要确保该字段修改后不会影响业务处理逻辑.通过配置表ZTUP_ANY_C1来记录这个验证的结果.

后续可以考虑优化一下关联表的变更(提供一个配置表配置表字段的关联关系,包含主键的位置关系),在导入存在关联的表/字段内容后,自动产生一行关联表/字段的更新.

一般情况下:

  • 配置表字段的更新比较安全

  • 主数据表字段的更新相对安全

  • 单据表字段的更新则需要谨慎一些.

一般情况下:

  • 增强字段的修改相对安全些

  • 标准字段的修改则需要谨慎一些


THE

END

约定

如果你对这篇文章感兴趣,请帮忙点赞,在看,分享.       

    (如果你真的喜欢这篇文章,请记得回来打个赏,作为支持我继续下去的动力,这是一个正反馈过程. 越多的人打赏,作者越有动力分享,读者就能享受更多的福利.毕竟打赏的金额富不了我,穷不了你,却能支持这个公众号长久发文.)



公众号 : syjf1976_abap

          ABAP开发技巧

微信号 : 392077


请微信联系管理员: 

syjf1976 

sharry_xlp  

Yannick_Duan 申请进入公众号讨论群

赞赏支持