ABAP动态模式(Dynamic Pattern)
在利用模式快速規(guī)范開發(fā)ABAP代碼中,我們討論了模式的基本特性和用法,以及如何創(chuàng)建自己的模式。我將進一步介紹,并演示如何將動態(tài)元素添加到模式中,從而使開發(fā)過程更加簡化。
SAP ABAP Dynamic Pattern
1. 什么是動態(tài)模式
在常規(guī)(靜態(tài))模式中,只有ABAP代碼和一些注釋。有用,但不是非常復雜。然而,使用動態(tài)模式,您可以模擬內置模式的行為:獲取參數(shù)(例如結構名稱),進行一些處理,根據(jù)輸入生成輸出。
作為一個示例,我們將創(chuàng)建一個動態(tài)模式,該模式將前文中的代碼注釋中的開發(fā)人員、請求號等信息動態(tài)填充到注釋中。
2. 創(chuàng)建動態(tài)模式
要在SAP ERP中創(chuàng)建動態(tài)模式,只需執(zhí)行利用模式快速規(guī)范開發(fā)ABAP代碼中討論的創(chuàng)建模式的步驟:選擇實用程序>更多實用程序>編輯模式>創(chuàng)建模式,然后輸入模式的名稱。它將只包含以下代碼行,不包含其他內容:
*$&$MUSTER
然后為模式創(chuàng)建一個函數(shù),函數(shù)的格式如下,
_EDITOR_EXIT
當調用模式是,程序會調用函數(shù)模式對應的函數(shù)。
我們需要創(chuàng)建一個函數(shù)ZDP_EDITOR_EXIT,使用一個名為BUFFER的RSWSOURCET類型的TABLES參數(shù)創(chuàng)建函數(shù)模塊。
在這個功能模塊中,您現(xiàn)在可以對動態(tài)模式做任何想做的事情。您擁有正常對話編程的所有可能性。例如,您可以使用彈出窗口向用戶請求輸入,就像我在本例中所做的那樣(在下面找到我的示例代碼)。
我們可以使用函數(shù)模塊POPUP_GET_VALUES向用戶請求一些輸入。也可以自己創(chuàng)建Dialog屏幕來獲取輸入的信息,然后將這些信息拼接成我們需要的備注信息。
錄入基本信息:
插入效果:
3. 詳細代碼
FUNCTION zdp_editor_exit. *"---------------------------------------------------------------------- *"*"本地接口: *" TABLES *" BUFFER TYPE RSWSOURCET *"----------------------------------------------------------------------"Pattern格式 *----------------------------------------------------------------------* * Object : <開發(fā)對象,如程序名、增強,類等等> * FS ID : <開發(fā)需求編號,如AM0014> * Functional Owner: <業(yè)務顧問> * Description : <功能描述,如果內容太多,請換行> * <功能描述> *----------------------------------------------------------------------* * TR No. Date Author Description * S4DK946420 2020.09.18 梁子華 初始版本 * *----------------------------------------------------------------------*CONSTANTS lc_spit_line TYPE stringVALUE '*----------------------------------------------------------------------*'.CONSTANTS lc_blank_line TYPE string VALUE '* '.DATA: BEGIN OF ls_buffer_basic,id(22) TYPE c,value(51) TYPE c,END OF ls_buffer_basic,lt_buffer_basic LIKE TABLE OF ls_buffer_basic.DATA: BEGIN OF ls_buffer_version,trno TYPE text12,date TYPE text12,author TYPE text12,description TYPE text36,END OF ls_buffer_version,lt_buffer_version LIKE TABLE OF ls_buffer_version.DATA: ls_buffer TYPE text72,lt_desc TYPE TABLE OF string,lv_date_version TYPE char10."彈出窗口,獲取基本信息(業(yè)務顧問、開發(fā)人員、TR號碼)CLEAR: zbc_pattern_zdp.zbc_pattern_zdp-fsid = ''.zbc_pattern_zdp-func_owner = ''.SPLIT sy-title AT space INTO TABLE DATA(lt_title_tab).DATA(lv_title_lines) = lines( lt_title_tab ).READ TABLE lt_title_tab INTO DATA(ls_title) INDEX lv_title_lines.IF sy-subrc EQ 0.zbc_pattern_zdp-object = ls_title. "更改對象ENDIF.LOOP AT lt_title_tab INTO ls_title.CASE ls_title.WHEN '報表'.EXIT.WHEN '函數(shù)構建器:更改'.EXIT.WHEN OTHERS.ENDCASE.ENDLOOP.CASE ls_title.WHEN '報表'.SELECT SINGLE textFROM trdirtWHERE name = @zbc_pattern_zdp-objectAND sprsl = @sy-languINTO @zbc_pattern_zdp-desc_func.WHEN '函數(shù)構建器:更改'.SELECT SINGLE stextFROM tftitWHERE spras = @sy-languAND funcname = @zbc_pattern_zdp-objectINTO @zbc_pattern_zdp-desc_func.WHEN OTHERS.ENDCASE.zbc_pattern_zdp-trno = ''.zbc_pattern_zdp-user_dev = sy-uname.zbc_pattern_zdp-date_version = sy-datum.zbc_pattern_zdp-desc_version = TEXT-001. "初始版本PERFORM frm_get_username_dev.CALL SCREEN 0001 STARTING AT 5 5ENDING AT 80 13.CHECK zbc_pattern_zdp-modified = abap_true.APPEND lc_spit_line TO buffer[]."開發(fā)對象基本信息lt_buffer_basic = VALUE #( BASE lt_buffer_basic( id = '* Object : ' value = zbc_pattern_zdp-object ) "基本信息( id = '* FS ID : ' value = zbc_pattern_zdp-fsid ) "( id = '* Functional Owner: ' value = zbc_pattern_zdp-func_owner ) ")."功能描述,如果內容太多,請換行,將描述拆分成25字符個長度的行PERFORM frm_split_text USING zbc_pattern_zdp-desc_func25CHANGING lt_desc.LOOP AT lt_desc INTO DATA(ls_desc).IF sy-tabix = 1.lt_buffer_basic = VALUE #( BASE lt_buffer_basic( id = '* Description :' value = ls_desc )).ELSE.lt_buffer_basic = VALUE #( BASE lt_buffer_basic( id = '* ' value = ls_desc ) ).ENDIF.ENDLOOP.LOOP AT lt_buffer_basic INTO ls_buffer_basic.CONCATENATE ls_buffer_basic-id ls_buffer_basic-value INTO ls_buffer RESPECTING BLANKS.APPEND ls_buffer TO buffer[].ENDLOOP.APPEND lc_spit_line TO buffer[]. "插入拆分行"變更版本信息lt_buffer_version = VALUE #( BASE lt_buffer_version(trno = 'TR No.'date = 'Date'author = 'Author'description = 'Description') )."變更日期,格式YYYY.MM.DDCLEAR: ls_buffer.lv_date_version = zbc_pattern_zdp-date_version+0(4) && '.' &&zbc_pattern_zdp-date_version+4(2) && '.' &&zbc_pattern_zdp-date_version+6(2) ."變更版本描述CLEAR: lt_desc.PERFORM frm_split_text USING zbc_pattern_zdp-desc_version16CHANGING lt_desc.LOOP AT lt_desc INTO ls_desc.IF sy-tabix = 1.lt_buffer_version = VALUE #( BASE lt_buffer_version(trno = zbc_pattern_zdp-trnodate = lv_date_versionauthor = zbc_pattern_zdp-username_devdescription = ls_desc) ).ELSE.lt_buffer_version = VALUE #( BASE lt_buffer_version ( description = ls_desc ) ).ENDIF.ENDLOOP.LOOP AT lt_buffer_version INTO ls_buffer_version.CONCATENATE '* ' ls_buffer_version-trnols_buffer_version-datels_buffer_version-authorls_buffer_version-descriptionINTO ls_buffer RESPECTING BLANKS.APPEND ls_buffer TO buffer[].ENDLOOP.ls_buffer = '*'.APPEND ls_buffer TO buffer[].APPEND lc_spit_line TO buffer[].ENDFUNCTION."根據(jù)自定義需求拆分文本 FORM frm_split_text USING uv_textuv_split_len TYPE iCHANGING ct_text TYPE STANDARD TABLE.DATA: lv_strlen TYPE i,lv_text TYPE string.CLEAR: lv_text.lv_text = uv_text.DO .lv_strlen = strlen( lv_text ).IF lv_strlen LE uv_split_len.APPEND lv_text TO ct_text .EXIT.ELSE.APPEND lv_text+0(uv_split_len) TO ct_text .SHIFT lv_text BY uv_split_len PLACES.CONDENSE lv_text.ENDIF.ENDDO. ENDFORM.總結
以上是生活随笔為你收集整理的ABAP动态模式(Dynamic Pattern)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ReentrantLock的Condit
- 下一篇: 山东省谷歌地球高程DEM等高线下载