apap之web dynpro for abap----ALV初始化

来源:互联网 发布:淘宝 手机 退货地址 编辑:程序博客网 时间:2024/06/08 01:04

如果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 ).

原创粉丝点击