我们正在编写一个用Java解析和转换ABAP代码的工具 . 因此,我们无意编写新的ABAP代码,但我们的工具必须处理所有ABAP,甚至是过时的语句 . 此外,我不是ABAP专家 .
ABAP程序可以使用由关键字TYPE-POOL引入的类型组 . 类型组的名称的最大长度为5(如果计算前缀“%C”,则内部为8),其类型代码为TYPP . 在过去,依赖这些假设对我们来说效果很好 .
最近,我们看到类型代码为TYPP但名称长于5的ABAP程序,例如'OIA =========================== P' . 此外,对于其中的每一个,还有另一个具有相同名称但类型代码为INCL的空对象 . 仅当常规类型组也是引用时,才引用这些新对象 .
这些新对象可能是内部对象,与我们无关 - 我在ABAP关键字文档中没有看到任何对它们的引用 . 另一方面,他们让我们感到困惑,因为我们看到了他们 .
有人可以向我解释这些对象的含义并指出我的一些文档吗?
编辑:这里是来自EHP7 for SAP ERP 6.0系统的示例
一个示例对象 . D010INC中的条目看起来很好:
现在使用类型池mrm的相同对象 . 附加包含来自哪里?
1 回答
这些对象通过包含,扩展和切换对象引入 . 阅读:
检查类型池
MRM
,键入mrm_idoc_data_ers
- 该类型包含要包含rmrm_idoc_data_ers_sbo
的语句 . 类似的include语句将rmrm_upd_arseg_nfm
拉入mrm_upd_arseg
. 这解释了最后两行 . 你的解析器应该已经 grab 了 .RMRM_IDOC_DATA_ERS_SBO
包含一个名为RMRM_IDOC_DATA_ERS_SBO_02
的增强点,属于增强点ES_RMRM_IDOC_DATA_ERS_SBO
. 同样,RMRM_UPD_ARSEG_NFM
包含属于增强点ES_RMRM_UPD_ARSEG_NFM
的增强点RMRM_UPD_ARSEG_NFM_01
.对于
ES_RMRM_IDOC_DATA_ERS_SBO
,存在名为ISAUTO_MRM_RMRM_IDOC_DATA_ERS
的增强实现 . 对于ES_RMRM_UPD_ARSEG_NFM
,存在名为/NFM/MM_RMRM_UPD_ARSEG_NFM
的实现 . 这解释了以=E
结尾的引用实现
ISAUTO_MRM_RMRM_IDOC_DATA_ERS
位于包ISAUTO_MRM
中 . 实现/NFM/MM_RMRM_UPD_ARSEG_NFM
位于包/NFM/MM
中 . 这解释了以=P
结尾的引用 . 显然,不会为每个包生成这些引用:包
ISAUTO_MRM
由开关AM_ERS
控制,包/NFM/MM
由开关/NFM/MM
控制 . 这解释了以=S
结尾的引用 .最终,这些引用可用于确定当开关状态改变时需要重新生成哪些程序 .