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:本文内容为初版,欢迎大家评论提出改进意见

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/4716.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

秋招后端开发面试题 - Java语言基础(上)

目录 Java基础上前言面试题Java 语言的特点JVM JDK JRE什么是跨平台性&#xff1f;原理是什么&#xff1f;什么是字节码?采用字节码的好处是什么?Java 和 C 的区别&#xff1f;注释&#xff1f;关键字关键字 instanceof类型转换关键字 this 和 super关键字 final finally fin…

【Leetcode每日一题】 动态规划 - 简单多状态 dp 问题 - 打家劫舍 II(难度⭐⭐)(67)

1. 题目解析 题目链接&#xff1a;213. 打家劫舍 II 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 2.算法原理 这个问题是经典的“打家劫舍”问题的变种&#xff0c;原问题是在单排房屋中进行偷窃&#xff0c;而这个问题则是在…

【论文精读】多模态系列:ALBEF、VLMo、BLIP、CoCa、BeiTv3

系列文章目录 【论文精读】CLIP&#xff1a;Learning Transferable Visual Models From Natural Language Supervision 从自然语言监督中学习可迁移的视觉模型 论文精读】CLIP 改进工作&#xff08;LSeg、GroupViT、VLiD、 GLIPv1、 GLIPv2、CLIPasso、CLIP4clip、ActionCLIP&…

机器学习:基于Sklearn框架,使用逻辑回归对由心脏病引发的死亡进行预测分析

前言 系列专栏&#xff1a;机器学习&#xff1a;高级应用与实践【项目实战100】【2024】✨︎ 在本专栏中不仅包含一些适合初学者的最新机器学习项目&#xff0c;每个项目都处理一组不同的问题&#xff0c;包括监督和无监督学习、分类、回归和聚类&#xff0c;而且涉及创建深度学…

Linux网络编程---多路I/O转接服务器(一)

多路I/O转接服务器 多路IO转接服务器也叫做多任务IO服务器。该类服务器实现的主旨思想是&#xff0c;不再由应用程序自己监视客户端连接&#xff0c;取而代之由内核替应用程序监视文件。 主要使用的方法有三种&#xff1a;select、poll、epoll 一、select多路IO转接 让内核去…

js实现倒计时效果

