You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用SEO_CLASS_CREATE_COMPLETE生成类时的代码格式化问题咨询

关于ABAP类生成与源代码美化的解决方案

针对你使用SEO_CLASS_CREATE_COMPLETE生成类时遇到的源代码美化问题,逐个解答如下:

1. SEO_CLASS_CREATE_COMPLETE是否支持美化打印?

没有直接方法。这个函数模块属于旧版ABAP类构建API,设计时未内置源代码格式化(Pretty-print)功能,无法通过参数配置或扩展实现自动美化。

2. 读取生成的类源码并美化后重新保存?

完全可行,具体步骤及代码示例如下:

  • 通过SEO_CLASS_GET_METHODS获取类的方法列表;
  • 遍历方法,用SEO_METHOD_GET_SOURCE读取原始源码;
  • 调用PRTTY_PRINT格式化源码;
  • 用SEO_METHOD_SET_SOURCE将美化后的源码写回类;
  • 最后激活类确保修改生效。
DATA: lt_methods TYPE seo_method_tab,
      ls_method  TYPE seo_method,
      lt_source  TYPE string_table,
      lt_pretty  TYPE string_table,
      lv_clsname TYPE seoclsname.

lv_clsname = wa_vseoclass-clsname.

* 获取类的方法列表
CALL FUNCTION 'SEO_CLASS_GET_METHODS'
  EXPORTING
    clsname = lv_clsname
    version = seoc_version_active
  TABLES
    methods = lt_methods.

* 遍历处理每个方法的源码
LOOP AT lt_methods INTO ls_method.
  * 读取原始源码
  CALL FUNCTION 'SEO_METHOD_GET_SOURCE'
    EXPORTING
      clsname        = lv_clsname
      methodname     = ls_method-methodname
      version        = seoc_version_active
    TABLES
      source         = lt_source
    EXCEPTIONS
      not_found      = 1
      internal_error = 2
      OTHERS         = 3.
  IF sy-subrc = 0.
    * 执行美化打印
    CALL FUNCTION 'PRTTY_PRINT'
      EXPORTING
        language               = sy-langu
        fix_indentation        = 'X'
        convert_tabs_to_spaces = 'X'
      IMPORTING
        pretty_source          = lt_pretty
      TABLES
        source                 = lt_source
      EXCEPTIONS
        cancel                 = 1
        internal_error         = 2
        OTHERS                 = 3.
    IF sy-subrc = 0.
      * 写回格式化后的源码
      CALL FUNCTION 'SEO_METHOD_SET_SOURCE'
        EXPORTING
          clsname        = lv_clsname
          methodname     = ls_method-methodname
          version        = seoc_version_active
        TABLES
          source         = lt_pretty
        EXCEPTIONS
          not_found      = 1
          internal_error = 2
          OTHERS         = 3.
    ENDIF.
    CLEAR: lt_source, lt_pretty.
  ENDIF.
ENDLOOP.

* 重新激活类
CALL FUNCTION 'SEO_CLASS_ACTIVATE'
  EXPORTING
    clsname          = lv_clsname
    version          = seoc_version_active
    authority_check  = seox_true
  EXCEPTIONS
    OTHERS           = 1.

3. 自带美化功能的更优类生成方式?

推荐使用CL_OO_CLASS_BUILDER这个面向对象的API,它是SAP官方推荐的现代类构建工具,比旧函数模块更灵活,可在生成流程中直接嵌入源码美化步骤:

DATA(lo_class_builder) = NEW cl_oo_class_builder(
  clsname      = 'ZMY_AUTO_PRETTY_CLASS'
  devclass     = 'ZDKD_POSTING_AREA'
  description  = 'Generated with auto pretty-printed source'
).

* 准备方法原始源码并美化
DATA(lt_raw_source) = VALUE string_table( 
  ( 'METHOD z_process_data.' )
  ( 'DATA(lv_result) = 0.' )
  ( 'LOOP AT gt_data INTO DATA(ls_data).' )
  ( '  lv_result = lv_result + ls_data-value.' )
  ( 'ENDLOOP.' )
  ( 'ENDMETHOD.' )
).
DATA(lt_pretty_source) = VALUE string_table( ).

CALL FUNCTION 'PRTTY_PRINT'
  EXPORTING
    language               = sy-langu
    fix_indentation        = 'X'
  IMPORTING
    pretty_source          = lt_pretty_source
  TABLES
    source                 = lt_raw_source.

* 添加美化后的方法到类构建器
lo_class_builder->add_method(
  iv_method_name = 'Z_PROCESS_DATA'
  iv_visibility  = if_oo_class_builder=>cv_visibility_public
  it_source      = lt_pretty_source
).

* 生成并激活类
lo_class_builder->create( ).
lo_class_builder->activate( ).

这种方式可在类生成阶段直接完成源码美化,无需后续二次修改,流程更高效。

内容的提问来源于stack exchange,提问作者Poul Bundgaard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 17:22:12