动态生成ABAP程序

15 篇文章 0 订阅

http://blog.chinaunix.net/uid-697173-id-2680869.html


动态生成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.(完)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值