• 动态生成ABAP程序-资料


    参考程序:

    Tcode ABAPdocu-->
    BC - ABAP Programming-->
    The ABAP Programming Language-->
    Special Techniques-->
    Generating Programs Dynamically.

    1.仅动态生成程序代码:

      REPORT demo_special_tech_dyn_insert.
    DATA: code TYPE TABLE OF rssource-line.
    * type of an editor line: rssource-line
    APPEND  'REPORT ZDYN1.'
             TO code.
    APPEND  'WRITE / ''Hello, I am dynamically created!''.'
             TO code.
    INSERT REPORT 'demo_special_tech_ZDYN1' FROM code.
    WRITE: text-001, 'demo_special_tech_ZDYN1'.

    2.动态更改程序代码

    REPORT demo_special_tech_dyn_read_rep .
    DATA: code TYPE TABLE OF rssource-line.
    * type of an editor line: rssource-line
    READ REPORT 'demo_special_tech_ZSTRUC1' INTO code.
    APPEND 'SKIP.' TO code.
    APPEND 'WRITE / ''And I am a dynamic extension!''.' TO code.
    INSERT REPORT 'demo_special_tech_ZDYN2' FROM code.
    WRITE: text-001, 'demo_special_tech_ZDYN2'.

    3 动态生成 并 调用

    REPORT demo_special_tech_dyn_start.
    DATA: code TYPE TABLE OF rssource-line.
    * type of an editor line: rssource-line
    DATA lin TYPE i.
    READ REPORT 'demo_special_tech_zdyn1' INTO code.
    SUBMIT demo_special_tech_zdyn1 AND RETURN.
    DESCRIBE TABLE code LINES lin.
    MODIFY code INDEX lin FROM
               'WRITE / ''Dynamic Program Changed!''.'.
    INSERT REPORT 'demo_special_tech_zdyn1' FROM code.
    SUBMIT demo_special_tech_zdyn1.

    4 生成并增加include

    REPORT demo_special_tech_include_1.
    TYPES code_type TYPE rssource-line.
    * type of an editor line: rssource-line
    DATA code TYPE TABLE OF code_type.
    
    DATA lin TYPE i.
    READ REPORT 'demo_special_tech_ZINCLUD1' INTO code.
    DESCRIBE TABLE code LINES lin.
    MODIFY code INDEX lin FROM
                'WRITE / ''Changed INCLUDE program!''.'.
    INSERT REPORT 'demo_special_tech_ZINCLUD1' FROM code.
    INCLUDE demo_special_tech_zinclud1.

    5. 调用其他程序的子程序

    REPORT demo_special_tech_include_2 .
    TYPES code_type(72) TYPE c.
    DATA code TYPE TABLE OF code_type.
    READ REPORT 'demo_special_tech_ZINCLUD1' INTO code.
    APPEND 'WRITE / ''Extension of INCLUDE program!''.' TO code.
    INSERT REPORT 'demo_special_tech_ZINCLUD1' FROM code.
    PERFORM. sub1(demo_special_tech_zform1).

    6. 生成动态 临时 子程序 并调用(生成的代码有错 writ 应该是 write).

    REPORT demo_special_tech_subroutine_1.
    DATA: code TYPE TABLE OF rssource-line,
          prog(8) TYPE c, msg(120) TYPE c, lin(3) TYPE c,
          wrd(10) TYPE c, off(3) TYPE c.
    APPEND 'PROGRAM SUBPOOL.'
            TO code.
    APPEND 'FORM. DYN1.'
            TO code.
    APPEND
       'WRITE / ''Hello, I am the temporary subroutine DYN1!''.' "#EC NOTEXT
            TO code.
    APPEND 'ENDFORM.'
            TO code.
    APPEND 'FORM. DYN2.'
            TO code.
    APPEND
       'WRIT / ''Hello, I am the temporary subroutine DYN2!''.'  "#EC NOTEXT
            TO code.
    APPEND 'ENDFORM.'
            TO code.
    GENERATE SUBROUTINE POOL code NAME prog
                             MESSAGE msg
                             LINE    lin
                             WORD    wrd
                             OFFSET  off.
    IF sy-subrc <> 0.
      WRITE: / 'Error during generation in line', lin,           "#EC NOTEXT
             / msg,
             / 'Word:', wrd, 'at offset', off.                   "#EC NOTEXT
    ELSE.
      WRITE: / 'The name of the subroutine pool is', prog.       "#EC NOTEXT
      SKIP 2.
      PERFORM. dyn1 IN PROGRAM (prog).
      SKIP 2.
      PERFORM. dyn2 IN PROGRAM (prog).
    ENDIF.
    ----------------------------------------
    核心代码 :
    GENERATE SUBROUTINE POOL code NAME prog
                             MESSAGE msg
                             LINE    lin
                             WORD    wrd
                             OFFSET  off.
    生成 子程序池,检查代码错误.
    _____________________________

    7. 生成动态 临时 子程序 并调用(生成的代码正确).

    REPORT demo_special_tech_subroutine_2.
    DATA: code TYPE TABLE OF rssource-line,
          prog(8) TYPE c, msg(120) TYPE c, lin(3) TYPE c,
          wrd(10) TYPE c, off(3) TYPE c.
    APPEND 'PROGRAM SUBPOOL.'
            TO code.
    APPEND 'FORM. DYN1.'
            TO code.
    APPEND
       'WRITE / ''Hello, I am the temporary subroutine DYN1!''.' "#EC NOTEXT
            TO code.
    APPEND 'ENDFORM.'
            TO code.
    APPEND 'FORM. DYN2.'
            TO code.
    APPEND
       'WRITE / ''Hello, I am the temporary subroutine DYN2!''.' "#EC NOTEXT
            TO code.
    APPEND 'ENDFORM.'
            TO code.
    GENERATE SUBROUTINE POOL code NAME prog
                             MESSAGE msg
                             LINE    lin
                             WORD    wrd
                             OFFSET  off.
    IF sy-subrc <> 0.
      WRITE: / 'Error during generation in line', lin,           "#EC NOTEXT
             / msg,
             / 'Word:', wrd, 'at offset', off.                   "#EC NOTEXT
    ELSE.
      WRITE: / 'The name of the subroutine pool is', prog.       "#EC NOTEXT
      SKIP 2.
      PERFORM. dyn1 IN PROGRAM (prog).
      SKIP 2.
      PERFORM. dyn2 IN PROGRAM (prog).
    ENDIF.
  • 相关阅读:
    ZooKeeper 相关知识
    zookeeper 启动和停止脚本
    es 6.4.3 版本的es的处理方式
    SpringBoot启动使用elasticsearch启动异常:Received message from unsupported version:[2.0.0] minimal compatible
    windows下安装elasticsearch-6.4.3和elasticsearch-head插件
    二项式公式
    计算公式
    大规模数据如何检索?
    设计数据服务:为报表服务提供服务接口
    win10 桌面快捷键技术
  • 原文地址:https://www.cnblogs.com/rainysblog/p/8168801.html
Copyright © 2020-2023  润新知