ABAPer的痛点
ABAPer在工作中经常会碰到一个问题:如何追溯与管理MEMORY ID?
在遇到EXPROT与IMPORT时,如果没有注释或文档支持,我们很难快速准确地定位到MEMORY ID导入或导出时的位置。
接下来,本文将介绍一种通过类的静态属性管理MEMORY ID的方法。
解决方案
SE24创建全局类
创建时选择常见ABAP类即可满足需求,考虑后续可能需要继承,我们不勾选最终。
维护类的静态属性
这里注意属性的级别为Static Attribute,可见性为Public,即公开的静态属性,类型选择MEMORY_ID,接下来激活即可使用。
本例使用DEMO作为测试属性,在正式项目中,可以用模块+流水号的方式命名,例如MM001,来进行规范管理。
2022.09.08补充:在同一会话中使用多个静态属性时,会导致冲突,此时需要维护属性的初始值,建议为Z+属性名,例如’ZMM001’,相当于使用静态属性的初始值作为MEMORY ID的KEY值。
DEMO
SELECT
matnr,
maktx
INTO TABLE @DATA(lt_makt)
FROM makt
UP TO 10 ROWS.
EXPORT lt_makt TO MEMORY ID zcl_memory_id=>demo.
CLEAR lt_makt.
IMPORT lt_makt FROM MEMORY ID zcl_memory_id=>demo.
cl_demo_output=>display( lt_makt ).
DEMO运行结果:
DEMO反查
总结
使用类的静态属性对ABAP内存进行管理,可以快速准确地定位MEMORY ID,非常方便,如果需要对MEMORY ID增加一些额外的业务逻辑,也可以增加类的静态方法进行处理,读者可以自行探索。
本文介绍的方法也存在一定缺点:如果使用单个类对所有的MEMORY ID进行管理,偶尔会出现不同开发者请求号之间的冲突,此问题可以通过对不同模块设立内存管理类得到一定程度的缓解。
如果读者有更好的办法对ABAP内存进行管理,或者有其他改进建议,欢迎在评论区留言~