实现效果 实现代码 const computingTime startTime > {// 目标日期const targetDate new Date(startTime).getTime();// 每秒更新倒计时const timer setInterval(function() {// 当前时间const now new Date().getTime();// 距离目标时间的毫秒数const distance targe…

vue3中使用animate.css

在vue3中使用animate.css 20240428_093614 引入&#xff1a;npm install animate.css --save main.js注册&#xff1a;import ‘animate.css/animate.min.css’ 注意&#xff1a;import ‘animate.css’ 不适合在vue3项目 使用&#xff1a;class“animate__animated 动画名称”…

Matlab实现CNN-BiLSTM模型,对一维时序信号进行分类

1、利用Matlab2021b训练CNN-BiLSTM模型&#xff0c;对采集的一维时序信号进行分类二分类或多分类 2、CNN-BiLSTM时序信号多分类执行结果截图 训练进度&#xff1a; 网络分析&#xff1a; 指标变化趋势&#xff1a; 代码下载方式&#xff08;代码含数据集与模型构建&#xff0…

Vue3 v3.4之前如何实现组件中多个值的双向绑定?

文章目录 基础代码1. watch2. computed&#xff08;推荐&#xff09; 官方给的例子是关于el-input的&#xff0c;如下。但是input不是所有组件标签都有的属性啊&#xff0c;有没有一种通用的办法呢&#xff1f; <script setup> defineProps({firstName: String,lastName…

【调研分析】目标在不同焦距和距离下与画面的比例(2.8-3.6-4.0)

之前在做项目中需要极度优化效果和代码运行速度 为此测试了同一个目标在不同焦距和距离下与画面的比例&#xff0c;从而可以方便在指定大小情况下搜索目标 NOTE: 这是早期滑窗检测做目标检测下的工作

浅谈OpenCV 粗略计算工件轮廓面积和外接圆直径(Emgu.CV)

前言 最近领导在做库房工具管理这块的功能&#xff0c;希望能集成OpenCV 粗略的计算出工具的长度&#xff0c;以方便用户再归还工具的时候&#xff0c;提示用户该放在那种尺寸的盒子里面&#xff0c;这便是这篇文章的由来。 我们的系统是基于.net开发的&#xff0c;所以采用的是…

分布式系统事务一致性解决方案(基于事务消息)

参考&#xff1a;https://rocketmq.apache.org/zh/docs/featureBehavior/04transactionmessage/ 文章目录 概要错误的方案方案一&#xff1a;业务方自己实现方案二&#xff1a;RocketMQ 事务消息什么是事务消息事务消息处理流程事务消息生命周期使用限制使用示例使用建议 概要 …

MATLAB语音信号分析与合成——MATLAB语音信号分析学习资料汇总(图书、代码和视频)

教科书&#xff1a;MATLAB语音信号分析与合成&#xff08;第2版&#xff09; 链接&#xff08;含配套源代码&#xff09;&#xff1a;https://pan.baidu.com/s/1pXMPD_9TRpJmubPGaRKANw?pwd32rf 提取码&#xff1a;32rf 基础入门视频&#xff1a; 视频链接&#xff1a; 清…

急急急!微信朋友圈删除了怎么恢复?

微信朋友圈是我们与朋友分享生活点滴的重要平台&#xff0c;但有时候微信出现异常&#xff0c;导致我们编辑好的朋友圈被删除了&#xff0c;这时候该怎么办呢&#xff1f; 幸运的是&#xff0c;微信提供了一种简单的方式来恢复已删除的朋友圈内容。微信朋友圈删除了怎么恢复&a…

利用二叉检索树将文章中的单词建立索引(正则表达式)

知识储备 链接: 【二叉检索树的实现——增删改查、读取命令文件、将结果写入新文件】 1、正则表达式的处理 &#xff08;1&#xff09;r’前缀的作用 r’前缀的用于定义原始字符串&#xff0c;特点是不会处理反斜杠\作为转义字符 &#xff08;2&#xff09;正则表达式中元…

场外个股期权开户新规及操作方法

场外个股期权开户新规 场外个股期权开户新规主要涉及对投资者资产实力、专业知识、风险承受能力和诚信记录的要求。以下是根据最新规定总结的关键要点&#xff1a; 来源/&#xff1a;股指研究院 资产门槛&#xff1a;投资者需具备一定的资产实力&#xff0c;确保在申请开户前…

【Linux】文件打包解压_tar_zip

文章目录 &#x1f4d1;引言&#xff1a;一、文件打包压缩1.1 什么是文件打包压缩&#xff1f;1.2 为什么需要文件打包压缩&#xff1f; 二、打包解压2.1 zip2.2 unzip2.3 tar指令 &#x1f324;️全篇小结&#xff1a; &#x1f4d1;引言&#xff1a; 在Linux操作系统中&#…

OpenCV-Python: 强大的计算机视觉库

文章目录 OpenCV-Python: 强大的计算机视觉库背景OpenCV-Python是什么&#xff1f;安装简单的库函数使用方法场景示例人脸检测和识别图像分割目标跟踪 常见问题和解决方案总结 OpenCV-Python: 强大的计算机视觉库 背景 OpenCV (Open Source Computer Vision Library) 是一个开…

如何修改php版本

我使用的Hostease的Windows虚拟主机产品,由于网站程序需要支持高版本的PHP,程序已经上传到主机&#xff0c;但是没有找到切换PHP以及查看PHP有哪些版本的位置&#xff0c;因此咨询了Hostease的技术支持&#xff0c;寻求帮助了解到可以实现在Plesk面板上找到此切换PHP版本的按钮…

基于Springboot+Vue的Java项目-火车票订票系统开发实战(附演示视频+源码+LW)

大家好&#xff01;我是程序员一帆&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &am…