class ZCL_EXCEL_CONVERTER_RESULT_WD definition public inheriting from ZCL_EXCEL_CONVERTER_RESULT final create public . *"* public components of class ZCL_EXCEL_CONVERTER_RESULT_WD *"* do not include other source files here!!! public section. methods ZIF_EXCEL_CONVERTER~CAN_CONVERT_OBJECT redefinition . methods ZIF_EXCEL_CONVERTER~CREATE_FIELDCATALOG redefinition . *"* protected components of class ZCL_EXCEL_CONVERTER_RESULT_WD *"* do not include other source files here!!! *"* protected components of class ZCL_EXCEL_CONVERTER_RESULT_WD *"* do not include other source files here!!! protected section. private section. data WO_CONFIG type ref to CL_SALV_WD_CONFIG_TABLE . data WT_FIELDS type SALV_WD_T_FIELD_REF . data WT_COLUMNS type SALV_WD_T_COLUMN_REF . methods GET_COLUMNS_INFO changing !XS_FCAT type LVC_S_FCAT . methods GET_FIELDS_INFO changing !XS_FCAT type LVC_S_FCAT . methods CREATE_WT_SORT . methods CREATE_WT_FILT . methods CREATE_WT_FCAT importing !IO_TABLE type ref to DATA . ENDCLASS. CLASS ZCL_EXCEL_CONVERTER_RESULT_WD IMPLEMENTATION. method CREATE_WT_FCAT. DATA: lr_data TYPE REF TO data, lo_structdescr TYPE REF TO cl_abap_structdescr, lt_dfies TYPE ddfields, ls_dfies TYPE dfies. DATA: ls_fcat TYPE lvc_s_fcat. FIELD-SYMBOLS: TYPE ANY TABLE. ASSIGN io_table->* TO . CREATE DATA lr_data LIKE LINE OF . lo_structdescr ?= cl_abap_structdescr=>describe_by_data_ref( lr_data ). lt_dfies = zcl_excel_common=>describe_structure( io_struct = lo_structdescr ). loop at lt_dfies into ls_dfies. MOVE-CORRESPONDING ls_dfies TO ls_fcat. * ls_fcat-columnname = ls_dfies-fieldname. ls_fcat-col_pos = ls_dfies-position. ls_fcat-key = ls_dfies-keyflag. get_fields_info( CHANGING xs_fcat = ls_fcat ) . ls_fcat-col_opt = abap_true. get_columns_info( CHANGING xs_fcat = ls_fcat ) . INSERT ls_fcat INTO TABLE wt_fcat. endloop. endmethod. method CREATE_WT_FILT. * No neeed for superclass. * Only for WD DATA: lt_filters TYPE salv_wd_t_filter_rule_ref, ls_filt TYPE lvc_s_filt. FIELD-SYMBOLS: TYPE salv_wd_s_field_ref, TYPE salv_wd_s_filter_rule_ref. LOOP AT wt_fields ASSIGNING . REFRESH lt_filters. lt_filters = -r_field->if_salv_wd_filter~get_filter_rules( ) . LOOP AT lt_filters ASSIGNING . ls_filt-fieldname = -fieldname. IF -r_filter_rule->get_included( ) = abap_true. ls_filt-sign = 'I'. ELSE. ls_filt-sign = 'E'. ENDIF. ls_filt-option = -r_filter_rule->get_operator( ). ls_filt-high = -r_filter_rule->get_high_value( ) . ls_filt-low = -r_filter_rule->get_low_value( ) . INSERT ls_filt INTO TABLE wt_filt. ENDLOOP. ENDLOOP. endmethod. method CREATE_WT_SORT. DATA: lo_sort TYPE REF TO cl_salv_wd_sort_rule, l_sort_order TYPE salv_wd_constant, ls_sort TYPE lvc_s_sort. FIELD-SYMBOLS: TYPE salv_wd_s_field_ref. LOOP AT wt_fields ASSIGNING . lo_sort = -r_field->if_salv_wd_sort~get_sort_rule( ) . IF lo_sort IS BOUND. l_sort_order = lo_sort->get_sort_order( ). IF l_sort_order <> if_salv_wd_c_sort=>sort_order. CLEAR ls_sort. ls_sort-spos = lo_sort->get_sort_position( ). ls_sort-fieldname = -fieldname. * ls_sort-GROUP ls_sort-subtot = lo_sort->get_group_aggregation( ). * ls_sort-COMP * ls_sort-EXPA * ls_sort-SELTEXT * ls_sort-OBLIGATORY * ls_sort-LEVEL * ls_sort-NO_OUT IF l_sort_order = if_salv_wd_c_sort=>sort_order_ascending. ls_sort-up = abap_true. ELSE. ls_sort-down = abap_true. ENDIF. INSERT ls_sort INTO TABLE wt_sort. ENDIF. ENDIF. ENDLOOP. endmethod. method GET_COLUMNS_INFO. DATA: l_numc2 TYPE salv_wd_constant. FIELD-SYMBOLS: TYPE salv_wd_s_column_ref. READ TABLE wt_columns ASSIGNING WITH KEY id = xs_fcat-fieldname . IF sy-subrc = 0. xs_fcat-col_pos = -r_column->get_position( ) . l_numc2 = -r_column->get_fixed_position( ). IF l_numc2 = '02'. xs_fcat-fix_column = abap_true . ENDIF. l_numc2 = -r_column->get_visible( ). IF l_numc2 = '01'. xs_fcat-no_out = abap_true . ENDIF. ENDIF. endmethod. method GET_FIELDS_INFO. DATA: lo_aggr TYPE REF TO cl_salv_wd_aggr_rule, l_aggrtype TYPE salv_wd_constant. FIELD-SYMBOLS: TYPE salv_wd_s_field_ref. READ TABLE wt_fields ASSIGNING WITH KEY fieldname = xs_fcat-fieldname. IF sy-subrc = 0. lo_aggr = -r_field->if_salv_wd_aggr~get_aggr_rule( ) . IF lo_aggr IS BOUND. l_aggrtype = lo_aggr->get_aggregation_type( ) . CASE l_aggrtype. WHEN if_salv_wd_c_aggregation=>aggrtype_total. xs_fcat-do_sum = abap_true. WHEN if_salv_wd_c_aggregation=>aggrtype_minimum. xs_fcat-do_sum = 'A'. WHEN if_salv_wd_c_aggregation=>aggrtype_maximum . xs_fcat-do_sum = 'B'. WHEN if_salv_wd_c_aggregation=>aggrtype_average . xs_fcat-do_sum = 'C'. WHEN OTHERS. CLEAR xs_fcat-do_sum . ENDCASE. ENDIF. ENDIF. endmethod. METHOD ZIF_EXCEL_CONVERTER~CAN_CONVERT_OBJECT. DATA: lo_result TYPE REF TO cl_salv_wd_result_data_table. TRY. lo_result ?= io_object. CATCH cx_sy_move_cast_error . RAISE EXCEPTION TYPE zcx_excel. ENDTRY. ENDMETHOD. METHOD zif_excel_converter~create_fieldcatalog. DATA: lo_result TYPE REF TO cl_salv_wd_result_data_table, lo_data TYPE REF TO data. FIELD-SYMBOLS: TYPE STANDARD TABLE. zif_excel_converter~can_convert_object( io_object = io_object ). ws_option = is_option. lo_result ?= io_object. CLEAR: es_layout, et_fieldcatalog. IF lo_result IS BOUND. lo_data = get_table( io_object = lo_result->r_model->r_data ). IF lo_data IS BOUND. ASSIGN lo_data->* TO . wo_config ?= lo_result->r_model->r_model. IF wo_config IS BOUND. wt_fields = wo_config->if_salv_wd_field_settings~get_fields( ) . wt_columns = wo_config->if_salv_wd_column_settings~get_columns( ) . ENDIF. create_wt_fcat( io_table = lo_data ). create_wt_sort( ). create_wt_filt( ). apply_sort( EXPORTING it_table = IMPORTING eo_table = eo_table ) . * get_color( EXPORTING io_table = eo_table * IMPORTING et_colors = et_colors ) . get_filter( IMPORTING et_filter = et_filter CHANGING xo_table = eo_table ) . update_catalog( CHANGING cs_layout = es_layout ct_fieldcatalog = et_fieldcatalog ). ELSE. * We have a problem and should stop here ENDIF. ENDIF. ENDMETHOD. ENDCLASS.