APAP?ALV進(jìn)階寫法及優(yōu)化詳解
先導(dǎo)
上一期講了在ABAP中,ALV的普通寫法,流程以及相關(guān)屬性,還講了基本DEMO ,但是在真正開發(fā)中,不會(huì)寫這么多的代碼.原則上是一切從簡(jiǎn). o( ̄︶ ̄)oo( ̄︶ ̄)o.今天講下如何用少的代碼,標(biāo)準(zhǔn)套路,實(shí)現(xiàn)ALV基本功能,滿足開發(fā)生產(chǎn)需求.
流程搭建
萬變不離其宗,首先書寫的還是流程,比如讓你寫一個(gè)某某查詢報(bào)表. 上來啥都不用想你先這么寫
*數(shù)據(jù)準(zhǔn)備 *常規(guī)定義變量,內(nèi)表結(jié)構(gòu),工作區(qū),內(nèi)表,包。。。。 你的代碼 *系統(tǒng)變量準(zhǔn)備 *如layout,fieldcat 等 系統(tǒng)變量 你的代碼 *選擇屏幕 你的代碼 *INITIALIZATION *at SELECTION-SCREEN . "START-OF-SELECTION "End-OF-SELECTION . “子例程及自定義宏
流程講解
INITIALIZATION.
該事件在屏幕未顯示之前執(zhí)行,對(duì)程序設(shè)置值及屏幕元素進(jìn)行初始化賦值。一般作用就是初始值設(shè)定,如選擇屏幕的數(shù)據(jù)賦值,默認(rèn)參數(shù)賦值等。
at SELECTION-SCREEN!
1:選擇屏幕事件,有很多參數(shù),代表不同的擴(kuò)展信息
2:在這個(gè)事件響應(yīng)中,可以對(duì)屏幕字段進(jìn)行有效性檢驗(yàn),控制屏幕元素的屬性等。
START-OF-SELECTION
該事件在單擊按鈕后觸發(fā),一般是數(shù)據(jù)初始化,數(shù)據(jù)處理操作的地方
End-OF-SELECTION .
該事件應(yīng)用于所有數(shù)據(jù)選擇處理完成,
即START-OF-SELECTION相關(guān)執(zhí)行事件執(zhí)行完成,
但輸出屏幕還未顯示之前 在實(shí)際的應(yīng)用于一些執(zhí)行結(jié)果的檢驗(yàn)等。
一般做為ALV展示及用戶操作按鈕事件等。
演練
這里寫一個(gè)簡(jiǎn)單的物料明細(xì)查詢報(bào)表 ,知識(shí)點(diǎn)用到了,宏,循環(huán),opensql,用戶事件等內(nèi)容。
數(shù)據(jù)準(zhǔn)備
TABLES : MARA . *數(shù)據(jù)準(zhǔn)備 "定義結(jié)構(gòu) TYPES : BEGIN OF gw_Data , MATNR TYPE MATNR , MEINS TYPE MEINS , MAKTX TYPE MAKTX , end of gw_Data . "定義工作區(qū)及內(nèi)表 data : gs_data TYPE gw_Data . data :gt_data TYPE table of gw_Data . "alv 數(shù)據(jù) *--------------------------------------------------------------------* * 通用ALV變量 *--------------------------------------------------------------------* DATA: wa_layout TYPE lvc_s_layo. DATA:wa_fieldcat TYPE lvc_s_fcat, gt_fieldcat TYPE lvc_t_fcat. DATA:gs_glay TYPE lvc_s_glay. DATA : gv_error TYPE c. DATA : BS1 TYPE C.
選擇屏幕
SELECTION-SCREEN BEGIN OF BLOCK BLOCK WITH FRAME TITLE TEXT-001 . PARAMETERS p_p1 TYPE mara-matnr OBLIGATORY. "料號(hào) SELECTION-SCREEN END OF BLOCK BLOCK .
INITIALIZATION .
INITIALIZATION . %_p_p1_%_app_%-text = '物料號(hào)'. "設(shè)定選擇屏幕初始化名稱
at SELECTION-SCREEN .
at SELECTION-SCREEN . PERFORM check_auth . "權(quán)限檢查
START-OF-SELECTION .
START-OF-SELECTION . PERFORM get_DAta . "獲取數(shù)據(jù)屬性
END-OF-SELECTION .
End-OF-SELECTION . PERFORM diaplay_data. "展示alv
子程序和宏
以下程序都使用新語法.不懂新語法后續(xù)會(huì)出相關(guān)內(nèi)容
"獲取數(shù)據(jù)子程序 FORM get_DAta . select a~matnr,a~MEINS,b~maktx from mara as a inner join makt as b on a~matnr = b~MATNR where a~ZMATNR = @p_p1 into table @data(lt_outdata) . ENDFORM . *展示alv 子程序 直接復(fù)制 FORM diaplay_data . PERFORM set_alv_layout. "樣式設(shè)定 PERFORM bulid_fieldcat. "格式設(shè)定 PERFORM call_alv_func. "alv 函數(shù) ENDFORM. "樣式設(shè)定 直接復(fù)制 FORM set_alv_layout . CLEAR: wa_layout. wa_layout-zebra = 'X'. "斑馬線 wa_layout-cwidth_opt = 'X'. "自動(dòng)列寬 ENDFORM. "格式設(shè)定 固定換數(shù) FORM bulid_fieldcat . DEFINE add_col. * ADD 1 TO pos. * lw_fieldcat-col_pos = pos. wa_fieldcat-fieldname = &1. wa_fieldcat-ref_field = &2. wa_fieldcat-ref_table = &3. wa_fieldcat-scrtext_l = &4. wa_fieldcat-outputlen = &5. wa_fieldcat-no_zero = &6. wa_fieldcat-edit = &7. wa_fieldcat-edit_mask = &8. wa_fieldcat-key = &9. CASE wa_fieldcat-fieldname. WHEN 'slbox'. wa_fieldcat-checkbox = 'X' . wa_fieldcat-edit = 'X' . wa_fieldcat-edit_mask = 'X'. WHEN OTHERS. ENDCASE . APPEND wa_fieldcat TO gt_fieldcat. CLEAR : wa_fieldcat. END-OF-DEFINITION. REFRESH: gt_fieldcat. "add_col 'matnr' space space '物料號(hào)' space space space space space. add_col 'MEINS' space space '單位' space space space space space. add_col 'maktx' space space '物料名' space space space space space. ENDFORM. "刷新 固定復(fù)制 FORM refresh_alv . DATA: lo_grid TYPE REF TO cl_gui_alv_grid, lw_stable TYPE lvc_s_stbl. CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR' IMPORTING e_grid = lo_grid. lw_stable-row = 'X'. lw_stable-col = 'X'. lo_grid->refresh_table_display( EXPORTING is_stable = lw_stable EXCEPTIONS finished = 1 OTHERS = 2 ). ENDFORM. "固定,只需要傳內(nèi)表就行 FORM call_alv_func . gs_glay-edt_cll_cb = abap_true. " 選中復(fù)選款,立刻觸發(fā)data changed 事件 CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC' EXPORTING i_callback_program = sy-repid "回調(diào)程序 i_callback_pf_status_set = 'SET_PF_STATUS' i_callback_user_command = 'USER_COMMAND' i_grid_settings = gs_glay is_layout_lvc = wa_layout it_fieldcat_lvc = gt_fieldcat "需要顯示的內(nèi)表的列 i_save = 'A' TABLES t_outtab = lt_outdata "需要顯示的數(shù)據(jù) EXCEPTIONS program_error = 1 OTHERS = 2. IF sy-subrc <> 0. ENDIF. ENDFORM. "staus 工具欄 直接復(fù)制 FORM set_pf_status USING rt_extab TYPE slis_t_extab. DATA : lw_tab LIKE LINE OF rt_extab. REFRESH rt_extab. SET PF-STATUS 'STD' EXCLUDING rt_extab. ENDFORM. "用戶事件 ,這里沒寫. 但是如果設(shè)定函數(shù)雙擊會(huì)apap dump FORM user_command USING r_ucomm LIKE sy-ucomm rs_selfield TYPE slis_selfield. CASE r_ucomm. * 導(dǎo)入 WHEN '&IMPLE'. ENDCASE. ENDFORM. "權(quán)限檢查,按照不同的情況調(diào)用不同的函數(shù),這里需要更換. *&---------------------------------------------------------------------* *& Form check_auth *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> p1 text *& <-- p2 text *&---------------------------------------------------------------------* FORM check_auth . "select SINGLE WERKS, KUNNR into @data(ls_t001w) from t001w WHERE WERKS = @p_p1 . AUTHORITY-CHECK OBJECT 'M_MSEG_WMB' ID 'ACTVT' DUMMY ID 'WERKS' FIELD p_p1 . IF sy-subrc <> 0. * Implement a suitable exception handling here ENDIF. ENDFORM.
以上就為一個(gè)alv 的寫法 ,其中 70%以上的代碼是固定的.
自己需要寫的地方, 選擇屏幕,獲取數(shù)據(jù) ,數(shù)據(jù)處理,用戶事件,權(quán)限. 這四個(gè)地方.
總結(jié)
相比較上一個(gè)demo 這個(gè)例子代碼少了很多, 但是比其他語言來講還是太復(fù)雜了.
大部分還是套路,固定這么寫,就可以. 主要還是在程序及邏輯操作上.
使用新語法可以減少很多不必要的操作,比如定義結(jié)構(gòu),內(nèi)表,關(guān)聯(lián)等.
以上就是APAP ALV進(jìn)階寫法及優(yōu)化詳解的詳細(xì)內(nèi)容,更多關(guān)于APAP ALV寫法優(yōu)化的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Xshell?Plus?6?下載及安裝使用圖文教程(解壓即可使用)
本文分享一波?Xshell?Plus?6?破解版,親測(cè)有效,因?yàn)槭蔷G色無安裝版本的,下載下來后,解壓即可使用,就可以直接使用了,對(duì)Xshell?Plus?6?破解下載圖文教程感興趣的朋友一起看看吧2022-07-07基于 Dubbo Admin 臨時(shí)踢除問題服務(wù)實(shí)例步驟
服務(wù)在線上運(yùn)行的過程中,難免遇到某些節(jié)點(diǎn)有問題,為了不影響整體服務(wù)的正常運(yùn)行,需要臨時(shí)下線問題的服務(wù)實(shí)例,這篇文章主要介紹了基于 Dubbo Admin 臨時(shí)踢除問題服務(wù)實(shí)例,需要的朋友可以參考下2022-12-12Elasticsearch索引的分片分配Recovery使用講解
這篇文章主要為大家介紹了Elasticsearch索引的分片分配Recovery使用講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-04-04MobaXterm遠(yuǎn)程連接Linux服務(wù)器(Ubuntu)圖文教程
這篇文章主要為大家介紹了MobaXterm遠(yuǎn)程連接Linux服務(wù)器(Ubuntu)的相關(guān)教程,文中通過圖文進(jìn)行了詳細(xì)的總結(jié),需要的小伙伴可以收藏下2023-08-08微信小程序(應(yīng)用號(hào))組件詳細(xì)介紹
這篇文章主要介紹了微信小程序(應(yīng)用號(hào))組件詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下2016-09-09