日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2023/12/20 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ABAP动态编程-动态生成子例程和本地类-GENERATE SUBROUTINE POOL 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

前言

1. 動(dòng)態(tài)生成子例程并調(diào)用

2.?動(dòng)態(tài)生成本地類并調(diào)用


前言

????????本文為ABAP編程中動(dòng)態(tài)生成子例程/本地類的簡單示例,依托語句GENERATE SUBROUTINE POOL實(shí)現(xiàn)。


1. 動(dòng)態(tài)生成子例程并調(diào)用

????????代碼示例:? ? ?

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_programMESSAGE lv_messageLINE lv_lines WORD lv_wordSHORTDUMP-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:根據(jù)代碼字符串生成對應(yīng)的子例程,適用于根據(jù)配置表或其它條件動(dòng)態(tài)生成對應(yīng)邏輯的處理, 或者處理一些其它動(dòng)態(tài)調(diào)用無法靈活實(shí)現(xiàn)的場景,和主程序的數(shù)據(jù)交互也較為方便。

2.?動(dòng)態(tài)生成本地類并調(diào)用

? ? ? ? 代碼示例:

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_programMESSAGE lv_messageLINE lv_lines WORD lv_wordSHORTDUMP-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." 動(dòng)態(tài)調(diào)用 靜態(tài)方法lv_classname = `\PROGRAM=` && lv_program && `\CLASS=MAIN`.CALL METHOD (lv_classname)=>meth_static." 動(dòng)態(tài)調(diào)用 實(shí)例方法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.

? ? ? ? 結(jié)果展示:

????????PS: 和生成子例程使用同樣的語法,具體使用看個(gè)人喜好。

?關(guān)聯(lián)文章:

ABAP動(dòng)態(tài)編程-動(dòng)態(tài)數(shù)據(jù)對象_xiefireworks的博客-CSDN博客

ABAP動(dòng)態(tài)編程-動(dòng)態(tài)調(diào)用子例程&方法及動(dòng)態(tài)SQL_xiefireworks的博客-CSDN博客

ABAP動(dòng)態(tài)編程-動(dòng)態(tài)生成子例程和本地類-GENERATE SUBROUTINE POOL_xiefireworks的博客-CSDN博客

ABAP動(dòng)態(tài)編程-動(dòng)態(tài)生成報(bào)表、屏幕_xiefireworks的博客-CSDN博客

總結(jié)

以上是生活随笔為你收集整理的ABAP动态编程-动态生成子例程和本地类-GENERATE SUBROUTINE POOL的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。