ALV_VIEW: WDDOINIT
METHOD WDDOINIT .
*1.数据定义
*=========================================================
DATA: alv_usage TYPE REF TO if_wd_component_usage, "①"
alv_controller TYPE REF TO iwci_salv_wd_table, "②"
alv_config TYPE REF TO cl_salv_wd_config_table."③"
DATA: column_settings TYPE REF TO if_salv_wd_column_settings,
table_settings TYPE REF TO if_salv_wd_table_settings,
column_nd TYPE REF TO cl_salv_wd_column,
column_header TYPE REF TO cl_salv_wd_column_header,
function TYPE REF TO cl_salv_wd_function,
button TYPE REF TO cl_salv_wd_fe_button.
DATA: columns TYPE salv_wd_t_column_ref,
column TYPE salv_wd_s_column_ref,
fields TYPE TABLE OF dfies,
field TYPE dfies.
" Add Check Box "
DATA:checkbox TYPE REF TO cl_salv_wd_uie_checkbox,
input_field TYPE REF TO cl_salv_wd_uie_input_field.
" Get Context note "
DATA context_node TYPE REF TO if_wd_context_node.
context_node = wd_context->get_child_node( name = wd_this->wdctx_ZALV_ZPEFF_TOTAL ).
*2.实例化alv 组件
*=========================================================
" 实例化ALV 组件 "
alv_usage = wd_this->wd_cpuse_alv( ). "① 将引用的ALV组件实例(ALV)复制给参数"
IF alv_usage->has_active_component( ) IS INITIAL.
alv_usage->create_component( ).
ENDIF.
" 通过向导引入控制器中的Context节点和其对应的SET_DATA方法,并将节点传入控制器 "
alv_controller = wd_this->wd_cpifc_alv( ). "② 将引用的ALV组件实例(ALV_OUTPUT)复制给参数"
alv_controller->set_data( r_node_data = lo_nd_node ). "上面定义的节点参数"
" 获取参考模型 "
alv_config = alv_controller->get_model( ). "③ 获取控制器的GET_MODEL方法,实现ALV定制"
column_settings ?= alv_config.
table_settings ?= alv_config.
*3.ALV Table Standard Functions Setting
*=========================================================
alv_config->if_salv_wd_std_functions~set_export_allowed( abap_true ) ."设置是否可以导出"
alv_config->if_salv_wd_std_functions~set_edit_append_row_allowed( abap_false ). "附加行"
alv_config->if_salv_wd_std_functions~set_edit_delete_row_allowed( abap_false ). "删除行"
alv_config->if_salv_wd_std_functions~set_edit_insert_row_allowed( abap_false ). "插入行"
alv_config->if_salv_wd_std_functions~set_pdf_allowed( abap_false ). "打印版本"
alv_config->if_salv_wd_std_functions~set_count_records_allowed( abap_true ). "Count Records"
alv_config->if_salv_wd_std_functions~set_edit_check_available( abap_false ). "控制是否显示检查按钮"
*4.ALV Table 设置
*=========================================================
table_settings->SET_READ_ONLY( ABAP_FALSE )."设置ALV整体不可编辑"
table_settings->SET_VISIBLE_ROW_COUNT( '50' )."设置可见行"
table_settings->SET_FIXED_TABLE_LAYOUT( ABAP_FALSE ). "使列宽可自动调节"
table_settings->SET_ROW_SELECTABLE( ABAP_TRUE )."设置行选择"
table_settings->SET_SCROLLABLE_COL_COUNT( '10' )."设置滚动条"
" 控制是否有默认的选择黄条 "
table_settings->SET_SELECTION_MODE( cl_wd_table=>e_selection_mode-single_no_lead ).
table_settings->SET_WIDTH( '80%' )."设置ALV宽度"
table_settings->SET_EDIT_MODE( IF_SALV_WD_C_TABLE_SETTINGS=>EDIT_MODE ). "设置编辑模式"
table_settings->SET_EDIT_MODE( IF_SALV_WD_C_TABLE_SETTINGS=>EDIT_MODE_STANDARD )."设置不可编辑模式"
table_settings->SET_ENABLED( ABAP_TRUE ) ."可处理的"
table_settings->SET_EMPTY_TABLE_TEXT( 'Empty' ) ."设置空表时显示的文本"
table_settings->SET_DISPLAY_EMPTY_ROWS( ABAP_FALSE ). "不展示空表"
*5.ALV Columns 设置
*=========================================================
columns = column_settings->get_columns( ).
LOOP AT columns INTO column.
column_nd = column-r_column.
CASE column-id.
WHEN 'WERKS'.
column_nd->set_position( 0 ).
column_nd->SET_RESIZABLE( abap_true ).
column_header = column_nd->get_header( ) .
column_header->set_ddic_binding_field( ).
column_header->set_text('Plant').
WHEN 'MEINS'.
column_settings->delete_column( column-id ).
WHEN 'STAT'. "设置文本色: TEXT_BACKG => WDY_UIE_LIBRARY_ENUM_TYPE"
DATA cell_editor TYPE REF TO cl_salv_wd_uie.
DATA text_view TYPE REF TO cl_salv_wd_uie_text_view.
cell_editor = column_nd->get_cell_editor( ).
IF cell_editor->editor = if_salv_wd_c_column_settings=>cell_editor_text_view.
text_view ?= cell_editor.
text_view->set_semantic_color_fieldname( 'TEXT_BACKG' ).
ENDIF.
WHEN 'DATE'. "设置列背景色 COL_BACKG => WDY_UIE_LIBRARY_ENUM_TYPE"
column_nd->set_cell_design( cl_wd_abstr_master_table_col=>e_cell_design-positive ).
WHEN 'OTHERS'. "COLOR:单元格背景色"
" Setting Color field:WDUI_TABLE_CELL_DESIGN (Table Cell Design) "
column_nd->set_cell_design_fieldname( 'COLOR' ).
ENDCASE.
ENDLOOP.
column_settings->delete_column( 'COLOR' ). "Delete column"
column_nd = column_settings->get_column( 'BDAUT' ). "Get column"
column_nd->set_visible( cl_wd_uielement=>e_visible-none ). " Set colums not display in alv "
*6.ALV Table设置选择按钮和ALV hearder text 设置,ZSELE添加在Context中
*==========================================================
CREATE OBJECT checkbox
EXPORTING
checked_fieldname = 'ZSELE'.
column_nd = column_settings->get_column( 'ZSELE' ).
CREATE OBJECT input_field
EXPORTING
value_fieldname = 'ZSELE'.
column_nd->set_cell_editor( input_field ).
column_nd->set_cell_editor( checkbox ).
column_header = column_nd->create_header( ).
column_header->set_text( 'Selected' ).
endmethod.