網(wǎng)站首頁 編程語言 正文
先導(dǎo)
上一期講了在ABAP中,ALV的普通寫法,流程以及相關(guān)屬性,還講了基本DEMO ,但是在真正開發(fā)中,不會(huì)寫這么多的代碼.原則上是一切從簡. 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è)簡單的物料明細(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)等.
原文鏈接:https://juejin.cn/post/7140904450901671949
相關(guān)推薦
- 2022-10-04 golang中time包之時(shí)間間隔格式化和秒、毫秒、納秒等時(shí)間戳格式輸出的方法實(shí)例_Golang
- 2022-02-28 npm ERR! While resolving: undefined@undefined npm
- 2022-04-08 Swift實(shí)現(xiàn)簡單計(jì)算器_Swift
- 2022-09-25 CopyOnWriteArrayList的源碼分析
- 2022-07-22 React警告:Can‘t perform a React state update on an u
- 2022-06-27 Android利用ContentProvider初始化組件的踩坑記錄_Android
- 2022-12-29 c#?DataView.ToTable()方法?去除表的重復(fù)項(xiàng)問題_C#教程
- 2022-08-26 Pandas?DataFrame.drop()刪除數(shù)據(jù)的方法實(shí)例_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支