记录我学习ALV的过程(一)
嗯,大家好。很可能这是个连载。也可能只有这一期,目的是记录一下我学习ALV的过程,与各位分享,至于写的对与不对的,请各位指教。
什么是ALV:ABAP List Viewer。(网上还有管它叫SAP List Viewer的,我觉得叫ABAP List Viewer更符合ALV的缩写,不纠结)
怎么学习ALV
本着照猫画虎的原则,看现有系统里现有的,其他大神开发的ALV都是怎么写的,随便找了个例子,整理出了如下的结构。
REPORT ztest . * 定义类型池 * slis是一个类型组,又叫类型池。 * 翻译了一下它的简短描述是这么写的:“通用列表块的全局类型”。 * 后面会遇到好多slis开头的类型,随着遇到随着看吧。 *----------------------------------------------------------------------* * 定义工作区,据说有些公司不再建议用工作区。 * 需要把哪些表定义成工作区,是要看具体的逻辑需要,这里不举例。 *----------------------------------------------------------------------* * 声明变量,先把ALV需要用的变量声明好。 DATA: wa_fieldcat TYPE lvc_s_fcat. "相当于工作区 DATA: gs_result *----------------------------------------------------------------------* * 字段符号,类似C语言里的指针。 * 有些ALV的写法里会用到,先抄过来再说。 *----------------------------------------------------------------------* * 定义内表 *----------------------------------------------------------------------* * 定义选择屏 *----------------------------------------------------------------------* * 初始化,我看的这个例子里,初始化的函数是空的。 * 先把结构抄过来。 *----------------------------------------------------------------------* * at selection-screen的用法_点点也存在?的博客-CSDN博客 *----------------------------------------------------------------------* * 对应的PAI,打断点测试发现,这应该是在选择屏中按F8执行的开始。 * abap中 PBO PAI的意思_canaan_cs的博客-CSDN博客 *----------------------------------------------------------------------* * START-OF-SELECTION中的语句执行完之后,在屏幕输出之前,所执行的内容。 * 这里用它定义关于ALV输出的配置。 PERFORM frm_display_list. *&---------------------------------------------------------------------* *&---------------------------------------------------------------------* *&---------------------------------------------------------------------* *&---------------------------------------------------------------------* ENDFORM. *&---------------------------------------------------------------------* PERFORM frm_fill_layout. PERFORM frm_fill_field USING : CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC' ENDFORM. *&---------------------------------------------------------------------* * DATA: wa_layout TYPE lvc_s_layo. "负责整个ALV的全局属性 * LVC_S_LAYO:ALV 控制: 布局结构。 * 是REUSE_ALV_GRID_DISPLAY_LVC的一个参数 *&---------------------------------------------------------------------* * DATA: it_fieldcat TYPE lvc_t_fcat. "存放列名的内表 * 是REUSE_ALV_GRID_DISPLAY_LVC的一个参数 |
为了测试这个模板的可用性,我去写了一个例子,仅实现了去makt表里查数据并展示到ALV中的功能。以下是直接复制来的代码。
REPORT ztest003. *----------------------------------------------------------------------* * Declaration for Type-Pools * 定义类型池 * slis是一个类型组,又叫类型池。 * 翻译了一下它的简短描述是这么写的:“通用列表块的全局类型”。 * 后面会遇到好多slis开头的类型,随着遇到随着看吧。 *----------------------------------------------------------------------* TYPE-POOLS: slis. *----------------------------------------------------------------------* * Declaration for Tables * 定义工作区,据说有些公司不再建议用工作区。 * 需要把哪些表定义成工作区,是要看具体的逻辑需要,这里不举例。 *----------------------------------------------------------------------* *----------------------------------------------------------------------* * Declaration for Variables * 声明变量,先把ALV需要用的变量声明好。 *----------------------------------------------------------------------* DATA: wa_fieldcat TYPE lvc_s_fcat. "相当于工作区 DATA: it_fieldcat TYPE lvc_t_fcat. "存放列名的内表 DATA: wa_layout TYPE lvc_s_layo. "负责整个ALV的全局属性 DATA: wa_sort_lvc TYPE lvc_s_sort. "排序结构 DATA: it_sort_lvc TYPE lvc_t_sort. "排序表 DATA: wa_excluding TYPE slis_t_extab, "隐藏按钮 it_excluding TYPE slis_extab. *----------------------------------------------------------------------* * SYMBOLS * 字段符号,类似C语言里的指针。 * 有些ALV的写法里会用到,先抄过来再说。 *----------------------------------------------------------------------* FIELD-SYMBOLS: <dyn_table> TYPE table, <dyn_wa> TYPE any, <fs> TYPE any, <dyn_field> TYPE any. *----------------------------------------------------------------------* * Declaration for Internal Tables * 定义内表 *----------------------------------------------------------------------* TYPES: BEGIN OF ty_result, matnr TYPE matnr, maktx TYPE maktx, END OF ty_result. DATA: gs_result TYPE ty_result. DATA: gt_result TYPE STANDARD TABLE OF ty_result. *----------------------------------------------------------------------* * Declaration for Selection-screen * 定义选择屏 *----------------------------------------------------------------------* DATA: lv_matnr TYPE matnr. SELECTION-SCREEN BEGIN OF BLOCK b1. SELECT-OPTIONS: s_matnr FOR lv_matnr. SELECTION-SCREEN END OF BLOCK b1. *----------------------------------------------------------------------* * INITIALIZATION * 初始化,我看的这个例子里,初始化的函数是空的。 * 先把结构抄过来。 *----------------------------------------------------------------------* INITIALIZATION. PERFORM frm_init_screen. *----------------------------------------------------------------------* * AT SELECTION-SCREEN * at selection-screen的用法_点点也存在?的博客-CSDN博客 *----------------------------------------------------------------------* AT SELECTION-SCREEN. PERFORM frm_check_validation. PERFORM frm_authorithy_check. *----------------------------------------------------------------------* * START-OF-SELECTION * 对应的PAI,打断点测试发现,这应该是在选择屏中按F8执行的开始。 * abap中 PBO PAI的意思_canaan_cs的博客-CSDN博客 *----------------------------------------------------------------------* START-OF-SELECTION. PERFORM frm_get_data. *----------------------------------------------------------------------* * END-OF-SELECTION * START-OF-SELECTION中的语句执行完之后,在屏幕输出之前,所执行的内容。 * 这里用它定义关于ALV输出的配置。 *----------------------------------------------------------------------* END-OF-SELECTION. PERFORM frm_display_list. *&---------------------------------------------------------------------* *& Form FRM_INIT_SCREEN *&---------------------------------------------------------------------* * 我看的这个ALV里就是什么也没写 *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM frm_init_screen . ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_CHECK_VALIDATION *&---------------------------------------------------------------------* * 初始化状态,按自己的需求写逻辑。初始化的是选择屏里元素的状态。 *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM frm_check_validation . ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_AUTHORITHY_CHECK *&---------------------------------------------------------------------* * 我看的这个ALV里就是什么也没写 *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM frm_authorithy_check . ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_GET_DATA *&---------------------------------------------------------------------* * 获取数据的方法。 *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM frm_get_data. SELECT * FROM makt INTO CORRESPONDING FIELDS OF TABLE gt_result WHERE matnr IN s_matnr. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_DISPLAY_LIST1 *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM frm_display_list. PERFORM frm_fill_layout. PERFORM frm_fill_field USING : 'MATNR' '物料号', 'MAKTX' '物料描述'. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC' EXPORTING is_layout_lvc = wa_layout i_callback_program = sy-repid it_fieldcat_lvc = it_fieldcat[] i_save = 'U' i_grid_title = '物料信息' TABLES t_outtab = gt_result EXCEPTIONS program_error = 1 OTHERS = 2. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_FILL_LAYOUT *&---------------------------------------------------------------------* * 设置wa_layout * DATA: wa_layout TYPE lvc_s_layo. "负责整个ALV的全局属性 * LVC_S_LAYO:ALV 控制: 布局结构。 * 是REUSE_ALV_GRID_DISPLAY_LVC的一个参数 *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM frm_fill_layout . CLEAR wa_layout. wa_layout-zebra = 'X'. "ALV颜色交替 wa_layout-cwidth_opt = 'X'. "自动优化列宽 wa_layout-sel_mode = 'A'. "选择模式 "A"在最左端有选择按钮 wa_layout-info_fname = 'COLOR'. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_FILL_FIELD *&---------------------------------------------------------------------* * 在it_fieldcat插入列的信息。 * DATA: it_fieldcat TYPE lvc_t_fcat. "存放列名的内表 * 是REUSE_ALV_GRID_DISPLAY_LVC的一个参数 *----------------------------------------------------------------------* * -->P_0571 text * -->P_0572 text *----------------------------------------------------------------------* FORM frm_fill_field USING name description. CLEAR wa_fieldcat. wa_fieldcat-fieldname = name. wa_fieldcat-scrtext_l = description. wa_fieldcat-scrtext_m = description. wa_fieldcat-scrtext_s = description. APPEND wa_fieldcat TO it_fieldcat. ENDFORM. |
文章来自于网络,如果侵犯了您的权益,请联系站长删除!