SAP ABAP代码自动生成demo

本文介绍了如何利用SAP ABAP的面向对象编程知识和工具ABAPCodeComposer来自动化生成代码。通过创建INCLUDE文件作为模板,定义类和方法,并在REPORT程序中传递参数,最终生成特定的代码段。这种方法提高了开发效率,减少了重复工作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本篇文章会用到SAP abap oop 相关知识,可参考如下连接:
SAP OO面向对象理论知识(部分一)
SAP OO面向对象理论知识(部分二)
SAP ABAP OOP面向对象(一)
SAP OO面向对象 求圆的周长Demo(二)
可参考Jerry博客:
SAP ABAP关键字语法图和ABAP代码自动生成工具Code Composer

代码自动生成思路

  1. 首先我先创建一个INCLUDE 包含文件,在这个文件中编写我们的要自动生成的代码模板.
  2. 其次就是创建一个REPORT可执行程序,用来把我们需要的参数传递给INCLUDE包含文件的模板中
  3. 最后执行程序,把代码复制就ok了.

创建INCLUDE包含文件

下面的这个include只是一个骨架,不能直接使用,需要我们对其赋值,赋的就是一些类名,方法名之类的,使之成为一个完整的程序

我们可以看到下面@这个字符,他的作用就是处理一下条件或分支,$美元符号就是表示的变量
如果参数:i_param-class = cl_p那么这代码CLASS $i_param-class$ definItion.就等价于CLASS cl_p definItion.
从效果上看是那个反斜杠是 换行,但最后的 \.可以点出语法,具体没弄清楚.
(之前在群里讨论是控制语法的呜呜呜呜.应该不对)

*&---------------------------------------------------------------------*
*&  Include  ZSINGLETON_HCF_01
*&  txt      使用ABAP Code Composer自动生成代码
*&---------------------------------------------------------------------*
CLASS $i_param-class$ definItion.
  @if i_param-global @notinitial
    \ public"
  @end
  \ final create private.
  PUBLIC SECTION.
    INTERFACES:
      $i_param-interface$.
    CLASS-METHODS:
      s_get_instance
        RETURNING
          VALUE(r_ref_instance) TYPE REF TO $i_param-interface$.
    @IF  i_param-exception @notinitial
          raising
            $i_param-exception$
    @end
   \.
  PRIVATE SECTION.
    CLASS-DATA :
      s_ref_songleton TYPE REF TO $i_param-interface$.
    CLASS-METHODS:
      s_create_instance
        RETURNING
          VALUE(r_ref_instance)
            TYPE REF TO $i_param-class$.
    @if i_param-exception @notinitial
          raising
              $i_param-exception$
    @end
   \. "
ENDCLASS.

class $i_param-class$ implementation.
  method s_create_instance.
    @if i_param-exception @notinitial
    @end

    @if  i_param-exception @notinitial
          data l_ref_instance type ref to $i_param-class$.
.
    CREATE OBJECT l_ref_instance.
    @slot object_construction
    @end
          r_ref_instance = l_ref_instance.
    @else
          create object r_ref_instance.
    @end
      endmethod.

    method s_get_instance.
      @if   i_param-exception @notinitial
      @end
            if  s_ref_singleton is not bound.
      s_ref_singleton = s_create_instance(  ).
    endif.
    r_ref_instance = s_ref_singleton.
  ENDMETHOD.
ENDCLASS.

创建REPORT可执行程序

cx_root 所有全局异常的抽象类
cl_cmp_composerSAP内部用法的代码编辑器,tab_code是它的一个类型

*&---------------------------------------------------------------------*
*& Report ZSINGLETON_REPORT
*&---------------------------------------------------------------------*
*& txt    使用ABAP Code Composer自动生成代码
*&---------------------------------------------------------------------*
REPORT zsingleton_report.

TYPES:BEGIN OF ty_param,
        class     TYPE string,
        global    TYPE abap_bool,
        interface TYPE string,
        exception TYPE string,
      END OF ty_param.

DATA:l_ref_composer TYPE REF TO cl_cmp_composer,
     lx_root        TYPE REF TO cx_root, "所有全局异常的抽象类
     lv_error       TYPE string,
     lt_teb_code    TYPE cl_cmp_composer=>tab_code,
     ls_param       TYPE ty_param.

START-OF-SELECTION.

  ls_param-class = 'ZCL_HCF'.
  ls_param-interface = 'ZIF_HCF'.
  ls_param-global = ABAP_FALSE.
  ls_param-exception = 'ERROR'.

*创建一个实例代码编写器
  l_ref_composer = cl_cmp_composer=>s_create( ).
*确定你的上下文,通过下面的参数可以看出来是 ls_param 赋值到 i_param
  l_ref_composer->add_var( i_name = 'I_PARAM' I_VALUE = ls_param ).
  TRY. "捕获异常
*创建生成代码
      lt_teb_code = l_ref_composer->build_code(  I_TEMPLATE_INCLUDE = 'ZSINGLETON_INCLUDE' ) .
  CATCH cx_root into lx_root. 
     " lv_error = lx_root->get_longtext( )."获取错误长文本
    lv_error = lx_root->get_text( )."获取文本
      WRITE: / lv_error.
      return.
  ENDTRY.
 *输出你生成的代码
  cl_demo_output=>display_data( lt_teb_code ).

生成的代码(最终结果)

下面框选住的就是我们赋值过去的数据.
在这里插入图片描述

总结

自动生成代码理论上是可以实现代码的复用的,可以大大提高程序员的开发效率.就按照本篇的可执行程序来说,我们其实可以 使用屏幕进行动态输入参数.
以上所述案例仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雨天行舟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值