如果NODE是参考的结构或者表,则ALV中的列参考的是结构或者表中的Field(即使这些Field并没有加到NODE中去);如果NODE不是参考的结构或表,那么ALV中的列参考的就是NODE中的Attribute
0. ALV component usage:
DATA: lr_salv_wd_table_usage TYPE REF TO if_wd_component_usage,
lr_salv_wd_table TYPE REF TO iwci_salv_wd_table,
lr_config TYPE REF TO cl_salv_wd_config_table.
"Check ALV component usage
lr_salv_wd_table_usage = wd_this->wd_cpuse_alv( ).
IF lr_salv_wd_table_usage->has_active_component( ) IS INITIAL.
lr_salv_wd_table_usage->create_component( ).
ENDIF.
"Get ALV Component (InterfaceController).
lr_salv_wd_table = wd_this->wd_cpifc_alv( ).
"Get Configuration Model from ALV Component,
lr_config = lr_salv_wd_table->get_model( ).
lr_config在component contorller的attribute中申明,Refto:cl_salv_wd_config_table,且是public的;
不需要在attribute中申明:
DATA: lr_config TYPE REF TO cl_salv_wd_config_table.
lr_config = lr_salv_wd_table->get_model( ).
1.整个表设置:
DATA: lr_table_settings TYPE REF TO if_salv_wd_table_settings.
lr_table_settings ?= lr_config.
lr_table_settings->set_visible_row_count( '18' ).
lr_table_settings->set_read_only( abap_false ).
lr_table_settings->set_scrollable_col_count( '5' )."在没有Fixed table layout情况下,显示的列数;当Fixed table layout的时候,不要这句
"lr_table_settings->set_fixed_table_layout( abap_true ). "一个屏幕固定显示
lr_table_settings->set_fixed_table_layout( abap_false ). "实际大小显示
lr_table_settings->set_row_selectable( abap_false ). "当ALV是Hierarchy布局时,加上这句,以免选中一条记录再展开其他记录时dump掉
*激活ALV的on_cell_action事件,此时onclick失效
lr_table_settings->set_cell_action_event_enabled( EXPORTING value = ABAP_TRUE ).
*Lead Selection disable
lr_table_settings->set_row_selectable( abap_false ).
*Lead Selection hide
lr_table_settings->set_selection_mode( cl_wd_table=>e_selection_mode-none ).
*Hierarchy
lr_table_settings->set_display_type( if_salv_wd_c_table_settings=>display_type_hierarchy ).
2.Field设置,主要用来排序:
DATA: lr_field_settings TYPE REF TO if_salv_wd_field_settings.
lr_field_settings ?= wd_this->lr_config.
3.列设置:
DATA: lr_column_settings TYPE REF TO if_salv_wd_column_settings,
lt_columns TYPE salv_wd_t_column_ref,
ls_column TYPE salv_wd_s_column_ref,
lr_col_header TYPE REF TO cl_salv_wd_column_header.
lr_column_settings ?= lr_config.
"初始每列
lt_columns = lr_column_settings->get_columns( ).
LOOP AT lt_columns INTO ls_column.
CASE ls_column-id.
WHEN 'COL_1'.
DATA: lr_checkbox TYPE REF TO cl_salv_wd_uie_checkbox.
CREATE OBJECT lr_checkbox
EXPORTING checked_fieldname = 'CHECKBOX'.
"CHECKBOX_ENABLE是一个ALV DATA绑定的attribute,TYPE为WDY_BOOLEAN,设置该attribute的值为'X',则enable
lr_checkbox->set_enabled_fieldname( 'CHECKBOX_ENABLE' ).
ls_column-r_column->set_cell_editor( lr_checkbox ).
ls_column-r_column->set_position( 1 ). "没有Fixed table layout的时候用
ls_column-r_column->set_width( '30px' ).
ls_column-r_column->set_fixed_position( cl_wd_abstr_table_column=>e_fixed_position-left ). "Fixed table layout的时候用
“设置列头方法一:
ls_column-r_column->delete_header( ).
lr_col_header = ls_column-r_column->create_header( ).
lr_col_header->set_text( 'Theme' ).
“设置列头方法二:
lr_col_header = ls_column-r_column->get_header( ) .
lr_column_header->set_prop_ddic_binding_field(
property = if_salv_wd_c_ddic_binding=>bind_prop_text
value = if_salv_wd_c_ddic_binding=>ddic_bind_none ).
lr_col_header->set_text( 'Theme' ) . "column header
"set_fixed_table_layout( abap_false )后,仍需调节列的宽度
DATA: lv_resize TYPE flag.
ls_column-r_column->get_resizable( ).
lv_resize = 'X'.
ls_column-r_column->set_resizable( lv_resize ).
ls_column-r_column->set_width( '5' ).
"设置该列为hierarchy结构。注意:显示的时候,会按照该列自动进行排序
ls_column-r_column->if_salv_wd_column_hierarchy~set_hierarchy_column( abap_true ).
WHEN 'ZZDJLX'.
"配合整个表的设置:lr_table_settings->set_read_only( abap_false ).将显示ZEL_BR_ZZDJLX对应的Domain:ZZDJLXCSC中的短描述
ls_column-r_column->set_position( 10 ).
DATA: lr_dropdown_djlx TYPE REF TO cl_salv_wd_uie_dropdown_by_key.
CREATE OBJECT lr_dropdown_djlx
EXPORTING
selected_key_fieldname = 'ZZDJLX'.
"又或者设置lr_dropdown_djlx的read_only属性,而不需要上面这个表的设置
CALL METHOD lr_dropdown_djlx->set_read_only
EXPORTING
value = 'X'.
ls_column-r_column->set_cell_editor( lr_dropdown_djlx ).
"ls_column-r_column->set_fixed_position( cl_wd_abstr_table_column=>e_fixed_position-left ).
WHEN 'APPR_DAYS'.
"对该列进行排序,如果table是hierarchy的话,则该列会按组(group)进行排序
DATA: lr_field_days TYPE REF TO cl_salv_wd_field.
DATA: lr_sort TYPE REF TO cl_salv_wd_sort_rule.
lr_field_days = lr_config->if_salv_wd_field_settings~get_field( 'APPR_DAYS' ).
lr_sort = lr_field_days->if_salv_wd_sort~create_sort_rule( sort_order = if_salv_wd_c_sort=>sort_order_descending ).
WHEN 'COL_2'.
"设置InputField
DATA: lr_input TYPE REF TO cl_salv_wd_uie_input_field.
CREATE OBJECT lr_input EXPORTING value_fieldname = 'DEPT_EN'.
ls_column-r_column->set_cell_editor( lr_input ).
WHEN 'THEME'.
"设置链接
DATA: lr_link TYPE REF TO cl_salv_wd_uie_link_to_action.
CREATE OBJECT lr_link.
lr_link->set_text_fieldname('THEME').
ls_column-r_column->set_cell_editor( lr_link ).
ls_column-r_column->set_position( 2 ).
ls_column-r_column->set_width( '500px' ).
"隐藏其它列
WHEN OTHERS.
ls_column-r_column->set_visible( cl_wd_uielement=>e_visible-none ).
ENDLOOP.
4.Toolbar 即Function按钮设置:
DATA: lr_functions TYPE REF TO if_salv_wd_function_settings.
DATA: lr_function TYPE REF TO cl_salv_wd_function,
lr_button TYPE REF TO cl_salv_wd_fe_button,
lr_dropdown TYPE REF TO cl_salv_wd_fe_dropdown_by_idx.
lr_functions ?= lr_config.
*下拉框Dropdown_by_Index.
lr_function = lr_functions->create_function( 'DISP_TYPE' ).
"texts_elementname 为ALV Context INTERFACECONTROLLER 中FUNCTION_ELEMENTS结点mapping的 Context CONMPONENTCONTROLLER 中结点下的Attribute
CREATE OBJECT lr_dropdown
EXPORTING
texts_elementname = 'DISPLAY_TYPE'.
lr_dropdown->set_label_text( '显示:' ).
lr_dropdown->set_width( '120px' ).
lr_function->set_editor( lr_dropdown ).
*分隔符,注意lr_function的创建和按钮lr_function的创建是不一样的
DATA: lr_seperator TYPE REF TO CL_SALV_WD_FE_SEPARATOR,
lr_function TYPE REF TO CL_SALV_WD_FUNCTION.
lr_function = wd_this->lr_config->if_salv_wd_function_settings~create_function( id = 'SEP1' ).
CREATE OBJECT lr_seperator.
lr_function->set_editor( lr_seperator ).
*按钮
lr_function = lr_functions->create_function( 'APPROVE' ).
CREATE OBJECT lr_button.
lr_button->set_text('批准').
lr_function->set_editor( lr_button ).
*标准功能设置
lr_config->if_salv_wd_std_functions~set_edit_append_row_allowed( abap_false ).
lr_config->if_salv_wd_std_functions~set_edit_delete_row_allowed( abap_false ).
lr_config->if_salv_wd_std_functions~set_edit_insert_row_allowed( abap_false ).
lr_config->if_salv_wd_std_functions~set_pdf_allowed( abap_false ).
lr_config->if_salv_wd_std_functions~set_edit_check_available( abap_false ).
lr_config->if_salv_wd_std_functions~set_edit_undo_allowed( abap_false ).
lr_config->if_salv_wd_std_functions~set_graphic_allowed( abap_false ).
"ALVFunction中几个默认的function
lr_config->if_salv_wd_std_functions~set_view_list_allowed( abap_false ).
lr_config->if_salv_wd_std_functions~set_export_allowed( abap_false ).
lr_config->if_salv_wd_std_functions~set_display_as_allowed( abap_false ).
*ALV操作
"隐藏自定义Function
DATA: lr_function_approve TYPE REF TO cl_salv_wd_function.
"hide
lr_function = wd_comp_controller->lr_config->if_salv_wd_function_settings~get_function( '***' ).
lr_function->set_visible( cl_wd_uielement=>e_visible-none ).
"display
lr_function = wd_comp_controller->lr_config->if_salv_wd_function_settings~get_function( '***' ).
lr_function->set_visible( cl_wd_uielement=>e_visible-visible ).