使用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
相关产品推荐
相关产品推荐

