ABAP 类型池:类型代码为 TYPP 但名称超过五个字符的程序

ABAP type pool: program with type code TYPP but with name longer than five characters

我们正在 Java 中编写一个工具来解析和转换 ABAP 代码。因此,我们无意编写新的 ABAP 代码,但我们的工具必须处理所有 ABAP,甚至是过时的语句。此外,我不是ABAP专家。

ABAP 程序可以使用类型组,由关键字 TYPE-POOL 引入。类型组名称的最大长度为 5(内部为 8,如果算上前缀“% C”),它们的类型代码为 TYPP。过去,依靠这些假设对我们来说效果很好。

最近,我们看到了类型代码为TYPP但名称长度超过5的ABAP程序,例如'OIA===========================P'。此外,对于其中的每一个,还有另一个具有相同名称但类型代码为 INCL 的空对象。只有当常规类型组也被引用时,这些新对象才会被引用。

这些新对象可能是内部对象,与我们无关——我在 ABAP 关键字文档中没有看到对它们的任何引用。另一方面,他们让我们感到困惑,因为我们看到了他们。

有人可以向我解释这些对象的含义并指出一些文档吗?

编辑:此处示例来自 SAP ERP 6.0 系统的 EHP7

一个示例对象。 D010INC 中的条目看起来不错:

同一对象现在使用类型池 mrm。额外的包含来自哪里?

这些对象是通过包含、扩展和切换对象引入的。继续阅读:

  • 检查类型池 MRM,类型 mrm_idoc_data_ers - 该类型包含要包含的语句 rmrm_idoc_data_ers_sbo。类似的包含语句将 rmrm_upd_arseg_nfm 拉入 mrm_upd_arseg。这解释了最后两行。你的解析器应该已经捕捉到了。
  • RMRM_IDOC_DATA_ERS_SBO 包含一个名为 RMRM_IDOC_DATA_ERS_SBO_02 的增强点,它属于增强点 ES_RMRM_IDOC_DATA_ERS_SBO。同样,RMRM_UPD_ARSEG_NFM包含一个增强点RMRM_UPD_ARSEG_NFM_01,属于增强点ES_RMRM_UPD_ARSEG_NFM
  • 对于 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 结尾的参考文献。

最终,这些引用可用于确定当开关状态更改时需要重新生成哪些程序。