声明:本文仅代表原作者观点,仅用于SAP软件的应用与学习,不代表SAP公司。注:文中所示截图来源SAP软件,相应著作权归SAP所有。
一、前言
项目中常常会碰到这个场景: 因为各种原因,已经导入的数据需要调整特定字段的内容.SAP软件提供了一个批量更改字段内容的功能(事务代码MASS)。
事务代码 MASS。该功能只涵盖了27个对象类型及这些对象的相关表,如图1.超出这个范围则无法使用MASS修改大量数据的性能较差。
因为MASS的上述局限性。在项目中开发了一个批量更新工具ZUP_ANY.用于更新指定表的指定字段内容
图一
二、MASS执行过程
先简单介绍一下通过MASS修改商品属性的过程
1)选定对象类型
2)选择对象中的表
3)选择表中的字段
4)选择要修改的数据
点击执行后, 选择要修改的数据
5)批量修改
输入关键字后,系统会显示所有该数据的字段内容. 此时可以批量修改字段内容.
6)通过文件导入
需要事先准备EXCEL文件, 文件中输入关键字列和要修改的字段列及内容(可以不带标题)
7)选择文件属性
8)映射字段
9)预览数据
10)显示待变更数据
进入和选择数据相同的内容(不同的是,此时目标值已经填写)
11)执行测试按钮
12)保存修改
点击保存,完成修改
13)查看结果
查看商品的变更记录
三、通过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来记录这个验证的结果。
后续可以考虑优化一下关联表的变更(提供一个配置表配置表字段的关联关系,包含主键的位置关系),在导入存在关联的表/字段内容后,自动产生一行关联表/字段的更新。
一般情况下:
1)配置表字段的更新比较安全;
2)主数据表字段的更新相对安全;
3)单据表字段的更新则需要谨慎一些;
一般情况下:
1)增强字段的修改相对安全些;
2)标准字段的修改则需要谨慎一些。