FPM 快速报表开发

2024-04-26 02:28
文章标签 快速 开发 fpm 报表

本文主要是介绍FPM 快速报表开发,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

背景:

        使用FPM开发报表时,如果报表字段过多,页面拖拽等操作不方便

        报表数量过多时,新建应用操作步骤较为繁琐

        更习惯通过少量代码而非页面操作去实现功能

处理:

        将FPM报表开发简化为类似GUI端ALV的开发过程::定义数据对象,选择屏幕;数据处理;报表展示控制

        需要继承基础类并重写对应方法,复制或新建FPM应用,使用新报表对应的类

        可扩展实现一个FPM应用根据不同的URL参数,来展示报表

        可添加权限,数据源可配置等功能,作为报表中心

如下以新建FPM应用为例(可直接拉至文末查看代码)

1. 使用事务代码FPM_WB打开FPM应用新建页面

 2. 填写应用命名

3. 创建应用

4. 创建search UIBB 和list UIBB并填写feeder 类

6. 测试应用

Feeder 类代码部分:

 代码:
CLASS zcl_sample_report_base DEFINITIONPUBLICCREATE PUBLIC .PUBLIC SECTION.INTERFACES if_fpm_guibb .INTERFACES if_fpm_guibb_search .INTERFACES if_fpm_guibb_list .INTERFACES if_fpm_guibb_dynamic_config .
protected section.types:BEGIN OF ty_layout,visible_row_counts    TYPE fpmgb_row_count, " 列表行数title                 TYPE wdy_conf_transl_text, " titleallow_personalization TYPE fpmgb_allow_pers_ats,allow_sorting         TYPE fpmgb_allow_sorting_ats,allow_filtering       TYPE fpmgb_allow_filtering_ats,allow_grouping        TYPE fpmgb_allow_grouping_ats,scroll_mode           TYPE fpm_s_table_settings-scroll_mode, " S: 滚动 P; 分页 默认滚动export_to_excel       TYPE fpmgb_excel_export, " 允许导出Excelfit_to_table_width    TYPE fpmgb_fit_table_width, " 自适应列宽,为X 时,无横向滚动条,数据条目较多时体验较END OF ty_layout .types:BEGIN OF ty_search_fields,name           TYPE name_komp,   " 搜索条件字段type           TYPE string,      " 参考数据类型text           TYPE string,      " 搜索条件文本obligatory     TYPE boole_d,     " 是否必输no_intervals   TYPE boole_d,     " 是否无间隔no_extension   TYPE boole_d,     " 是否无扩展,即多行ddic_shlp_name TYPE shlpname,    " 是否无扩展,即多行list_box       TYPE fpmgb_t_namevalue, " 下拉框值END OF ty_search_fields .types:tt_search_fields TYPE TABLE OF ty_search_fields .methods START_OF_SELECTIONimporting!FIELD_SELECTION type RCF_T_FIELD_SELECTIONexporting!ET_MESSAGES type FPMGB_SEARCH_T_T100_MESSAGE!DATA type DATA .methods DATA_DEFINE_AND_SELECT_SCREENexporting!SELECT_FIELDS type TT_SEARCH_FIELDS!FIELDCAT type LVC_T_FCAT!LAUOUT type TY_LAYOUT!OUT_TYPE_STRUC type STRING .
private section.data GO_LIST_TAB type ref to DATA .data GO_SEARCH_STRU type ref to DATA .data GT_SEARCH_FIELD_DESC type FPMGB_T_SEARCHFIELD_DESCR .data GT_FCAT type LVC_T_FCAT .data GS_LAYOUT type TY_LAYOUT .data MR_FPM type ref to IF_FPM .data GV_CONFIG_ID type WDY_CONFIG_ID .data GT_COMPS_SEARCH type ABAP_COMPONENT_TAB .methods ADD_COMP_BY_DATAimporting!P_DATA type ANY!IV_NAME type STRING!IV_AS_INCLUDE type ABAP_BOOL optional!IV_SUFFIX type C optionalchanging!CT_COMP type ABAP_COMPONENT_TAB .methods ADD_COMP_BY_NAMEimporting!P_NAME type ANY!IV_NAME type STRING!IV_AS_INCLUDE type ABAP_BOOL optional!IV_SUFFIX type C optionalchanging!CT_COMP type ABAP_COMPONENT_TAB .methods CREATE_STRUCTimporting!IT_COMP type ABAP_COMPONENT_TABreturningvalue(RO_DATA) type ref to DATA .methods GET_SEARCH_RANGEimporting!IT_FPM_SEARCH_CRITERIA type FPMGB_T_SEARCH_CRITERIA!IO_SEARCH_CONVERSION type ref to IF_FPM_GUIBB_SEARCH_CONVERSIONreturningvalue(FIELD_SELECTION) type RCF_T_FIELD_SELECTION .methods ADD_SELECTION_OPTIONimporting!NAME type NAME_KOMP!TYPE type STRING!TEXT type STRING!OBLIGATORY type BOOLE_D optional!NO_INTERVALS type BOOLE_D optional!NO_EXTENSION type BOOLE_D optional!DDIC_SHLP_NAME type SHLPNAME optional!LIST_BOX type FPMGB_T_NAMEVALUE optional .
ENDCLASS.CLASS ZCL_SAMPLE_REPORT_BASE IMPLEMENTATION.* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Private Method ZCL_SAMPLE_REPORT_BASE->ADD_COMP_BY_DATA
* +-------------------------------------------------------------------------------------------------+
* | [--->] P_DATA                         TYPE        ANY
* | [--->] IV_NAME                        TYPE        STRING
* | [--->] IV_AS_INCLUDE                  TYPE        ABAP_BOOL(optional)
* | [--->] IV_SUFFIX                      TYPE        C(optional)
* | [<-->] CT_COMP                        TYPE        ABAP_COMPONENT_TAB
* +--------------------------------------------------------------------------------------</SIGNATURE>METHOD add_comp_by_data.DATA ls_comp LIKE LINE OF ct_comp.ls_comp-type        ?= cl_abap_typedescr=>describe_by_data(  p_data  = p_data ).ls_comp-name         = iv_name.ls_comp-as_include   = iv_as_include.ls_comp-suffix       = iv_suffix.APPEND ls_comp TO ct_comp.ENDMETHOD.* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Private Method ZCL_SAMPLE_REPORT_BASE->ADD_COMP_BY_NAME
* +-------------------------------------------------------------------------------------------------+
* | [--->] P_NAME                         TYPE        ANY
* | [--->] IV_NAME                        TYPE        STRING
* | [--->] IV_AS_INCLUDE                  TYPE        ABAP_BOOL(optional)
* | [--->] IV_SUFFIX                      TYPE        C(optional)
* | [<-->] CT_COMP                        TYPE        ABAP_COMPONENT_TAB
* +--------------------------------------------------------------------------------------</SIGNATURE>METHOD add_comp_by_name.DATA ls_comp LIKE LINE OF ct_comp.DATA lo_type TYPE REF TO cl_abap_typedescr.cl_abap_typedescr=>describe_by_name( EXPORTING p_name  = p_name RECEIVING p_descr_ref = lo_type EXCEPTIONS type_not_found = 1 ).IF sy-subrc = 1." If P_NAME not exist, Using string typecl_abap_typedescr=>describe_by_name( EXPORTING p_name  = 'SMDSTRING'  RECEIVING p_descr_ref = lo_type EXCEPTIONS type_not_found = 1 ).ENDIF.ls_comp-type         ?= lo_type.ls_comp-name         = iv_name.ls_comp-as_include   = iv_as_include.ls_comp-suffix       = iv_suffix.APPEND ls_comp TO ct_comp.ENDMETHOD.* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Private Method ZCL_SAMPLE_REPORT_BASE->ADD_SELECTION_OPTION
* +-------------------------------------------------------------------------------------------------+
* | [--->] NAME                           TYPE        NAME_KOMP
* | [--->] TYPE                           TYPE        STRING
* | [--->] TEXT                           TYPE        STRING
* | [--->] OBLIGATORY                     TYPE        BOOLE_D(optional)
* | [--->] NO_INTERVALS                   TYPE        BOOLE_D(optional)
* | [--->] NO_EXTENSION                   TYPE        BOOLE_D(optional)
* | [--->] DDIC_SHLP_NAME                 TYPE        SHLPNAME(optional)
* | [--->] LIST_BOX                       TYPE        FPMGB_T_NAMEVALUE(optional)
* +--------------------------------------------------------------------------------------</SIGNATURE>METHOD add_selection_option.DATA: ls_descr_attr TYPE fpmgb_s_searchfield_descr.DATA: lt_oper TYPE fpmgb_t_search_operator,ls_oper TYPE LINE OF fpmgb_t_search_operator.CLEAR: ls_descr_attr.ls_descr_attr-name            = name.ls_descr_attr-text            = text.ls_descr_attr-ddic_shlp_name  = ddic_shlp_name.ls_descr_attr-mandatory       = obligatory.ls_descr_attr-max_1_value     = no_extension.IF list_box IS NOT INITIAL.ls_descr_attr-enumeration     = list_box.ls_descr_attr-is_of_type = if_fpm_guibb_search=>gc_attribute_types-enumeration.ENDIF.ls_descr_attr-ignore_standard_operators = abap_true.IF no_intervals <> abap_true.CLEAR ls_oper.ls_oper-operator_id = if_fpm_guibb_search=>gc_operators-is_between.APPEND ls_oper TO lt_oper.ENDIF.CLEAR ls_oper.ls_oper-operator_id = if_fpm_guibb_search=>gc_operators-is.APPEND ls_oper TO lt_oper.ls_descr_attr-include_operators = lt_oper.APPEND ls_descr_attr to gt_search_field_desc.add_comp_by_name( EXPORTING p_name = type iv_name = CONV string( name ) CHANGING ct_comp = gt_comps_search ).ENDMETHOD.* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Private Method ZCL_SAMPLE_REPORT_BASE->CREATE_STRUCT
* +-------------------------------------------------------------------------------------------------+
* | [--->] IT_COMP                        TYPE        ABAP_COMPONENT_TAB
* | [<-()] RO_DATA                        TYPE REF TO DATA
* +--------------------------------------------------------------------------------------</SIGNATURE>METHOD create_struct.DATA lr_struct TYPE REF TO cl_abap_structdescr.lr_struct = cl_abap_structdescr=>create( EXPORTING p_components = it_comp ) .CREATE DATA ro_data TYPE HANDLE lr_struct.ENDMETHOD.* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Protected Method ZCL_SAMPLE_REPORT_BASE->DATA_DEFINE_AND_SELECT_SCREEN
* +-------------------------------------------------------------------------------------------------+
* | [<---] SELECT_FIELDS                  TYPE        TT_SEARCH_FIELDS
* | [<---] FIELDCAT                       TYPE        LVC_T_FCAT
* | [<---] LAUOUT                         TYPE        TY_LAYOUT
* | [<---] OUT_TYPE_STRUC                 TYPE        STRING
* +--------------------------------------------------------------------------------------</SIGNATURE>METHOD data_define_and_select_screen.
*----------------------------------------------------------------------*
*  SELECT_FIELDS 选择屏幕定义
*  FIELDCAT 报表字段属性,无定义由字段参考数据元素获取
*  LAUOUT 报表展示布局
*  OUT_TYPE_STRUC 报表展示数据结构 ===By Fireworks xie
*----------------------------------------------------------------------**    DATA: lt_list_box TYPE fpmgb_t_namevalue.
*
*    lt_list_box = VALUE #( ( name = '中国' value = 'CN' )
*                           ( name = '美国' value = 'US' )
*                           ( name = '德国' value = 'DE' ) ).
*
*    " 选择屏幕设置
*    APPEND VALUE #( name = 'BUKRS' type = 'BUKRS' text = '公司代码'  ) TO select_fields.
*    APPEND VALUE #( name = 'DATUM' type = 'DATUM' text = '日期'  ) TO select_fields.
*    APPEND VALUE #( name = 'LAND1' type = 'LAND1' text = '国家' list_box = lt_list_box ) TO select_fields.
*
*    " 报表展示字段及属性
*    APPEND VALUE #( fieldname = 'BUTXT' reptext = '公司名称' intlen = 40 ) TO fieldcat.
*
*    " 输出报表格式
*    lauout-title                  = 'Company'.
*    lauout-fit_to_table_width     = abap_true.
*    lauout-allow_personalization  = abap_true.
*    lauout-export_to_excel        = abap_true.
*
*    " 输出报表数据结构
*    out_type_struc = 'ZCL_SAMPLE_REPORT_SAMPLE01=>TY_OUT'.ENDMETHOD.* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Private Method ZCL_SAMPLE_REPORT_BASE->GET_SEARCH_RANGE
* +-------------------------------------------------------------------------------------------------+
* | [--->] IT_FPM_SEARCH_CRITERIA         TYPE        FPMGB_T_SEARCH_CRITERIA
* | [--->] IO_SEARCH_CONVERSION           TYPE REF TO IF_FPM_GUIBB_SEARCH_CONVERSION
* | [<-()] FIELD_SELECTION                TYPE        RCF_T_FIELD_SELECTION
* +--------------------------------------------------------------------------------------</SIGNATURE>METHOD get_search_range.DATA: lt_fpm_search_criteria TYPE fpmgb_t_search_criteria,ls_crit                TYPE rcf_s_field_selection.DATA:  lr_range_tab_ref TYPE REF TO data.FIELD-SYMBOLS:<fpmgb_s_search_criteria> TYPE fpmgb_s_search_criteria,<lt_range>                TYPE ANY TABLE,<lv_value>                TYPE data,<ls_range>                TYPE data.lt_fpm_search_criteria = it_fpm_search_criteria.SORT lt_fpm_search_criteria STABLE BY search_attribute ASCENDING.CLEAR field_selection .LOOP AT lt_fpm_search_criteria ASSIGNING <fpmgb_s_search_criteria>.AT NEW search_attribute."first: create reference for rangeio_search_conversion->create_abap_range_ref( EXPORTING iv_search_attribute = <fpmgb_s_search_criteria>-search_attributeIMPORTING er_range_tab_ref    = lr_range_tab_ref )."second: fill rangeio_search_conversion->fpm_attribute_into_abap_range( EXPORTING iv_search_attribute = <fpmgb_s_search_criteria>-search_attributeIMPORTING et_range_tab_ref    = lr_range_tab_ref )."third: create field ranges that are needed for function module belowASSIGN lr_range_tab_ref->* TO <lt_range>.LOOP AT <lt_range> ASSIGNING <ls_range>.CLEAR: ls_crit.ls_crit-fieldname = <fpmgb_s_search_criteria>-search_attribute.ASSIGN COMPONENT 'SIGN' OF STRUCTURE <ls_range> TO <lv_value>.CHECK sy-subrc = 0.ls_crit-sign = <lv_value>.ASSIGN COMPONENT 'OPTION' OF STRUCTURE <ls_range> TO <lv_value>.CHECK sy-subrc = 0.ls_crit-option = <lv_value>.ASSIGN COMPONENT 'LOW' OF STRUCTURE <ls_range> TO <lv_value>.IF sy-subrc = 0.ls_crit-low = <lv_value>.ENDIF.ASSIGN COMPONENT 'HIGH' OF STRUCTURE <ls_range> TO <lv_value>.IF sy-subrc = 0.ls_crit-high = <lv_value>.ENDIF.APPEND ls_crit TO field_selection .ENDLOOP.ENDAT.ENDLOOP.ENDMETHOD.* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_SAMPLE_REPORT_BASE->IF_FPM_GUIBB_DYNAMIC_CONFIG~HAS_DYNAMIC_CONFIGURATION
* +-------------------------------------------------------------------------------------------------+
* | [<-()] RV_HAS_DYNAMIC_CONFIGURATION   TYPE        ABAP_BOOL
* +--------------------------------------------------------------------------------------</SIGNATURE>METHOD if_fpm_guibb_dynamic_config~has_dynamic_configuration.rv_has_dynamic_configuration  = abap_true.ENDMETHOD.* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_SAMPLE_REPORT_BASE->IF_FPM_GUIBB_LIST~CHECK_CONFIG
* +-------------------------------------------------------------------------------------------------+
* | [--->] IO_LAYOUT_CONFIG               TYPE REF TO IF_FPM_GUIBB_LIST_CONFIG
* | [<---] ET_MESSAGES                    TYPE        FPMGB_T_MESSAGES
* +--------------------------------------------------------------------------------------</SIGNATURE>METHOD if_fpm_guibb_list~check_config.ENDMETHOD.* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_SAMPLE_REPORT_BASE->IF_FPM_GUIBB_LIST~FLUSH
* +-------------------------------------------------------------------------------------------------+
* | [--->] IT_CHANGE_LOG                  TYPE        FPMGB_T_CHANGELOG
* | [--->] IT_DATA                        TYPE REF TO DATA
* | [--->] IV_OLD_LEAD_SEL                TYPE        I(optional)
* | [--->] IV_NEW_LEAD_SEL                TYPE        I(optional)
* +--------------------------------------------------------------------------------------</SIGNATURE>METHOD if_fpm_guibb_list~flush.ENDMETHOD.* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_SAMPLE_REPORT_BASE->IF_FPM_GUIBB_LIST~GET_DATA
* +-------------------------------------------------------------------------------------------------+
* | [--->] IV_EVENTID                     TYPE REF TO CL_FPM_EVENT
* | [--->] IT_SELECTED_FIELDS             TYPE        FPMGB_T_SELECTED_FIELDS(optional)
* | [--->] IV_RAISED_BY_OWN_UI            TYPE        BOOLE_D(optional)
* | [--->] IV_VISIBLE_ROWS                TYPE        I(optional)
* | [--->] IV_EDIT_MODE                   TYPE        FPM_EDIT_MODE(optional)
* | [--->] IO_EXTENDED_CTRL               TYPE REF TO IF_FPM_LIST_ATS_EXT_CTRL(optional)
* | [<---] ET_MESSAGES                    TYPE        FPMGB_T_MESSAGES
* | [<---] EV_DATA_CHANGED                TYPE        BOOLE_D
* | [<---] EV_FIELD_USAGE_CHANGED         TYPE        BOOLE_D
* | [<---] EV_ACTION_USAGE_CHANGED        TYPE        BOOLE_D
* | [<---] EV_SELECTED_LINES_CHANGED      TYPE        BOOLE_D
* | [<---] EV_DND_ATTR_CHANGED            TYPE        BOOLE_D
* | [<---] EO_ITAB_CHANGE_LOG             TYPE REF TO IF_SALV_ITAB_CHANGE_LOG
* | [<-->] CT_DATA                        TYPE        DATA
* | [<-->] CT_FIELD_USAGE                 TYPE        FPMGB_T_FIELDUSAGE
* | [<-->] CT_ACTION_USAGE                TYPE        FPMGB_T_ACTIONUSAGE
* | [<-->] CT_SELECTED_LINES              TYPE        RSTABIXTAB
* | [<-->] CV_LEAD_INDEX                  TYPE        SYTABIX
* | [<-->] CV_FIRST_VISIBLE_ROW           TYPE        I
* | [<-->] CS_ADDITIONAL_INFO             TYPE        FPMGB_S_ADDITIONAL_INFO(optional)
* | [<-->] CT_DND_ATTRIBUTES              TYPE        FPMGB_T_DND_DEFINITION(optional)
* +--------------------------------------------------------------------------------------</SIGNATURE>METHOD if_fpm_guibb_list~get_data.FIELD-SYMBOLS <fs_table> TYPE STANDARD TABLE.ASSIGN go_list_tab->* TO <fs_table>.IF ct_data <> <fs_table>.ct_data = <fs_table>.ev_data_changed = abap_true.ENDIF.ENDMETHOD.* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_SAMPLE_REPORT_BASE->IF_FPM_GUIBB_LIST~GET_DEFAULT_CONFIG
* +-------------------------------------------------------------------------------------------------+
* | [--->] IO_LAYOUT_CONFIG               TYPE REF TO IF_FPM_GUIBB_LIST_CONFIG
* +--------------------------------------------------------------------------------------</SIGNATURE>METHOD if_fpm_guibb_list~get_default_config.DATA: lv_column_id  TYPE fpm_element_id,lv_index      TYPE i,lv_fix        TYPE fpmgb_list_ats_fixation,lv_visibility TYPE fpmgb_column_visibility.IF io_layout_config IS NOT INITIAL.LOOP AT gt_fcat INTO DATA(ls_fcat).lv_index = lv_index + 1.IF ls_fcat-fix_column = abap_true.lv_fix = '02'.ELSE.lv_fix = '01'.ENDIF.IF ls_fcat-no_out = 'X'.lv_visibility = '01'.ELSE.lv_visibility = ''.ENDIF.TRY.lv_column_id = io_layout_config->add_column(EXPORTINGiv_name         = ls_fcat-fieldnameiv_display_type = 'TV'iv_index        = lv_indexiv_header       = CONV string( ls_fcat-reptext )iv_width        = CONV string( ls_fcat-intlen )iv_tooltip      = CONV string( ls_fcat-scrtext_l )iv_visibility   = lv_visibilityiv_fixed        = lv_fix).CATCH cx_fpm_configuration .ENDTRY.ENDLOOP.ENDIF.CALL METHOD io_layout_config->set_settingsEXPORTINGiv_visible_row_counts    = gs_layout-visible_row_countsiv_allow_personalization = gs_layout-allow_personalizationiv_allow_sorting         = gs_layout-allow_sortingiv_allow_filtering       = gs_layout-allow_filteringiv_allow_grouping        = gs_layout-allow_groupingiv_scroll_mode           = gs_layout-scroll_modeiv_export_to_excel       = gs_layout-export_to_exceliv_is_search_result_list = abap_trueiv_fit_to_table_width    = gs_layout-fit_to_table_widthiv_allow_search          = abap_true.mr_fpm->set_application_title( gs_layout-title ).ENDMETHOD.* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_SAMPLE_REPORT_BASE->IF_FPM_GUIBB_LIST~GET_DEFINITION
* +-------------------------------------------------------------------------------------------------+
* | [<---] EO_FIELD_CATALOG               TYPE REF TO CL_ABAP_TABLEDESCR
* | [<---] ET_FIELD_DESCRIPTION           TYPE        FPMGB_T_LISTFIELD_DESCR
* | [<---] ET_ACTION_DEFINITION           TYPE        FPMGB_T_ACTIONDEF
* | [<---] ET_SPECIAL_GROUPS              TYPE        FPMGB_T_SPECIAL_GROUPS
* | [<---] ES_MESSAGE                     TYPE        FPMGB_S_T100_MESSAGE
* | [<---] EV_ADDITIONAL_ERROR_INFO       TYPE        DOKU_OBJ
* | [<---] ET_DND_DEFINITION              TYPE        FPMGB_T_DND_DEFINITION
* | [<---] ET_ROW_ACTIONS                 TYPE        FPMGB_T_ROW_ACTION
* | [<---] ES_OPTIONS                     TYPE        FPMGB_S_LIST_OPTIONS
* +--------------------------------------------------------------------------------------</SIGNATURE>METHOD if_fpm_guibb_list~get_definition.*&---------------------------------------------------------------------*
*&  1. 定义页面元素,按钮等
*&---------------------------------------------------------------------*DATA: ls_field_description TYPE fpmgb_s_formfield_descr,ls_action            TYPE fpmgb_s_actiondef,lt_component         TYPE abap_compdescr_tab,ls_component         TYPE abap_compdescr,lo_struc             TYPE REF TO cl_abap_structdescr,ls_field_descr       LIKE LINE OF et_field_description.DEFINE mcr_actions.ls_action-id      = &1.ls_action-text    = &2.ls_action-enabled = abap_true.APPEND ls_action TO et_action_definition.CLEAR ls_action.END-OF-DEFINITION.eo_field_catalog ?= cl_abap_typedescr=>describe_by_data_ref( go_list_tab ).lo_struc         ?= eo_field_catalog->get_table_line_type( ).IF lo_struc->components IS NOT INITIAL.et_field_description = VALUE #( FOR <ls_struc_component> IN lo_struc->components(name          = <ls_struc_component>-nameallow_sort    = abap_trueallow_filter  = abap_true)).ENDIF.ENDMETHOD.* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_SAMPLE_REPORT_BASE->IF_FPM_GUIBB_LIST~PROCESS_EVENT
* +-------------------------------------------------------------------------------------------------+
* | [--->] IO_EVENT                       TYPE REF TO CL_FPM_EVENT
* | [--->] IV_RAISED_BY_OWN_UI            TYPE        BOOLE_D(optional)
* | [--->] IV_LEAD_INDEX                  TYPE        SYTABIX
* | [--->] IV_EVENT_INDEX                 TYPE        SYTABIX
* | [--->] IT_SELECTED_LINES              TYPE        RSTABIXTAB
* | [--->] IO_UI_INFO                     TYPE REF TO IF_FPM_LIST_ATS_UI_INFO(optional)
* | [<---] EV_RESULT                      TYPE        FPM_EVENT_RESULT
* | [<---] ET_MESSAGES                    TYPE        FPMGB_T_MESSAGES
* +--------------------------------------------------------------------------------------</SIGNATURE>METHOD if_fpm_guibb_list~process_event.ENDMETHOD.* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_SAMPLE_REPORT_BASE->IF_FPM_GUIBB_SEARCH~CHECK_CONFIG
* +-------------------------------------------------------------------------------------------------+
* | [--->] IO_LAYOUT_CONFIG               TYPE REF TO IF_FPM_GUIBB_SEARCH_CONFIG
* | [<---] ET_MESSAGES                    TYPE        FPMGB_T_MESSAGES
* +--------------------------------------------------------------------------------------</SIGNATURE>METHOD if_fpm_guibb_search~check_config.ENDMETHOD.* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_SAMPLE_REPORT_BASE->IF_FPM_GUIBB_SEARCH~FLUSH
* +-------------------------------------------------------------------------------------------------+
* | [--->] IT_FPM_SEARCH_CRITERIA         TYPE        FPMGB_T_SEARCH_CRITERIA
* | [--->] IV_MAX_NUM_RESULTS             TYPE        I
* | [--->] IT_SELECTED_LINES_OF_RESULT    TYPE        T_RESULT
* | [--->] IV_RESULT_LEAD_SEL             TYPE        I(optional)
* | [--->] IO_SEARCH_CONVERSION           TYPE REF TO IF_FPM_GUIBB_SEARCH_CONVERSION(optional)
* +--------------------------------------------------------------------------------------</SIGNATURE>METHOD if_fpm_guibb_search~flush.ENDMETHOD.* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_SAMPLE_REPORT_BASE->IF_FPM_GUIBB_SEARCH~GET_DATA
* +-------------------------------------------------------------------------------------------------+
* | [--->] IO_EVENT                       TYPE REF TO CL_FPM_EVENT
* | [--->] IV_RAISED_BY_OWN_UI            TYPE        BOOLE_D
* | [--->] IT_VISIBLE_ATTRIBUTES          TYPE        FPMGB_T_SELECTED_FIELDS
* | [--->] IT_SELECTED_COLUMNS_OF_RESULT  TYPE        FPMGB_T_SELECTED_FIELDS
* | [--->] IT_SELECTED_SEARCH_ATTRIBUTES  TYPE        FPMGB_T_SELECTED_FIELDS
* | [--->] IO_SEARCH_CONVERSION           TYPE REF TO IF_FPM_GUIBB_SEARCH_CONVERSION(optional)
* | [<---] ET_MESSAGES                    TYPE        FPMGB_SEARCH_T_T100_MESSAGE
* | [<---] EV_SEARCH_CRITERIA_CHANGED     TYPE        BOOLE_D
* | [<---] ET_RESULT_LIST                 TYPE        DATA
* | [<---] EV_RESULT_LIST_TITLE           TYPE        STRING
* | [<---] EV_FIELD_USAGE_CHANGED         TYPE        WDY_BOOLEAN
* | [<-->] CT_FPM_SEARCH_CRITERIA         TYPE        FPMGB_T_SEARCH_CRITERIA
* | [<-->] CT_FIELD_USAGE                 TYPE        FPMGB_T_SEARCH_FIELDUSAGE(optional)
* +--------------------------------------------------------------------------------------</SIGNATURE>METHOD if_fpm_guibb_search~get_data.ENDMETHOD.* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_SAMPLE_REPORT_BASE->IF_FPM_GUIBB_SEARCH~GET_DEFAULT_CONFIG
* +-------------------------------------------------------------------------------------------------+
* | [--->] IO_LAYOUT_CONFIG               TYPE REF TO IF_FPM_GUIBB_SEARCH_CONFIG
* +--------------------------------------------------------------------------------------</SIGNATURE>METHOD if_fpm_guibb_search~get_default_config.DATA: lv_index TYPE i,lv_colum TYPE fpm_element_id.IF io_layout_config IS NOT INITIAL.LOOP AT gt_search_field_desc INTO DATA(ls_search_field_desc).lv_index = lv_index + 1.lv_colum = io_layout_config->add_attribute(EXPORTINGiv_name             = ls_search_field_desc-nameiv_index            = lv_indexiv_text             = ls_search_field_desc-text).ENDLOOP.CALL METHOD io_layout_config->set_settingsEXPORTINGiv_number_of_query_lines     = 6iv_show_button_reset         = '01'iv_show_max_num_result_field = '01'iv_allow_personalization     = '01'iv_check_mandatory           = 'X'iv_allow_easy_search         = abap_true.ENDIF.ENDMETHOD.* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_SAMPLE_REPORT_BASE->IF_FPM_GUIBB_SEARCH~GET_DEFINITION
* +-------------------------------------------------------------------------------------------------+
* | [<---] EO_FIELD_CATALOG_ATTR          TYPE REF TO CL_ABAP_STRUCTDESCR
* | [<---] ET_FIELD_DESCRIPTION_ATTR      TYPE        FPMGB_T_SEARCHFIELD_DESCR
* | [<---] EO_FIELD_CATALOG_RESULT        TYPE REF TO CL_ABAP_TABLEDESCR
* | [<---] ET_FIELD_DESCRIPTION_RESULT    TYPE        FPMGB_T_SEARCHRESULT_DESCR
* | [<---] EV_RESULT_TABLE_SELECTION_MODE TYPE        WDUI_TSMODE
* | [<---] ES_MESSAGE                     TYPE        FPMGB_S_T100_MESSAGE
* | [<---] EV_ADDITIONAL_ERROR_INFO       TYPE        DOKU_OBJ
* | [<---] ES_OPTIONS                     TYPE        FPMGB_S_SEARCH_OPTIONS
* | [<---] ET_ACTION_DEFINITION           TYPE        FPMGB_T_ACTIONDEF
* | [<---] ET_SPECIAL_GROUPS              TYPE        FPMGB_T_SPECIAL_GROUPS
* +--------------------------------------------------------------------------------------</SIGNATURE>METHOD if_fpm_guibb_search~get_definition.eo_field_catalog_attr ?= cl_abap_structdescr=>describe_by_data_ref( go_search_stru ).et_field_description_attr = gt_search_field_desc.ENDMETHOD.* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_SAMPLE_REPORT_BASE->IF_FPM_GUIBB_SEARCH~PROCESS_EVENT
* +-------------------------------------------------------------------------------------------------+
* | [--->] IO_EVENT                       TYPE REF TO CL_FPM_EVENT
* | [--->] IT_FPM_SEARCH_CRITERIA         TYPE        FPMGB_T_SEARCH_CRITERIA
* | [--->] IV_RAISED_BY_OWN_UI            TYPE        BOOLE_D
* | [--->] IV_MAX_NUM_RESULTS             TYPE        I
* | [--->] IO_SEARCH_CONVERSION           TYPE REF TO IF_FPM_GUIBB_SEARCH_CONVERSION(optional)
* | [<---] ET_MESSAGES                    TYPE        FPMGB_SEARCH_T_T100_MESSAGE
* | [<---] EV_RESULT                      TYPE        FPM_EVENT_RESULT
* +--------------------------------------------------------------------------------------</SIGNATURE>METHOD if_fpm_guibb_search~process_event.DATA: lt_field_selection TYPE rcf_t_field_selection .FIELD-SYMBOLS: <fs_data> TYPE STANDARD TABLE.ASSIGN go_list_tab->* TO <fs_data>.get_search_range(EXPORTINGit_fpm_search_criteria = it_fpm_search_criteriaio_search_conversion   = io_search_conversionRECEIVINGfield_selection        = lt_field_selection).CALL METHOD me->start_of_selectionEXPORTINGfield_selection = lt_field_selectionIMPORTINGet_messages     = et_messagesdata            = <fs_data>.READ TABLE et_messages TRANSPORTING NO FIELDS with KEY severity = 'E'.IF SY-SUBRC = 0.ev_result = 'FAILED'.ENDIF.ENDMETHOD.* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_SAMPLE_REPORT_BASE->IF_FPM_GUIBB~GET_PARAMETER_LIST
* +-------------------------------------------------------------------------------------------------+
* | [<-()] RT_PARAMETER_DESCR             TYPE        FPMGB_T_PARAM_DESCR
* +--------------------------------------------------------------------------------------</SIGNATURE>METHOD if_fpm_guibb~get_parameter_list.ENDMETHOD.* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_SAMPLE_REPORT_BASE->IF_FPM_GUIBB~INITIALIZE
* +-------------------------------------------------------------------------------------------------+
* | [--->] IT_PARAMETER                   TYPE        FPMGB_T_PARAM_VALUE
* | [--->] IO_APP_PARAMETER               TYPE REF TO IF_FPM_PARAMETER(optional)
* | [--->] IV_COMPONENT_NAME              TYPE        FPM_COMPONENT_NAME(optional)
* | [--->] IS_CONFIG_KEY                  TYPE        WDY_CONFIG_KEY(optional)
* | [--->] IV_INSTANCE_ID                 TYPE        FPM_INSTANCE_ID(optional)
* +--------------------------------------------------------------------------------------</SIGNATURE>METHOD if_fpm_guibb~initialize.DATA: lt_select_fields  TYPE tt_search_fields,lt_fieldcat        TYPE lvc_t_fcat,ls_lauout          TYPE ty_layout,lv_out_type_struc  TYPE string.DATA: lr_tabdescr  TYPE REF TO cl_abap_tabledescr,lr_strudescr TYPE REF TO cl_abap_structdescr,lt_dfies     TYPE ddfields,ls_dfies     TYPE dfies,ls_fieldcat  TYPE lvc_s_fcat.CHECK go_search_stru IS INITIAL AND go_list_tab IS INITIAL.CLEAR: gt_comps_search,gt_fcat,gt_search_field_desc,gv_config_id,gs_layout.IF mr_fpm IS INITIAL.mr_fpm = cl_fpm=>get_instance( ).ENDIF." 1. 搜索条件字段" 2. 报表字段结构及属性,fieldcat 中没设置属性的字段,使用参考数据对象属性" 3. 报表展示格式data_define_and_select_screen(IMPORTINGselect_fields  = lt_select_fieldsfieldcat       = lt_fieldcatlauout         = ls_lauoutout_type_struc = lv_out_type_struc).LOOP AT lt_select_fields INTO DATA(ls_select_fields).CALL METHOD me->add_selection_optionEXPORTINGname           = ls_select_fields-nametype           = ls_select_fields-typetext           = ls_select_fields-textobligatory     = ls_select_fields-obligatoryno_intervals   = ls_select_fields-no_intervalsno_extension   = ls_select_fields-no_extensionddic_shlp_name = ls_select_fields-ddic_shlp_namelist_box       = ls_select_fields-list_box.ENDLOOP.gs_layout = ls_lauout.go_search_stru = create_struct( it_comp = gt_comps_search ).CREATE DATA go_list_tab TYPE STANDARD TABLE OF (lv_out_type_struc).lr_tabdescr   ?= cl_abap_tabledescr=>describe_by_data_ref( go_list_tab ).lr_strudescr  ?= lr_tabdescr->get_table_line_type( ).lt_dfies = cl_salv_data_descr=>read_structdescr( lr_strudescr ).LOOP AT lt_dfies INTO ls_dfies.CLEAR ls_fieldcat.READ TABLE lt_fieldcat INTO ls_fieldcat WITH KEY fieldname = ls_dfies-fieldname.IF sy-subrc = 0.ELSE.MOVE-CORRESPONDING ls_dfies TO ls_fieldcat.ls_fieldcat-reptext = ls_dfies-fieldtext.ENDIF.APPEND ls_fieldcat TO gt_fcat.ENDLOOP.IF io_app_parameter IS NOT INITIAL.io_app_parameter->get_value( EXPORTING iv_key = 'SAP-WD-CONFIGID' IMPORTING ev_value = gv_config_id ).ENDIF.ENDMETHOD.* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Protected Method ZCL_SAMPLE_REPORT_BASE->START_OF_SELECTION
* +-------------------------------------------------------------------------------------------------+
* | [--->] FIELD_SELECTION                TYPE        RCF_T_FIELD_SELECTION
* | [<---] ET_MESSAGES                    TYPE        FPMGB_SEARCH_T_T100_MESSAGE
* | [<---] DATA                           TYPE        DATA
* +--------------------------------------------------------------------------------------</SIGNATURE>METHOD start_of_selection.
*----------------------------------------------------------------------*
* Sample 实际使用中填充报表逻辑 ---By Fireworks xie 
*----------------------------------------------------------------------*
*
*    DATA: lt_out TYPE TABLE OF ty_out.
*
*    DATA: lt_bukrs TYPE RANGE OF bukrs,
*          ls_bukrs LIKE LINE OF lt_bukrs,
*          lt_land1 TYPE RANGE OF land1,
*          ls_land1 LIKE LINE OF lt_land1.
*
*    LOOP AT field_selection INTO DATA(ls_selection).
*      CASE ls_selection-fieldname.
*        WHEN 'BUKRS'.
*          MOVE-CORRESPONDING ls_selection TO ls_bukrs.
*          APPEND ls_bukrs TO lt_bukrs.
*        WHEN 'LAND1'.
*          MOVE-CORRESPONDING ls_selection TO ls_land1.
*          APPEND ls_land1 TO lt_land1.
*        WHEN OTHERS.
*      ENDCASE.
*    ENDLOOP.
*
*    SELECT bukrs , CAST( '20230101' AS DATS ) AS datum , land1 , butxt
*      FROM t001
*      INTO TABLE @lt_out
*      WHERE bukrs IN @lt_bukrs
*      AND   land1 IN @lt_land1.
*
*    data =   lt_out.ENDMETHOD.
ENDCLASS.
CLASS zcl_sample_report_sample01 DEFINITIONPUBLICINHERITING FROM zcl_sample_report_baseFINALCREATE PUBLIC .PUBLIC SECTION.TYPES: BEGIN OF ty_out,bukrs TYPE bukrs,datum TYPE datum,land1 TYPE land1,butxt TYPE butxt,END OF ty_out .
protected section.methods START_OF_SELECTIONredefinition .methods DATA_DEFINE_AND_SELECT_SCREENredefinition .
private section.
ENDCLASS.CLASS ZCL_SAMPLE_REPORT_SAMPLE01 IMPLEMENTATION.* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Protected Method ZCL_SAMPLE_REPORT_SAMPLE01->DATA_DEFINE_AND_SELECT_SCREEN
* +-------------------------------------------------------------------------------------------------+
* | [<---] SELECT_FIELDS                  TYPE        TT_SEARCH_FIELDS
* | [<---] FIELDCAT                       TYPE        LVC_T_FCAT
* | [<---] LAUOUT                         TYPE        TY_LAYOUT
* | [<---] OUT_TYPE_STRUC                 TYPE        STRING
* +--------------------------------------------------------------------------------------</SIGNATURE>METHOD data_define_and_select_screen.DATA: lt_list_box TYPE fpmgb_t_namevalue.lt_list_box = VALUE #( ( name = '中国' value = 'CN' )( name = '美国' value = 'US' )( name = '德国' value = 'DE' ) )." 选择屏幕设置APPEND VALUE #( name = 'BUKRS' type = 'BUKRS' text = '公司代码'  ) TO select_fields.APPEND VALUE #( name = 'DATUM' type = 'DATUM' text = '日期'  ) TO select_fields.APPEND VALUE #( name = 'LAND1' type = 'LAND1' text = '国家' list_box = lt_list_box ) TO select_fields." 报表展示字段及属性APPEND VALUE #( fieldname = 'BUTXT' reptext = '公司名称' intlen = 40 ) TO fieldcat." 输出报表格式lauout-title                  = 'Company'.lauout-fit_to_table_width     = abap_true.lauout-allow_personalization  = abap_true.lauout-export_to_excel        = abap_true." 输出报表数据结构out_type_struc = 'ZCL_SAMPLE_REPORT_SAMPLE01=>TY_OUT'.ENDMETHOD.* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Protected Method ZCL_SAMPLE_REPORT_SAMPLE01->START_OF_SELECTION
* +-------------------------------------------------------------------------------------------------+
* | [--->] FIELD_SELECTION                TYPE        RCF_T_FIELD_SELECTION
* | [<---] ET_MESSAGES                    TYPE        FPMGB_SEARCH_T_T100_MESSAGE
* | [<---] DATA                           TYPE        DATA
* +--------------------------------------------------------------------------------------</SIGNATURE>METHOD start_of_selection.DATA: lt_out TYPE TABLE OF ty_out.DATA: lt_bukrs TYPE RANGE OF bukrs,ls_bukrs LIKE LINE OF lt_bukrs,lt_land1 TYPE RANGE OF land1,ls_land1 LIKE LINE OF lt_land1.LOOP AT field_selection INTO DATA(ls_selection).CASE ls_selection-fieldname.WHEN 'BUKRS'.MOVE-CORRESPONDING ls_selection TO ls_bukrs.APPEND ls_bukrs TO lt_bukrs.WHEN 'LAND1'.MOVE-CORRESPONDING ls_selection TO ls_land1.APPEND ls_land1 TO lt_land1.WHEN OTHERS.ENDCASE.ENDLOOP.SELECT bukrs , CAST( '20230101' AS DATS ) AS datum , land1 , butxtFROM t001INTO TABLE @lt_outWHERE bukrs IN @lt_bukrsAND   land1 IN @lt_land1.data =   lt_out.ENDMETHOD.
ENDCLASS.
PS:本文内容为初版,欢迎大家评论提出改进意见

