• [SAP ABAP开发技术总结]ALV


    ALV开发必备!这里只贴一些粗略的东西,还有一篇关于ALV详细的文档,有时间再贴吧

    7.      ALV. 70

    7.1.           Layout重要字段... 70

    7.2.           FIELDCATALOG重要字段... 70

    7.3.           指定双击触发的FunCode. 71

    7.4.           相关函数... 71

    7.5.           重要参数接口... 71

    7.6.           让预置按钮回调I_CALLBACK_USER_COMMAND.. 72

    7.7.           颜色... 72

    7.8.           可编辑... 72

    7.9.           单元格数据修改后立即自动刷新... 73

    7.10.         数据有效性验证事件:data_changed. 73

    7.11.         金额、数字类型输入问题... 74

    7.12.         排序、分类汇总... 74

    7.13.         可打印的表头输出... 75

    7.14.         布局变式读取、切换、根据布局格式导出数据... 75

    7.15.         动态内表... 76

    8.      OO ALV. 77

    8.1.           相关类... 77

    8.2.           控制区域、容器、Grid关系... 77

    8.3.           CL_GUI_ALV_GRID重要方法... 77

    8.4.           set_table_for_first_dispaly()方法重要参数... 77

    8.5.           事件绑定、触发、回调处理... 77

    8.6.           CL_GUI_DOCKING_CONTAINER容器... 78

    8.7.           覆盖(拦截)预设按钮的功能FunCodeBEFORE_USER_COMMAND.. 78

    8.8.           数据改变事件data_changeddata_changed_finished. 79

    8.9.           单元格可编辑... 79

    7.   ALV

    7.1.  Layout重要字段

    zebra(1) type c, " striped pattern斑马线显示,颜色隔行交替显示
    edit(1) type c, " for grid only ALV是否可编辑,注意只对Grid模式有效,对List模式无效
    f2code like sy-ucomm, "gs_layout-f2code='&ETA'.
    双击时触发的Funcode
    这里为弹出详情窗口

    colwidth_optimize(1) type c, ALV网格(单元格)宽度设置为自动最优化,按输出内容宽度自动调整[??pt??ma?z]

    lights_fieldname type slis_fieldname," fieldname for exception列显示为红绿灯
    box_fieldname type slis_fieldname, " fieldname for checkbox
    指定数据内表中哪列以选择按钮形式显示(首列前可按下或弹上来的按钮),ALV最左上角会出现全选按钮image080

    key_hotspot(1) type c,        " keys as hotspot " K_KEYHOT设置关键字段是否是热点,可单击
    info_fieldname type slis_fieldname, " infofield for listoutput
    指定数据输出内表中哪列存储的是颜色,用来设置ALV
    每行数据的颜色

    7.2.  FIELDCATALOG重要字段

    [?k?t?l?ɡ]

    key(1) type c, " column with key-color指定字段是否是关键字段,如果是则单元格显示的颜色会不同,并会靠前显示

    col_pos like sy-cucol, " position of the column列的输出位置字段在表中第几列

    fieldname type slis_fieldname,"针对输出内表哪列进行设置,只有设置了的列才会显示,如果没有设置,则不会显示在ALV中。如果此字段是CURR金额(currency field) ,QUAN数量(Quantity field) 需要指定所参照的CUKY货币单位、UNIT字段名,需设置Cfieldname Ctabname Qfieldname Qtabname
    cfieldname type slis_fieldname, "field with currency unit金额字段所参照的货币单位字段名

    ctabname type slis_tabname,   " and table
    qfieldname type slis_fieldname, " field with quantity unit数量字段所参照的数量单位字段名
    qtabname type slis_tabname,   " and table

    just(1type c, " (R)ight (L)eft (C)ent.单元格中内容显示时对齐方式。不设置时按钮数据类型默认对齐方式来对齐
    lzero(1) type c, " leading zero
    X时输出前导零
    no_sign(1) type c, " write no-sign
    不显示数字符号
    no_zero(1) type c, " write no-zero
    只输出有意义的值,空值不输出。为X时全为零(如:00000)时不输出,所以不输出零时应该最好同时设置lzero = sapceno_zero = X,相反如果要输出,则应同时设置lzero = X no_zero = space
    fix_column(1) type c, " Spalte fixieren
    列固定不滚动,与Key属性相似,但颜色不会发生变化
    do_sum(1) type c, " sum up
    该列是否进行小计,需与gt_sort-subtot
    一起使用(即需要参考排序),否则只对整列进行一个合计


    seltext_l like dd03p-scrtext_l, " long key word标题字段显示的名称(长)
    seltext_m like dd03p-scrtext_m, " middle key word标题字段显示的名称(中)
    seltext_slike dd03p-scrtext_s, " short key word标题字段显示的名称(短)
    ddictxt(1) type c, " (S)hort (M)iddle (L)ong
    设置以长、中还是短名称来显示,取值分别为 SML。直接指定文本显示为长文本、中、还是短文本, 指定这个字段后则会固定下来,不会随着用户的宽度调整变化
    .

    如果是金额P小数(数量)类型时,需要对下面两个属性进行设置,否则,如果不设置时,在修改对应ALV单元格内容时,会自动将你所输入的数除100,即小数点提前两位;并且如果是数量类型,除了设置datatype外,inttype也需要进行设置,且为C
    datatype like dd03p-datatype,数据类型
    inttype like dd03p-inttype,
    内部
    类型

     

    ref_fieldname  like dd03p-fieldname,"如需单元格显示F4输入帮助,则需要指定字段所参照的表
    ref_tabname like dd03p-tabname,"如需单元格显示F4
    输入帮助,则需要指定字段所参照的表中的字段名

    另外,以上两个字段还可以解决ALV中形如参照VBELNMATNR词典类型的列导出(自带的导出功能)Excel时被截断的问题,具体请参照:ALV自带导出文件时字段数据末尾被截断问题

    CONVEXIT:设置转换规则,对应于Domain中的转换规则,也可用于解决导出Excel数据前导0被截断的问题

     

    edit(1) type c, " internal use only是否可编辑
    hotspot(1) type c, " hotspot
    设置字段内容下面是否有热点(有下划线,可点击,单击即可触发相应事件)

    7.3.  指定双击触发的FunCode

    gs_layout-f2code  = '&ETA'设置ALV数据行双击触发的Tcode,这里为弹出详情窗口

    7.4.  相关函数

    REUSE_ALV_GRID_DISPLAY

    REUSE_ALV_LIST_DISPLAY

    REUSE_ALV_GRID_DISPLAY_LVC

    REUSE_ALV_FIELDCATALOG_MERGE   [m?:d?] 混合, (使)合并

    7.5.  重要参数接口

    I_CALLBACK_PF_STATUS_SET  设置工具条

    I_CALLBACK_USER_COMMAND用户点击工具栏中自定义按钮、预置按钮(需通过IT_EVENT_EXIT参数指定预置FunCode才会回调指定的Form)、数据行双击、单元格热点等时,会回调此参数指定的Form

    IT_SORT排序、分类汇总

     

    I_SAVE保存表格布局:'X' 只能保存为全局标准变式,'U' 只能保存特定用户变式,'A'都可以保存,SPACE不能保存变式

    I_DEFAULT用户是否可以设置默认的布局变式(即是否可以将某个布局变式设置为默认的布局)

    IS_VARIANT指定布局变式

     

    IT_EVENTS事件回调,可以用来代替I_CALLBACK_USER_COMMAND参数

    IT_EVENT_EXIT 预置FunCode回调I_CALLBACK_USER_COMMAND指定的Form

     

    IS_LAYOUT

    IT_FIELDCAT

    T_OUTTAB需要显示的数据内表

    7.6.  让预置按钮回调I_CALLBACK_USER_COMMAND 

    IT_EVENT_EXIT:让预置按钮回调I_CALLBACK_USER_COMMAND 指定的Form。可以向IT_EVENT_EXIT参数内表填充需要被拦截的保留Funcode,及在是执行对应功能代码之前还是之后调用:

      DATA: event_exit TYPE slis_t_event_exit WITH HEADER LINE.
      event_exit
    -ucomm = '&OAD'."Funcode为点击AlV工具栏上的选择布局按钮image081所对应的FunCode,会被USER_COMMAND 指定的Form拦截
      event_exit
    -after = 'X'."在执行完预置功能代码之前还是之后调用
     
    APPEND event_exit.
      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

       
    EXPORTING
          i_callback_program
    = sy-repid
          it_fieldcat       
    =
    fieldcat[]
          i_callback_user_command
    = 'USER_COMMAND'

         
    IT_EVENT_EXIT = event_exit[]
       
    TABLES

          t_outtab          
    = gt_result.
    FORM user_command  USING r_ucomm LIKE sy-ucomm rs_selfield TYPE slis_selfield.

    ENDFORM.

    7.7.  颜色

    行颜色gs_layout-info_fieldname = 'COLOR'."指定数据内表中的哪一列用来作为行颜色的列,颜色值与下面列颜色取值格式是一样的,也是4位,不同的是此种方式下的颜色值是与显示数据内表存放在一起,而下面的颜色值则是与gt_fieldcat存放在一起
    列颜色gt_fieldcat-emphasize['emf?sa?z]强调) = 'C510'."此种方式下的颜色值定义为4位字符,各位含意:

    1位:固定取值为C

    2COL颜色值,取值为0~7

    3INT高亮,即颜色是否加深,取值为011表示加深显示

    4INV颜色是否反转,即颜色是作用在背景上,还是作用在输出字符上,取值上为01。为1时表示设置的是前景色,即输出字符本身的颜色(好像只有在第3位为0时才有效?)

    单元格颜色gs_layout-coltab_fieldname = 'COLORTABLE'."数据内表中哪列为颜色内表,颜色内表结构如下:

    image082 image083

    slis_color颜色结构类型各字体对应于上面颜色值串'C510'后三位,意义也是一样,只是没有第一位固定字符C

    7.8.  可编辑

    整体可编辑gs_layout-edit = 'X'.

    某列可编辑gt_fieldcat-edit = 'X'.

    单元格可编辑:只能使用REUSE_ALV_GRID_DISPLAY_LVC,并且还作以下一些设置:
    cellstab TYPE lvc_t_styl,"在输出内表中加上这一类型的列
    "先将所有单元格设置为可编辑状态
    gt_fieldcat
    -edit = 'X'.

    DATA: gt_cellstab TYPE lvc_t_styl WITH HEADER LINE.

      "再将原本可编辑的单元格切换到不可编辑样式。注:这里只是样式的切换,不能仅仅使用cl_gui_alv_grid=>mc_style_enabled来将单元格设置为可编辑状态,单元格真正是否可编辑是由fieldcat-editlayout-edit来决定的,而仅设置为cl_gui_alv_grid=>mc_style_enabled是不可编辑的
    gt_cellstab
    -style = cl_gui_alv_grid=>mc_style_disabled.

       APPEND gt_cellstab.
    gt_data
    -cellstab = gt_cellstab[].
    gs_layout
    -stylefname = 'CELLSTAB'."数据内表中哪列为可编辑信息内表

    7.9.  单元格数据修改后立即自动刷新

    单元格中的数据被修改后,将ALV单元格中的数据立即刷新到ABAP对应的内表中:

    法一通过对REUSE_ALV_GRID_DISPLAY函数参数i_grid_settings-edt_cll_cb进行设置:

    i_grid_settings-edt_cll_cb  = 'X' .
    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
        
    EXPORTINGi_grid_settings = i_grid_settings
    法二通过函数参数I_CALLBACK_USER_COMMAND指定的回调Form参数slis_selfield进行设置:

    FORM user_command USING ucomm LIKE sy-ucommselfield selfield TYPE slis_selfield.
     
     selfield-refresh = 'X'.
     
    CASE ucomm.
       
    WHEN 'UPDATE'.
         
    PERFORM frm_update.
     
    ENDCASE.
    ENDFORM.

    7.10.     数据有效性验证事件:data_changed

    通过REUSE_ALV_GRID_DISPLAY函数的it_events参数设置DATA_CHANGE事件及事件回调Form

      t_events-name = slis_ev_data_changed.
      t_events
    -form = 'ALV_DATA_CHANGED'.
     
    APPEND t_events.

      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
       
    EXPORTING

        
    it_events          = t_events[]

    "注:如果没有设置REUSE_ALV_GRID_DISPLAY 函数的参数i_grid_settings-edt_cll_cb  = 'X',在单元格数据被修改后,此Form不会自动调用(即不触发data_changed事件),直到点击了保存或刷新按钮后才会被调用,另外 cl_gui_alv_grid CHECK_CHANGED_DATA方法也会触发 data_changed事件;另外,如果是通过OO实现的ALV,要让DATA_CHANGE事件触发,则还需要注册回车或焦点失去动作,具体参看后面
    FORM alv_data_changed USING pel_data TYPE REF TO cl_alv_changed_data_protocol.
     
    DATA: l_name(20),ls_cells TYPE lvc_s_modi.
     
    FIELD-SYMBOLS <fs_value>.
     
    LOOP AT pel_data->mt_mod_cells INTO ls_cells."读取被修改了的单元格
       
    CLEAR gt_data.
       
    READ TABLE gt_data INDEX
    ls_cells-row_id."被修改了的单元格所对应输出内表行数据
       
    CONCATENATE 'GT_DATA-'
    ls_cells-fieldname INTO l_name. "读取被单元格所对应的输出内表中的相应列数据,注:读取出来是的单元格修改之前的数据
       
    ASSIGN (l_name) TO <fs_value>."<fs_value>即为修改前的值
        <fs_value>
    = ls_cells
    -value. "ls_cells-value单元格中修改后的新值?
       
    "实际上不需要此句来修改输出内表中的数据,因为只要在该Form中不弹出 E MSG,则该Form执行完后会也会自动更新输出内表
       
    "MODIFY gt_data INDEX ls_cells-row_id.
     
    ENDLOOP.

     

    注:如果是通过CL_GUI_ALV_GRID来实现ALV,则在ALV单元格中修改数据后,要在失去焦点或回车时自动触发DATA_CHANGE事件,则还需要通过CL_GUI_ALV_GRID类的REGISTER_EDIT_EVENT方法来设置发数据改变事件在何时触发,2 种方式:

    2  按回车触发: i_event_id = cl_gui_alv_grid=>mc_event_enter

    2  单元格失去焦点: i_event_id = cl_gui_alv_grid=>mc_event_modifies

    必须设置一种方式,要不然数据变化事件不会被触发事件

    7.11.     金额、数字类型输入问题

    对于货币与P类型小数(如数量)类型字段,需要对gt_fieldcat-datatype属性进行设置,才能将输入的数字保持原样大小,否则输入的数据会自动将小数点提前2位;对于数量类型,好像还需要对gt_fieldcat-INTTYPE属性进行设置才好使,并且只能设置为C类型:

        if &1 = 'CURR'.
         
    "对于金额字段,需要设置为
     CURR 数据库字典类型
          gt_fieldcat
    -datatype = 'CURR'.
       
    endif.
       
    if &1 = 'P'.
         
    "对于小数,需要设置为
     QUAN 数据库字典类型
          gt_fieldcat
    -datatype = 'QUAN'.
         
    "除此之外,还需要将inttype类型设置为C类型。另外,按理来说要设置为P类型的,但发现不行,QUAN类型映射为 C类型??
          gt_fieldcat
    -inttype = 'C'.
       
    endif.

    7.12.     排序、分类汇总

    "决定此列是否进行分类汇总与大汇总。注如果不设置gt_sort-subtot,则只有大汇总,不会进行分类小汇总
    gt_fieldcat
    -do_sum = 'X'. "设置了gt_fieldcat-do_sum就会有大汇总,分类小汇总要出现的前提之一也是必须要设置此属性,另外还需对gt_sort-subtot进行设置;如果此参数(gt_fieldcat-do_sum)不设置的话,则大汇总与小汇总都没有

     

    gt_sort-spos = '1'."排序的顺序,如果根据多个字段来排时,决定哪个先排
    gt_sort
    -fieldname = 'KEY1'.
    gt_sort
    -up = 'X'."升序,如果不指定排序(即gt_sort-upgt_sort-down都没设置时),默认为升序只要某字段参设置了gt_sort-down/up,则在展示时,排序以后垂直网格中相邻相同的单元格就会合并起来(即分类合并,如果要避免合并,请在布局中设置"no_merging""X"
    "
    是否需要以此字段进行分类小计(小计汇总)
    gt_sort
    -subtot= 'X'."是否需要以此字段进行分类合并、并进行小计(注:与本列是否参与排序无关系,只要设置此属性就进行分类合并且小计——但前提是要对gt_fieldcat-do_sum也进行了设置)
    APPEND gt_sort.
    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
       
    EXPORTING it_sort     = gt_sort[]

    image084

    7.13.     可打印的表头输出

      t_events-name = slis_ev_top_of_page.
      t_events
    -form = 'alv_top_of_page '.
     
    APPEND t_events.

     

      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
       
    EXPORTING
    it_events = t_events[]

     

    "页眉触发时所回调Form
    FORM alv_top_of_page.
     
    DATA:lr_rows TYPE REF TO cl_salv_form_layout_grid,
            lr_grid_rows
    LIKE lr_rows,
            lr_row
    TYPE REF TO cl_salv_form_layout_flow,
            lr_logo
    TYPE REF TO cl_salv_form_layout_logo.

     
    DATA: l_row TYPE i VALUE '1'.
     
    CREATE OBJECT lr_rows.
     
    CREATE OBJECT lr_logo.
    ...
    ENDFORM.

    7.14.     布局变式读取、切换、根据布局格式导出数据

    INITIALIZATION.
     
    CALL FUNCTION
    'REUSE_ALV_VARIANT_DEFAULT_GET'获取默认的布局 [?ve?ri:?nt] 
        EXPORTING
          i_save       
    = 'A'
       
    CHANGING
          cs_variant   
    =
    gx_variant
      p_varit
    = gx_variant-variant
    .

     

    AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_varit.
     
    CALL FUNCTION
    'REUSE_ALV_VARIANT_F4'选择布局
       
    EXPORTING
          is_variant   
    =
    g_variant
          i_save       
    =
    'A'

    p_varit = gx_variant-variant.

    START-OF-SELECTION.
     
    DATA: event_exit TYPE slis_t_event_exit WITH HEADER LINE.
      event_exit
    -ucomm = '&OAD'."Funcode为点击AlV工具栏上的选择布局按钮时 会被USER_COMMAND Form拦截
      event_exit
    -after = 'X'.
     
    APPEND event_exit.

     
    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
       
    EXPORTING     
          i_save                 
    = 'A'
          i_callback_user_command
    = 'USER_COMMAND1'
          it_event_exit          
    = event_exit[]
          is_variant             
    = g_variant "ALV
    展示时,所使用的布局变式名。如果不存在,按默认来

    FORM user_command1  USING r_ucomm LIKE sy-ucomm rs_selfield TYPE slis_selfield.
     
    CASE  r_ucomm.
       
    WHEN '&OAD'."
    当点击选择布局按钮时执行

         DATA l_ref1 TYPE REF TO cl_gui_alv_grid.
        
    CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'获取当前ALV所对应的
    OO Grid
             IMPORTING e_grid = l_ref1
    .

    l_ref1->get_variant( IMPORTING es_variant = l_variant )

      DATA:p_fieldcat_tab TYPE slis_t_fieldcat_alv.
         
    "当知道当前用户所选择的布局变式后,再通过函数 REUSE_ALV_VARIANT_SELECT 可以
         
    "得到布局变式所对应的布局具体信息,如哪些字段显示、字段显示的顺序如何等,当得到这些
         
    "布局信息后,可以用在用户在导出ALV数据到文件时使用,这样可以保持ALV显示的布局与
         
    "导出去的文件显示的哪些内容及字段顺序体质一致
         
    CALL FUNCTION
    'REUSE_ALV_VARIANT_SELECT'读取布局信息
           
    IMPORTING         
             
    "可以根据返回的p_fieldcat_tab,得到当前ALV所使用的布局变式所对应的Layout情况,如
             
    "ALV数据下载成文件时需要与当前Layout布局一样:输出相同的字段与顺序,可以根据
             
    "p_fieldcat_tab NO_OUT(控制是否输出)、COL_POS(控制顺序)来控制,文件表头可取
             
    "seltext_lseltext_mseltext_s。可用于导出文件布局
              et_fieldcat        
    = p_fieldcat_tab[]
           
    CHANGING

              cs_variant         
    = l_variant."传入的布局布局变式名
         
    """""""下面就是对 p_fieldcat_tab[] 内表字段结构进行分析及应用了
         
    ....
     
    ENDCASE.
    ENDFORM.

    7.15.     动态内表

    另外,在ALV中可以根据FieldCat来动态创建内表

    rt_fieldcatalog type lvc_t_fcat.
    CALL METHOD cl_alv_table_create=>create_dynamic_table [dai?n?mik]
      EXPORTING
        it_fieldcatalog 
    = rt_fieldcatalog[]
     
    IMPORTING

        ep_table       
    = g_table.

    8.   OO ALV

    8.1.  相关类

    CL_GUI_ALV_GRID

    CL_GUI_CUSTOM_CONTAINER

    CL_GUI_DOCKING_CONTAINER

    CL_GUI_SPLITTER_CONTAINER

    8.2.  控制区域、容器、Grid关系

    先在屏幕上绘制一个用户自定义控件区域,然后该用户以自定义控件区域为基础来创建CL_GUI_CUSTOM_CONTAINER容器实例,最后以此容器实例来创建CL_GUI_ALV_GRID实例

    8.3.  CL_GUI_ALV_GRID重要方法

    set_table_for_first_dispaly

    REFRESH_TABLE_DISPLAY

    IS_STABLE                                刷新的稳定性,就是滚动条保持不动

    I_SOFT_REFRESH          软刷新,如果设置了这个参数,临时给ALV创建的合计、排序、数据过滤都将保持不变。这个是非常有意义的,例如:当你没有修改数据内表里的数据,但因布局修改了想刷新ALV时可使用

    8.4.  set_table_for_first_dispaly()方法重要参数

    IS_VARIANT

    I_SAVE

    I_DEFAULT

    IS_LAYOUT

    IT_OUTTAB

    IT_FIELDCATALOG

    IT_SORT

    8.5.  事件绑定、触发、回调处理

    CLASS cl_event_handle DEFINITION. "定义事件处理类
     
    PUBLIC SECTION.
       
    "ALV工具栏初始化事件,如增加按钮并设定属性
       
    METHODS handle_toolbar
    FOR EVENT toolbar OF cl_gui_alv_grid
               
    IMPORTING e_object e_interactive.

       
    "ALV工具栏按钮点击事件
       
    METHODS handle_user_command
    FOR EVENT user_command OF cl_gui_alv_grid
               
    IMPORTING e_ucomm.

       
    "ALV表格双击事件
       
    METHODS handle_double_click
    FOR EVENT double_click OF cl_gui_alv_grid
               
    IMPORTING e_row e_column es_row_no.

    ENDCLASS.

     

    CLASS cl_event_handle IMPLEMENTATION."事件处理类实现部分
     
    METHOD handle_toolbar.
        gs_toolbar
    -function = 'B_SUM'."按钮的FunctionCode
        gs_toolbar
    -icon = icon_display."按钮图标
        gs_toolbar
    -text = '总行数'."按钮标签
        gs_toolbar
    -butn_type = '0'."定义按钮类型,0为标准按钮
       
    APPEND gs_toolbar TO e_object->mt_toolbar."添加按钮到工具栏中
     
    ENDMETHOD.

      METHOD handle_user_command.
       
    DATA: sum TYPE i .
       
    IF e_ucomm = 'B_SUM'.
        
    ...
       
    ENDIF.
     
    ENDMETHOD.
     
    METHOD  handle_double_click.
      
    ....
     
    ENDMETHOD.
    ENDCLASS.

    CREATE OBJECT container_r EXPORTING container_name = 'CONTAINER_1'."创建ALV容器对象
    CREATE OBJECT grid_r EXPORTING i_parent = container_r. "创建ALV控件
    CALL METHOD grid_r->set_table_for_first_displayCHANGING it_outtab = gt_sflight[].

    SET HANDLER :event_handle->handle_toolbar FOR grid_r, "注册处理器

    event_handle->handle_user_command FOR grid_r,
          event_handle
    ->handle_double_click FOR grid_r.

    CALL METHOD grid_r->set_toolbar_interactive. "调用此方法才能激活工具栏上增加的自定义按钮

    8.6.  CL_GUI_DOCKING_CONTAINER容器

    Docking容器最大特点是在代码中可以动态创建容器,不需要像创建自定义容器CL_GUI_CUSTOM_CONTAINER那样,在创建时需要将其绑定到一个预先绘制好的用户自定义控件区域中

    8.7.  覆盖(拦截)预设按钮的功能FunCodeBEFORE_USER_COMMAND

    before_user_command事件中截取标准的功能,完成其他功能,然后使用方法set_user_command将功能代码修改为空(如何拦截事件,则参考事件绑定、触发、回调处理章节)

    FORM handle_before_user_command USING i_ucomm TYPE syucomm .
     
    CASE e_ucomm .
       
    WHEN '&INFO' .
         
    CALL FUNCTION 'ZSFLIGHT_PROG_INFO'.
         
    CALL METHOD gr_alvgrid
    ->set_user_commandEXPORTING i_ucomm = space.
     
    ENDCASE .
    ENDFORM .

    8.8.  数据改变事件data_changeddata_changed_finished

    Alv grid有两个事件:data_changedata_changed_finished.第一个事件在可编辑字段的数据发生变化时触发,可用来检查数据的输入正确性,第二个事件是当数据修改完成后触发

    如果数据没有被修改,当失去焦点或回车时,那么它不会走data change,而是直接触发data change finish事件

    可以通过CL_GUI_ALV_GRID类的REGISTER_EDIT_EVENT方法来设置在失去焦点回车时,触发数据改变事件:

    2  按回车触发: i_event_id = cl_gui_alv_grid=>mc_event_enter

    2  单元格失去焦点: i_event_id = cl_gui_alv_grid=>mc_event_modifies

    必须设置一种方式,要不然数据变化事件不会被触发事件

    然后注册CL_GUI_ALV_GRIDdata_changeddata_changed_finished事件,实现事件处理器方法,在数据发生改变时就会触发这两上事件

    8.9.  单元格可编辑

    与非OO ALV是一样的,请参照

  • 相关阅读:
    高级语言是面向用户的
    汇编语言指令是机器指令的符号化
    程序设计语言具有心理工程及技术
    语言的种类成分
    程序设计方法和过程
    程序设计的基本概念
    结构化程序设计与非结构化程序设计之分
    常见语言计算机语言
    语言的基础是一组记号和一组规则
    面向对象的基本概念
  • 原文地址:https://www.cnblogs.com/jiangzhengjun/p/4264738.html
Copyright © 2020-2023  润新知