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

2021-09-29 16:47:56 浏览数 (1)

声明:本文仅代表原作者观点,仅用于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)标准字段的修改则需要谨慎一些。

0 人点赞