APAP|APAP ALV进阶写法及优化详解
目录
- 先导
- 流程搭建
- 流程讲解
- INITIALIZATION.
- at SELECTION-SCREEN!
- START-OF-SELECTION
- End-OF-SELECTION .
- 数据准备
- 选择屏幕
- INITIALIZATION.
- at SELECTION-SCREEN .
- START-OF-SELECTION.
- END-OF-SELECTION .
- 子程序和宏
- 总结
先导 上一期讲了在ABAP中,ALV的普通写法,流程以及相关属性,还讲了基本DEMO ,但是在真正开发中,不会写这么多的代码.原则上是一切从简. o( ̄︶ ̄)oo( ̄︶ ̄)o.今天讲下如何用少的代码,标准套路,实现ALV基本功能,满足开发生产需求.
流程搭建 万变不离其宗,首先书写的还是流程,比如让你写一个某某查询报表. 上来啥都不用想你先这么写
*数据准备*常规定义变量,内表结构,工作区,内表,包。。。。你的代码*系统变量准备*如layout,fieldcat 等 系统变量你的代码*选择屏幕你的代码*INITIALIZATION*at SELECTION-SCREEN ."START-OF-SELECTION"End-OF-SELECTION .“子例程及自定义宏
流程讲解
文章图片
INITIALIZATION.
文章图片
该事件在屏幕未显示之前执行,对程序设置值及屏幕元素进行初始化赋值。一般作用就是初始值设定,如选择屏幕的数据赋值,默认参数赋值等。
at SELECTION-SCREEN!
文章图片
1:选择屏幕事件,有很多参数,代表不同的扩展信息
2:在这个事件响应中,可以对屏幕字段进行有效性检验,控制屏幕元素的属性等。
START-OF-SELECTION
该事件在单击按钮后触发,一般是数据初始化,数据处理操作的地方
文章图片
End-OF-SELECTION .
该事件应用于所有数据选择处理完成,
即START-OF-SELECTION相关执行事件执行完成,
但输出屏幕还未显示之前 在实际的应用于一些执行结果的检验等。
一般做为ALV展示及用户操作按钮事件等。
演练
这里写一个简单的物料明细查询报表 ,知识点用到了,宏,循环,opensql,用户事件等内容。
数据准备
TABLES : MARA .*数据准备"定义结构TYPES : BEGIN OF gw_Data ,MATNR TYPE MATNR ,MEINS TYPE MEINS ,MAKTX TYPE MAKTX ,end of gw_Data ."定义工作区及内表data : gs_data TYPE gw_Data .data :gt_data TYPE table of gw_Data ."alv 数据*--------------------------------------------------------------------**通用ALV变量*--------------------------------------------------------------------*DATA: wa_layoutTYPE lvc_s_layo.DATA:wa_fieldcat TYPE lvc_s_fcat,gt_fieldcat TYPE lvc_t_fcat.DATA:gs_glay TYPElvc_s_glay.DATA : gv_error TYPE c.DATA : BS1 TYPE C.
选择屏幕
SELECTION-SCREEN BEGIN OF BLOCK BLOCKWITH FRAME TITLE TEXT-001 .PARAMETERSp_p1TYPE mara-matnr OBLIGATORY."料号SELECTION-SCREEN END OF BLOCK BLOCK .
INITIALIZATION.
INITIALIZATION.%_p_p1_%_app_%-text = '物料号'."设定选择屏幕初始化名称
at SELECTION-SCREEN .
at SELECTION-SCREEN .PERFORM check_auth ."权限检查
START-OF-SELECTION.
START-OF-SELECTION.PERFORM get_DAta."获取数据属性
END-OF-SELECTION .
End-OF-SELECTION .PERFORM diaplay_data."展示alv
子程序和宏 以下程序都使用新语法.不懂新语法后续会出相关内容
"获取数据子程序FORM get_DAta . select a~matnr,a~MEINS,b~maktxfrom 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 子程序 直接复制FORM diaplay_data . PERFORM set_alv_layout."样式设定PERFORM bulid_fieldcat."格式设定PERFORM call_alv_func."alv 函数ENDFORM."样式设定直接复制FORM set_alv_layout . CLEAR: wa_layout. wa_layout-zebra= 'X'."斑马线 wa_layout-cwidth_opt = 'X'."自动列宽ENDFORM."格式设定固定换数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.CASEwa_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 '物料号'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."刷新 固定复制FORM refresh_alv .DATA: lo_gridTYPE REF TO cl_gui_alv_grid,lw_stable TYPE lvc_s_stbl.CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'IMPORTINGe_grid = lo_grid.lw_stable-row = 'X'.lw_stable-col = 'X'.lo_grid->refresh_table_display(EXPORTINGis_stable = lw_stableEXCEPTIONSfinished= 1OTHERS= 2 ).ENDFORM."固定,只需要传内表就行FORM call_alv_func .gs_glay-edt_cll_cb = abap_true." 选中复选款,立刻触发data changed 事件CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'EXPORTINGi_callback_program= sy-repid"回调程序i_callback_pf_status_set = 'SET_PF_STATUS'i_callback_user_command= 'USER_COMMAND'i_grid_settings= gs_glayis_layout_lvc= wa_layoutit_fieldcat_lvc= gt_fieldcat"需要显示的内表的列i_save= 'A'TABLESt_outtab=lt_outdata"需要显示的数据EXCEPTIONSprogram_error= 1OTHERS= 2.IF sy-subrc <> 0.ENDIF.ENDFORM."staus工具栏 直接复制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."用户事件 ,这里没写. 但是如果设定函数双击会apap dump FORM user_commandUSING r_ucomm LIKE sy-ucommrs_selfield TYPE slis_selfield.CASE r_ucomm.*导入WHEN '&IMPLE'.ENDCASE.ENDFORM."权限检查,按照不同的情况调用不同的函数,这里需要更换.*&---------------------------------------------------------------------**& Form check_auth*&---------------------------------------------------------------------**& text*&---------------------------------------------------------------------**& -->p1text*& <--p2text*&---------------------------------------------------------------------*FORM check_auth ."selectSINGLE WERKS, KUNNRinto@data(ls_t001w) fromt001wWHERE WERKS= @p_p1. AUTHORITY-CHECK OBJECT 'M_MSEG_WMB'ID 'ACTVT'DUMMYID 'WERKS' FIELD p_p1 .IF sy-subrc <> 0.* Implement a suitable exception handling hereENDIF.ENDFORM.
以上就为一个alv 的写法 ,其中 70%以上的代码是固定的.
自己需要写的地方, 选择屏幕,获取数据 ,数据处理,用户事件,权限. 这四个地方.
总结 相比较上一个demo 这个例子代码少了很多, 但是比其他语言来讲还是太复杂了.
大部分还是套路,固定这么写,就可以. 主要还是在程序及逻辑操作上.
使用新语法可以减少很多不必要的操作,比如定义结构,内表,关联等.
【APAP|APAP ALV进阶写法及优化详解】以上就是APAP ALV进阶写法及优化详解的详细内容,更多关于APAP ALV写法优化的资料请关注脚本之家其它相关文章!
推荐阅读
- 向前端进军|【JavaScript-进阶】详解数据类型,内存分配,API元素对象获取
- JavaScript|【JavaScript 进阶教程】对象新增方法 defineProperty 与 keys 的说明与使用
- 高级前端进阶(六)
- postman|Postman进阶篇(一)-pre-request script入门及实现参数使用随机数
- [JS入门到进阶]|[JS入门到进阶] 手写解析URL参数的工具,并部署。用起来又快又爽!
- 某课网高级前端进阶必修(自主打造高扩展的业务组件库云pan)
- 高级前端进阶必修(自主打造高扩展的业务组件库含源码PPT)
- 连载2|连载2|吃货变投资人进阶(商业模式决定了投资价值(中))
- Maven|Maven进阶实战
- 浅谈|浅谈 SAP ABAP 系统里的 ALV 输出方式实现