这篇关于FPM 快速报表开发的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/936467

相关文章

SpringBoot快速接入OpenAI大模型的方法(JDK8)

《SpringBoot快速接入OpenAI大模型的方法(JDK8)》本文介绍了如何使用AI4J快速接入OpenAI大模型,并展示了如何实现流式与非流式的输出,以及对函数调用的使用,AI4J支持JDK8... 目录使用AI4J快速接入OpenAI大模型介绍AI4J-github快速使用创建SpringBoot

Android开发中gradle下载缓慢的问题级解决方法

《Android开发中gradle下载缓慢的问题级解决方法》本文介绍了解决Android开发中Gradle下载缓慢问题的几种方法,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、网络环境优化二、Gradle版本与配置优化三、其他优化措施针对android开发中Gradle下载缓慢的问

使用Go语言开发一个命令行文件管理工具

《使用Go语言开发一个命令行文件管理工具》这篇文章主要为大家详细介绍了如何使用Go语言开发一款命令行文件管理工具,支持批量重命名,删除,创建,移动文件,需要的小伙伴可以了解下... 目录一、工具功能一览二、核心代码解析1. 主程序结构2. 批量重命名3. 批量删除4. 创建文件/目录5. 批量移动三、如何安

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

使用Python快速实现链接转word文档

