ABAP学习笔记之——第十一章:Function ALV

一、Function ALV

        Function ALV 从名字中可以推出,是由 Function(函数)形式提供,因此开发者只需适当使用以有的功能即可。没有必要创建屏幕也没有必要一一写出代码,因此可认为是生产性比较高的方法。

例:

*function ALV  GRID和LIST报表输出
DATA gt_itab TYPE TABLE OF sflight.

SELECT * FROM sflight INTO TABLE gt_itab.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'    "grid报表
*CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'    "list报表
  EXPORTING
    i_structure_name = 'SFLIGHT'
  TABLES
    t_outtab         = gt_itab.

二、详细了解FUNCTION ALV函数

1、reuse_alv_grid_display

(1)I_CALLBACK_PROGRAM参数

调用ALV函数返回的程序

(2)I_CALLBACK_PF_STATUS_SET参数

设置ALV程序内的STATUS

(3)I_CALLBACK_USER_COMMAND参数

实现ALV程序的按钮功能,FORM语句名

(4)I_STRUCTURE_NAME参数

设置ALV结构:结构体、表

(5)I_GRID_TITLE参数

ALV GRID的表头标题

(6)I_GRID_SETTINGS参数

设置ALV GRID(编辑时立即调用事件等)

(7)IS_LAYOUT参数

设置ALV布局

(8)IT_FIELDCAT参数

设置ALV的构成项目字段(字段目录)

 (9)IT_EXCLUDING参数

删除ALV基本按钮的项目

(10)IT_SORT参数

显示ALV 时设置基本排序字段

(11)IT_FILTER参数

显示ALV 时设置过滤字段

(12)I_SAVE参数

保存ALV布局的选项设置成保存

(13)IS_VARIANT参数

ALV布局后调用的模式定义ALV事件

(14)T_OUTTAB参数

ALV上要输出的数据

 三、练习

TYPE-POOLS:slis.

DATA:gt_fieldcat TYPE slis_t_fieldcat_alv,
     gs_fieldcat TYPE slis_fieldcat_alv.

DATA:gt_events TYPE slis_t_event,
     gs_event  TYPE slis_alv_event.

DATA:gs_layout TYPE slis_layout_alv,
     gs_glay   TYPE lvc_s_glay.

*为了在内表中追加复选框定义结构体类型
TYPES BEGIN OF t_line.
INCLUDE STRUCTURE sflight.
TYPES checkbox TYPE c.
TYPES END OF t_line.

*定义参照结构体类型的内表
DATA gt_itab TYPE TABLE OF t_line WITH HEADER LINE.

SELECT * FROM sflight INTO CORRESPONDING FIELDS OF TABLE gt_itab.

MOVE 'PF_STATUS_SET' TO gs_event-name.
MOVE 'ALV_STATUS_SET' TO gs_event-form.
APPEND gs_event TO gt_events.

MOVE 'DATA_CHANGED' TO gs_event-name.
MOVE 'ALV_DATA_CHANGED' TO gs_event-form.
APPEND gs_event TO gt_events.

*字段目录中追加复选框字段。设置为复选框checkbox属性设置成X,编辑模式edit属性设置成X
CLEAR: gs_fieldcat,gt_fieldcat.
gs_fieldcat-col_pos = 1.
gs_fieldcat-fieldname = 'CHECKBOX'.
gs_fieldcat-checkbox = 'X'.
gs_fieldcat-edit = 'X'.
gs_fieldcat-seltext_m = 'Sel'.
APPEND gs_fieldcat TO gt_fieldcat.

*构造其他必要字段目录
CLEAR gs_fieldcat.
gs_fieldcat-col_pos = 2.
gs_fieldcat-fieldname = 'CARRID'.
gs_fieldcat-checkbox = 'Airline Code'.
APPEND gs_fieldcat TO gt_fieldcat.

CLEAR gs_fieldcat.
gs_fieldcat-col_pos = 3.
gs_fieldcat-fieldname = 'CONNID'.
gs_fieldcat-checkbox = 'Connection Number'.
APPEND gs_fieldcat TO gt_fieldcat.

CLEAR gs_fieldcat.
gs_fieldcat-col_pos = 4.
gs_fieldcat-fieldname = 'FLDATE'.
gs_fieldcat-checkbox = '起飞日期'.
APPEND gs_fieldcat TO gt_fieldcat.

