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
结尾的参考文献。
最终,这些引用可用于确定当开关状态更改时需要重新生成哪些程序。
我们正在 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
结尾的参考文献。
最终,这些引用可用于确定当开关状态更改时需要重新生成哪些程序。