《使用Python快速实现链接转word文档》这篇文章主要为大家详细介绍了如何使用Python快速实现链接转word文档功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 演示代码展示from newspaper import Articlefrom docx import

基于Python开发PPTX压缩工具

《基于Python开发PPTX压缩工具》在日常办公中,PPT文件往往因为图片过大而导致文件体积过大,不便于传输和存储,所以本文将使用Python开发一个PPTX压缩工具,需要的可以了解下... 目录引言全部代码环境准备代码结构代码实现运行结果引言在日常办公中,PPT文件往往因为图片过大而导致文件体积过大,

使用DeepSeek API 结合VSCode提升开发效率

《使用DeepSeekAPI结合VSCode提升开发效率》:本文主要介绍DeepSeekAPI与VisualStudioCode(VSCode)结合使用,以提升软件开发效率,具有一定的参考价值... 目录引言准备工作安装必要的 VSCode 扩展配置 DeepSeek API1. 创建 API 请求文件2.

基于Python开发电脑定时关机工具

《基于Python开发电脑定时关机工具》这篇文章主要为大家详细介绍了如何基于Python开发一个电脑定时关机工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 简介2. 运行效果3. 相关源码1. 简介这个程序就像一个“忠实的管家”,帮你按时关掉电脑,而且全程不需要你多做

Java中的Opencv简介与开发环境部署方法

《Java中的Opencv简介与开发环境部署方法》OpenCV是一个开源的计算机视觉和图像处理库,提供了丰富的图像处理算法和工具,它支持多种图像处理和计算机视觉算法,可以用于物体识别与跟踪、图像分割与... 目录1.Opencv简介Opencv的应用2.Java使用OpenCV进行图像操作opencv安装j

shell脚本快速检查192.168.1网段ip是否在用的方法

《shell脚本快速检查192.168.1网段ip是否在用的方法》该Shell脚本通过并发ping命令检查192.168.1网段中哪些IP地址正在使用,脚本定义了网络段、超时时间和并行扫描数量,并使用... 目录脚本:检查 192.168.1 网段 IP 是否在用脚本说明使用方法示例输出优化建议总结检查 1