abap alv做下拉框
时间: 2023-07-31 08:12:50 浏览: 227
ABAP ALV 中可以使用 `CL_SALV_WD_CONFIG_TABLE` 类来实现下拉框的功能。
以下是一个示例代码:
```abap
DATA: lo_config TYPE REF TO cl_salv_wd_config_table,
lo_column TYPE REF TO cl_salv_wd_column_table.
lo_config = cl_salv_wd_config_table=>create( iv_table_name = 'MY_TABLE' ).
lo_column = lo_config->if_salv_wd_column_settings~get_column( 'MY_COLUMN' ).
lo_column->set_ddic_drop_down_by_name( 'DDIC_DOMAIN_NAME' ).
```
其中,`MY_TABLE` 是 ALV 中的表格名称,`MY_COLUMN` 是需要添加下拉框的列名,`DDIC_DOMAIN_NAME` 是下拉框对应的 DDIC 域名称。
你可以将 `DDIC_DOMAIN_NAME` 替换为你需要的 DDIC 域名称,这样就可以在 ALV 中实现下拉框的功能了。
相关问题
ABAP FUNCTION ALV中如何在状态栏添加下拉框按钮
在 ABAP FUNCTION ALV 中添加状态栏下拉框按钮,可以使用函数模块 `REUSE_ALV_HIERSEQ_LIST_DISPLAY`。该函数模块可以在状态栏中添加下拉框按钮,用于切换不同的层次结构。
以下是添加下拉框按钮的代码示例:
```
REPORT ztest.
DATA: it_list TYPE STANDARD TABLE OF sflight,
wa_list TYPE sflight.
DATA: it_fieldcat TYPE slis_t_fieldcat_alv.
FIELD-SYMBOLS: <fs_fieldcat> TYPE slis_fieldcat_alv.
* 初始化 ALV 数据
SELECT * FROM sflight INTO TABLE it_list.
* 初始化字段目录
CLEAR: it_fieldcat.
wa_fieldcat-fieldname = 'CARRID'.
wa_fieldcat-ref_table = 'SCARR'.
wa_fieldcat-ref_field = 'CARRID'.
APPEND wa_fieldcat TO it_fieldcat.
wa_fieldcat-fieldname = 'CONNID'.
APPEND wa_fieldcat TO it_fieldcat.
wa_fieldcat-fieldname = 'FLDATE'.
APPEND wa_fieldcat TO it_fieldcat.
wa_fieldcat-fieldname = 'SEATSMAX'.
APPEND wa_fieldcat TO it_fieldcat.
wa_fieldcat-fieldname = 'SEATSOCC'.
APPEND wa_fieldcat TO it_fieldcat.
CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
EXPORTING
i_callback_program = sy-repid
i_callback_pf_status_set = 'PF_STATUS'
is_layout = VALUE #( ( hierarchy_seq = 'CARRID' ) )
TABLES
t_fieldcat = it_fieldcat
t_outtab = it_list.
* 定义层次结构下拉框的值集合
DATA: it_hier TYPE STANDARD TABLE OF lvc_s_layo WITH HEADER LINE.
it_hier-fieldname = 'HIERARCHY_SEQ'.
it_hier-seltext_l = '层次结构'.
it_hier-selopt = 'O'.
it_hier-no_out = 'X'.
APPEND it_hier.
it_hier-fieldname = 'CARRID'.
it_hier-seltext_l = '按航空公司'.
it_hier-selopt = 'C'.
it_hier-no_out = ' '.
APPEND it_hier.
it_hier-fieldname = 'FLDATE'.
it_hier-seltext_l = '按航班日期'.
it_hier-selopt = 'D'.
it_hier-no_out = ' '.
APPEND it_hier.
it_hier-fieldname = 'SEATSMAX'.
it_hier-seltext_l = '按最大座位数'.
it_hier-selopt = 'S'.
it_hier-no_out = ' '.
APPEND it_hier.
it_hier-fieldname = 'SEATSOCC'.
it_hier-seltext_l = '按已占用座位数'.
it_hier-selopt = 'O'.
it_hier-no_out = ' '.
APPEND it_hier.
* 设置层次结构下拉框
SET PF-STATUS 'PF_STATUS' EXCLUDING it_hier.
* PF-STATUS 事件处理程序
MODULE pf_status OUTPUT.
SET PF-STATUS 'PF_STATUS'.
SET TITLEBAR 'TITLE'.
ENDMODULE.
* AT SELECTION-SCREEN 事件处理程序
AT SELECTION-SCREEN ON HIERARCHY_SEQ.
LOOP AT it_hier ASSIGNING FIELD-SYMBOL(<fs_hier>).
IF <fs_hier>-fieldname = 'HIERARCHY_SEQ'.
CONTINUE.
ENDIF.
IF <fs_hier>-selopt = 'X'.
CLEAR: it_list.
SELECT * FROM sflight INTO TABLE it_list ORDER BY carrid.
ELSE.
CLEAR: it_list.
SELECT * FROM sflight INTO TABLE it_list ORDER BY ( <fs_hier>-fieldname ).
ENDIF.
CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
EXPORTING
i_callback_program = sy-repid
i_callback_pf_status_set = 'PF_STATUS'
is_layout = VALUE #( ( hierarchy_seq = <fs_hier>-fieldname ) )
TABLES
t_fieldcat = it_fieldcat
t_hierarchy = it_list.
ENDLOOP.
```
在代码中,使用了 `REUSE_ALV_HIERSEQ_LIST_DISPLAY` 函数模块来显示 ALV 报表,并在 `is_layout` 参数中指定默认的层次结构。在 `pf_status` 事件处理程序中设置状态栏的标题,并在 `AT SELECTION-SCREEN` 事件处理程序中根据用户选择的层次结构重新查询数据并刷新 ALV 报表。
通过在 `it_hier` 中定义层次结构下拉框的值集合,并在 `SET PF-STATUS` 语句中排除该值集合,即可在状态栏中添加下拉框按钮。在 `AT SELECTION-SCREEN` 事件处理程序中,根据用户选择的层次结构重新查询数据,并使用 `REUSE_ALV_HIERSEQ_LIST_DISPLAY` 函数模块刷新 ALV 报表显示。
ABAP 代码实现:FUNCTION ALV中如何添加状态栏下拉框按钮
在 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 数据。
阅读全文
相关推荐