gs_glay-edt_cll_cb = 'X'.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
  EXPORTING
    i_callback_program      = sy-cprog
    i_grid_settings         = gs_glay
    it_fieldcat             = gt_fieldcat
    it_events               = gt_events
    is_layout               = gs_layout
    i_callback_user_command = 'ALV_USER_COMMAND'
  TABLES
    t_outtab                = gt_itab.

FORM alv_user_command USING p_ucomm LIKE sy-ucomm
      p_selfield TYPE slis_selfield.
  CASE p_ucomm.
    WHEN '&IC1'.
      READ TABLE gt_itab INDEX p_selfield-tabindex.
      gt_itab-checkbox = 'X'.
      MODIFY gt_itab INDEX p_selfield-tabindex.
    WHEN 'SAVE'.
      MODIFY sflight FROM TABLE gt_itab.
      IF sy-subrc EQ 0.
        COMMIT WORK.
      ELSE.
        ROLLBACK WORK.

      ENDIF.
    WHEN OTHERS.
  ENDCASE.
ENDFORM.

FORM alv_status_set USING pt_extab TYPE slis_t_extab.
  CLEAR:pt_extab[].
  SET PF-STATUS 'STANDARD_FULLSCREEN'.LSLVC_FULLSCREENEVT
ENDFORM.


FORM alc_data_changed USING pcl_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 pcl_data->mt_mod_cells INTO ls_cells.
    CLEAR gt_itab.
    READ TABLE gt_itab INDEX ls_cells-row_id.

    CONCATENATE 'GT_ITAB-' ls_cells-fieldname INTO l_name.
    ASSIGN (l_name) TO <fs_value>.

    <fs_value> = ls_cells-value.
    MODIFY gt_itab INDEX  ls_cells-row_id.


  ENDLOOP.
ENDFORM.

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ALV 中添加状态栏下拉框按钮的实现步骤如下: 1. 在函数模块中使用 FM REUSE_ALV_GRID_DISPLAY 调用 ALV 控件。 2. 在该函数模块中使用 FM REUSE_ALV_COMMENTARY_WRITE 向状态栏添加注释。 3. 在注释中添加 DROPDOWN_LIST ,并设置其属性和选项。 4. 在用户选择下拉列表选项时,处理用户选项并更新 ALV 数据。 以下是示例 ABAP 代码: ``` FUNCTION z_alv_dropdown. DATA: lt_fieldcat TYPE lvc_t_fcat, lt_layout TYPE lvc_s_layo, lt_sflight TYPE TABLE OF sflight, lt_ddl TYPE ddshretval. FIELD-SYMBOLS: <fs_sflight> TYPE sflight. *-- 1. 调用 ALV CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_callback_program = sy-repid i_callback_top_of_page = 'TOP-OF-PAGE' it_fieldcat = lt_fieldcat i_save = 'A' TABLES t_outtab = lt_sflight CHANGING it_layout = lt_layout. *-- 2. 添加注释和下拉框 CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE' EXPORTING it_list_commentary = VALUE #( ( comment = 'Select Status:' ) ) i_logo = ' ' i_logo2 = ' ' i_type = 'S' i_width = 20. CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE' EXPORTING it_list_commentary = VALUE #( ( comment = ' ' ) ) i_logo = ' ' i_logo2 = ' ' i_type = 'S' i_width = 20. CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE' EXPORTING it_list_commentary = VALUE #( ( comment = 'DROPDOWN_LIST' ) ) i_logo = ' ' i_logo2 = ' ' i_type = 'S' i_width = 20. *-- 3. 设置下拉框选项 CALL FUNCTION 'DD_DOMVALUES_GET' EXPORTING domname = 'STATUS' TABLES ddshretval = lt_ddl. *-- 4. 处理用户选项并更新数据 LOOP AT lt_sflight ASSIGNING <fs_sflight>. IF sy-tabix > lt_layout-top_lines. IF <fs_sflight>-carrid = 'LH'. <fs_sflight>-status = lt_ddl[ 1 ]-domvalue_l. ELSEIF <fs_sflight>-carrid = 'UA'. <fs_sflight>-status = lt_ddl[ 2 ]-domvalue_l. ELSE. <fs_sflight>-status = lt_ddl[ 3 ]-domvalue_l. ENDIF. ENDIF. ENDLOOP. ENDFUNCTION. ``` 在上述代码中,我们使用了 DD_DOMVALUES_GET 函数获取了一个名为 STATUS 的域的所有可能值,并将这些值添加到一个名为 lt_ddl 的内部表中。然后,我们在 ALV 状态栏中添加了一个下拉框,以显示这些选项。当用户选择下拉框中的选项时,我们处理用户选项并更新 ALV 数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值