ABAP动态编程-动态生成子例程和本地类-GENERATE SUBROUTINE POOL

43 篇文章 7 订阅

目录

前言

1. 动态生成子例程并调用

2. 动态生成本地类并调用


前言

        本文为ABAP编程中动态生成子例程/本地类的简单示例,依托语句GENERATE SUBROUTINE POOL实现。


1. 动态生成子例程并调用

        代码示例:     

DATA: lt_source  TYPE TABLE OF string WITH EMPTY KEY,
      lv_source  TYPE string,
      lv_program TYPE sy-repid,
      lv_message TYPE text240,
      lv_lines   TYPE i,
      lv_word    TYPE char72,
      lv_sid     TYPE string.

lt_source = VALUE #( ( `PROGRAM.`                               )
                     ( `FORM DYN_FORM.`                          )
                     ( `  DATA LS_T001 TYPE T001.`               )
                     ( `  SELECT SINGLE * FROM T001 INTO LS_T001 WHERE bukrs = '0001'.` )
                     ( `WRITE: LS_T001-BUTXT.`                                )
                     ( `ENDFORM.`                                )
                      ).

TRY .
    GENERATE SUBROUTINE POOL lt_source  NAME lv_program
             MESSAGE                    lv_message
             LINE lv_lines WORD lv_word
             SHORTDUMP-ID lv_sid.

  CATCH cx_sy_generate_subpool_full .
    sy-subrc = 2.
  CATCH cx_sy_gen_source_too_wide  .
    sy-subrc = 3.
ENDTRY.

IF sy-subrc = 0.
  PERFORM ('DYN_FORM') IN PROGRAM (lv_program) IF FOUND.
ELSEIF sy-subrc = 4.
  MESSAGE lv_message TYPE 'I'.
ELSEIF sy-subrc = 8.
  MESSAGE lv_sid TYPE 'I'.
ELSE.
  MESSAGE 'GENERATE SUBROUTINE POOL EXCEPTION' TYPE 'I'.
ENDIF.

        PS:根据代码字符串生成对应的子例程,适用于根据配置表或其它条件动态生成对应逻辑的处理, 或者处理一些其它动态调用无法灵活实现的场景,和主程序的数据交互也较为方便。

2. 动态生成本地类并调用

        代码示例:

DATA: lt_source  TYPE TABLE OF string WITH EMPTY KEY,
      lv_source  TYPE string,
      lv_program TYPE sy-repid,
      lv_message TYPE text240,
      lv_lines   TYPE i,
      lv_word    TYPE char72,
      lv_sid     TYPE string.

DATA: lv_classname TYPE string,
      lo_object    TYPE REF TO object.

lt_source = VALUE #(
  ( `PROGRAM.`                        )
  ( `CLASS main DEFINITION.`          )
  ( `  PUBLIC SECTION.`               )
  ( `    CLASS-METHODS meth_static.`  )
  ( `    METHODS meth_instance.`      )
  ( `ENDCLASS.`                       )
  ( `CLASS main IMPLEMENTATION.`      )
  ( `  METHOD meth_static.`           )
  ( `    WRITE: 'Static Method'.`     )
  ( `  ENDMETHOD.`                    )
  ( `  METHOD meth_instance.`         )
  ( `    WRITE: 'Instance Method'.`   )
  ( `  ENDMETHOD.`                    )
  ( `ENDCLASS.`                       ) ).


TRY .
    GENERATE SUBROUTINE POOL lt_source  NAME lv_program
             MESSAGE                    lv_message
             LINE lv_lines WORD lv_word
             SHORTDUMP-ID lv_sid.

  CATCH cx_sy_generate_subpool_full .
    sy-subrc = 2.
  CATCH cx_sy_gen_source_too_wide  .
    sy-subrc = 3.
ENDTRY.

IF sy-subrc = 0.

  TRY.
      " 动态调用 静态方法
      lv_classname = `\PROGRAM=` && lv_program && `\CLASS=MAIN`.
      CALL METHOD (lv_classname)=>meth_static.

      " 动态调用 实例方法
      CREATE OBJECT lo_object TYPE (lv_classname).
      CALL METHOD lo_object->('METH_INSTANCE').

    CATCH cx_sy_dyn_call_error.
      MESSAGE 'Dynamic call error' TYPE 'I'.
  ENDTRY.

ELSEIF sy-subrc = 4.
  MESSAGE lv_message TYPE 'I'.
ELSEIF sy-subrc = 8.
  MESSAGE lv_sid TYPE 'I'.
ELSE.
  MESSAGE 'GENERATE SUBROUTINE POOL EXCEPTION' TYPE 'I'.
ENDIF.

        结果展示:

        PS: 和生成子例程使用同样的语法,具体使用看个人喜好。

 关联文章:

ABAP动态编程-动态数据对象_xiefireworks的博客-CSDN博客

ABAP动态编程-动态调用子例程&方法及动态SQL_xiefireworks的博客-CSDN博客

ABAP动态编程-动态生成子例程和本地类-GENERATE SUBROUTINE POOL_xiefireworks的博客-CSDN博客

ABAP动态编程-动态生成报表、屏幕_xiefireworks的博客-CSDN博客

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
《从实例学SAP ABAP编程1-10章》是一本SAP ABAP编程的经典入门教材。本书从简单的SAP ABAP编程入手,通过多个实例向读者展示了SAP ABAP编程的核心概念和语法。 在第一章中,本书通过一个简单的例介绍了SAP ABAP编程的基础知识,讲解了ABAP编辑器、ABAP数据字典和ABAP Workbench等重要工具的用法。 在第二章中,本书通过一个简单的例向读者介绍了ABAP表格的创建和维护,并讲解了一些与表格相关的SAP ABAP编程的语法和概念。 在第三章中,本书介绍了SAP ABAP编程中的面向对象编程,通过几个例向读者展示了如何使用、对象和继承等概念进行SAP ABAP编程。 在第四章中,本书介绍了SAP ABAP编程中的函数模块,向读者讲解了如何创建和调用函数模块,以及如何在SAP系统中使用函数模块。 在第五章中,本书介绍了SAP ABAP编程中的异常处理,向读者讲解了如何使用TRY/CATCH语句处理SAP系统中的异常情况。 在第六章中,本书介绍了SAP ABAP编程中的Web服务,向读者讲解了如何创建和使用SAP系统中的Web服务,以及如何使用HTTP和SOAP协议进行数据通信。 在第七章中,本书介绍了SAP ABAP编程中的ALV报表,向读者讲解了如何创建和维护SAP系统中的ALV报表,以及如何对报表进行数据操作和定制。 在第八章中,本书介绍了SAP ABAP编程中的BADI和Enhancement点,向读者讲解了如何使用BADI和Enhancement点扩展和修改SAP系统中的业务逻辑。 在第九章中,本书介绍了SAP ABAP编程中的Smart Form,向读者讲解了如何使用Smart Form创建和维护SAP系统中的表单。 在第十章中,本书介绍了SAP ABAP编程中的SAP HANA数据库,向读者讲解了如何使用SAP HANA数据库进行高效的数据处理和分析。 通过阅读本书,读者可以快速掌握SAP ABAP编程的核心知识和技能,从而能够独立进行SAP系统的开发和维护工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值