点击蓝字 关注我们
一
前言
项目中常常会碰到这个场景: 因为各种原因,已经导入的数据需要调整特定字段的内容.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