是否存在可展开程序INCLUDE语句的ABAP函数模块或方法?
实现ABAP源代码INCLUDE语句的展开需求
你可以通过以下两种标准方式实现需求,它们都支持控制嵌套层级、设置INCLUDE黑名单,最终返回无INCLUDE语句的等效源代码内表:
1. 使用函数模块 RPY_SOURCE_INCLUDE_EXPAND
这是SAP提供的专用函数,直接支持展开程序中的INCLUDE语句,参数可灵活控制展开规则:
MAX_LEVEL:指定最大嵌套展开层级,超过层级的INCLUDE将保留原语句EXCLUDE_INCLUDES:传入不需要展开的INCLUDE名称列表(黑名单)- 支持处理类实现程序(如
ZCL_TEST======================CP)、函数组主程序(如SAPLZTEST)、普通报表等多种程序类型
示例代码:
DATA: gt_expanded_source TYPE rpy_source, gv_program TYPE progname VALUE 'ZCL_TEST======================CP', gt_exclude_list TYPE rpy_exclude_includes, gv_max_level TYPE i VALUE 10. " 添加黑名单INCLUDE APPEND 'ZEXCLUDE_ME_INCLUDE' TO gt_exclude_list. CALL FUNCTION 'RPY_SOURCE_INCLUDE_EXPAND' EXPORTING program_name = gv_program max_level = gv_max_level exclude_includes = gt_exclude_list IMPORTING source_expanded = gt_expanded_source EXCEPTIONS program_not_found = 1 no_authority = 2 OTHERS = 99. IF sy-subrc = 0. " gt_expanded_source即为展开后的等效源代码内表 ENDIF.
2. 使用类方法 CL_ABAP_SOURCE_CODE=>GET_EXPANDED_SOURCE
这是ABAP面向对象风格的实现,功能与上述函数一致,参数设计更贴合现代ABAP开发习惯:
MAX_NESTING_LEVEL:控制最大嵌套层级EXCLUDE_INCLUDES:传入黑名单INCLUDE名称表
示例代码:
DATA: gt_expanded TYPE cl_abap_source_code=>ty_source, gv_program TYPE progname VALUE 'SAPLZTEST', gt_exclude TYPE cl_abap_source_code=>ty_include_names, gv_max_lvl TYPE i VALUE 5. " 添加黑名单项 APPEND 'ZBLACKLIST_INCLUDE' TO gt_exclude. gt_expanded = cl_abap_source_code=>get_expanded_source( EXPORTING program_name = gv_program max_nesting_level = gv_max_lvl exclude_includes = gt_exclude ).
自定义展开逻辑(进阶场景)
如果需要更特殊的展开规则(比如自定义INCLUDE匹配逻辑、额外的代码预处理),可以组合以下工具实现:
- 用
RS_INCLUDE_LIST_GET获取目标程序的INCLUDE依赖层级结构 - 用
READ REPORT语句或RPY_PROGRAM_READ函数读取单个INCLUDE的源代码 - 自行编写递归逻辑,替换原程序中的INCLUDE语句为对应代码
内容的提问来源于stack exchange,提问作者rplantiko
相关产品推荐
相关产品推荐

