1.效果
2.查询条件的feed class
SE11创建feed class数据的结构
ZCL_FPM_FIFO_SEARCH
GET_DEFINITION方法代码
METHOD if_fpm_guibb_search~get_definition.eo_field_catalog_attr ?= cl_abap_structdescr=>describe_by_name( 'ZSS_FIFO_DATA' ).ENDMETHOD.
PROCESS_EVENT代码
METHOD if_fpm_guibb_search~process_event.DATA: lo_fpm TYPE REF TO if_fpm,lo_event_data TYPE REF TO cl_fpm_parameter.CHECK io_event->mv_event_id = if_fpm_guibb_search=>fpm_execute_search. "查询事件lo_fpm = cl_fpm_factory=>get_instance( ).CREATE OBJECT lo_event_data.lo_event_data->if_fpm_parameter~set_value(EXPORTINGiv_key = 'SEL_TAB'iv_value = it_fpm_search_criteria).lo_event_data->if_fpm_parameter~set_value(EXPORTINGiv_key = 'MAX_NUM'iv_value = iv_max_num_results).lo_fpm->raise_event_by_id(EXPORTINGiv_event_id = if_fpm_guibb_list=>gc_event_list_filterio_event_data = lo_event_data).ENDMETHOD.
3.列表输出结果的feed class
GET_DEFINITION代码
METHOD if_fpm_guibb_list~get_definition.eo_field_catalog ?= cl_abap_tabledescr=>describe_by_name( 'ZTYT_FIFO_DATA' ).ENDMETHOD.
PROCESS_EVENT代码
METHOD if_fpm_guibb_list~process_event.DATA: lt_fpm_search_criteria TYPE fpmgb_t_search_criteria,lv_max_num TYPE i,rt_matnr TYPE range_t_matnr,rs_matnr TYPE range_s_matnr,ls_rsds TYPE rsdsselopt,rt_charg TYPE ranges_charg_tt,rs_charg TYPE range_charg_s,ls_fifo TYPE zss_fifo_data,lv1 TYPE i,ls_chart TYPE zss_fifo_chart.TYPES:BEGIN OF ty_reason,sign TYPE ddsign,option TYPE ddoption,low TYPE zzreason,high TYPE zzreason,END OF ty_reason.DATA: rt_reason TYPE TABLE OF ty_reason,rs_reason TYPE ty_reason.TYPES:BEGIN OF ty_year,sign TYPE ddsign,option TYPE ddoption,low TYPE mjahr,high TYPE mjahr,END OF ty_year.DATA: rt_year TYPE TABLE OF ty_year,rs_year TYPE ty_year.TYPES:BEGIN OF ty_month,sign TYPE ddsign,option TYPE ddoption,low TYPE month,high TYPE month,END OF ty_month.DATA: rt_month TYPE TABLE OF ty_month,rs_month TYPE ty_month.FIELD-SYMBOLS: <fs_params_search> TYPE fpmgb_s_search_criteria.CASE io_event->mv_event_id.WHEN if_fpm_guibb_list~gc_event_list_filter.io_event->mo_event_data->get_value(EXPORTINGiv_key = 'SEL_TAB'IMPORTINGev_value = lt_fpm_search_criteria).io_event->mo_event_data->get_value(EXPORTINGiv_key = 'MAX_NUM'IMPORTINGev_value = lv_max_num).LOOP AT lt_fpm_search_criteria INTO DATA(ls_search_criteria).CLEAR: ls_rsds,rs_matnr.CASE ls_search_criteria-search_attribute.WHEN 'MATNR'.TRY.cl_fpm_guibb_search_conversion=>to_abap_select_option(EXPORTINGis_fpm_search_row = ls_search_criteria " GUIBB search: Search operatorRECEIVINGrs_abap_sel_option = ls_rsds " ABAP: Selection option (EQ/BT/CP/...)).MOVE-CORRESPONDING ls_rsds TO rs_matnr.APPEND rs_matnr TO rt_matnr.CATCH cx_fpmgb.ENDTRY.WHEN 'CHARG'.TRY.cl_fpm_guibb_search_conversion=>to_abap_select_option(EXPORTINGis_fpm_search_row = ls_search_criteria " GUIBB search: Search operatorRECEIVINGrs_abap_sel_option = ls_rsds " ABAP: Selection option (EQ/BT/CP/...)).MOVE-CORRESPONDING ls_rsds TO rs_charg.APPEND rs_charg TO rt_charg.CATCH cx_fpmgb.ENDTRY.WHEN 'REASON'.TRY.cl_fpm_guibb_search_conversion=>to_abap_select_option(EXPORTINGis_fpm_search_row = ls_search_criteria " GUIBB search: Search operatorRECEIVINGrs_abap_sel_option = ls_rsds " ABAP: Selection option (EQ/BT/CP/...)).MOVE-CORRESPONDING ls_rsds TO rs_reason.APPEND rs_reason TO rt_reason.CATCH cx_fpmgb.ENDTRY.WHEN 'YEAR'.TRY.cl_fpm_guibb_search_conversion=>to_abap_select_option(EXPORTINGis_fpm_search_row = ls_search_criteria " GUIBB search: Search operatorRECEIVINGrs_abap_sel_option = ls_rsds " ABAP: Selection option (EQ/BT/CP/...)).MOVE-CORRESPONDING ls_rsds TO rs_year.APPEND ls_rsds TO rt_year.CATCH cx_fpmgb.ENDTRY.WHEN 'MONTH'.TRY.cl_fpm_guibb_search_conversion=>to_abap_select_option(EXPORTINGis_fpm_search_row = ls_search_criteria " GUIBB search: Search operatorRECEIVINGrs_abap_sel_option = ls_rsds " ABAP: Selection option (EQ/BT/CP/...)).MOVE-CORRESPONDING ls_rsds TO rs_month.APPEND rs_month TO rt_month.CATCH cx_fpmgb.ENDTRY.ENDCASE.ENDLOOP.ENDCASE.CLEAR: gt_fifo,zcl_fpm_fifo_chart=>gt_fifo.SELECT a~matnr,b~maktx,a~charg,SUM( a~menge ) AS quantity,substring( budat_mkpf,1,4 ) AS year,substring( budat_mkpf,5,2 ) AS month,c~zzreason_text AS reasonFROM mseg AS aLEFT JOIN makt AS bON a~matnr = b~matnrINNER JOIN zmmt0008 AS cON a~zzreason = c~zzreasonWHERE werks = '1300'AND a~zzreason <> ''AND a~matnr IN @rt_matnrAND a~charg IN @rt_chargAND a~zzreason IN @rt_reasonAND b~spras = @sy-languGROUP BY a~matnr,b~maktx,a~charg,budat_mkpf,c~zzreason_textINTO TABLE @DATA(lt_temp).LOOP AT lt_temp INTO DATA(ls_temp).MOVE-CORRESPONDING ls_temp TO ls_fifo.COLLECT ls_fifo INTO gt_fifo.CLEAR: ls_temp,ls_fifo.ENDLOOP.CHECK lv_max_num IS NOT INITIAL.LOOP AT gt_fifo INTO ls_fifo.lv1 = lv1 + 1.MOVE-CORRESPONDING ls_fifo TO ls_chart.COLLECT ls_chart INTO zcl_fpm_fifo_chart=>gt_fifo.CLEAR: ls_chart.IF lv1 > lv_max_num.DELETE gt_fifo.CONTINUE.ENDIF.ENDLOOP.ENDMETHOD.
GET_DATA代码
METHOD if_fpm_guibb_list~get_data.IF iv_eventid->mv_event_id = if_fpm_guibb_list~gc_event_list_filter.ct_data = gt_fifo.ev_data_changed = abap_true.ENDIF.ENDMETHOD.
4.图表CHART分析 feed class
SE11创建CHART的数据结构
因为时间有限,这里偷懒,直接用class的静态属性在多个组件之间共享数据,有更标准的做法
后续有时间再写blog演示
GET_DEFINITION代码
METHOD if_fpm_guibb_chart~get_definition.DATA lo_field_catalog TYPE REF TO cl_abap_tabledescr.lo_field_catalog ?= cl_abap_tabledescr=>describe_by_name( 'ZTYT_FIFO_CHART' ).io_chart_model->get_table_model( )->set_definition(EXPORTINGio_field_catalog = lo_field_catalog " Runtime Type Services).ENDMETHOD.
GET_DATA代码
METHOD if_fpm_guibb_chart~get_data.IF io_event->mv_event_id = if_fpm_guibb_list=>gc_event_list_filter.io_chart_data->get_table_model( )->set_data(EXPORTINGit_data = gt_fifo).ENDIF.ENDMETHOD.
5.事务码FPM_WB创建组件配置
由于我之前已经创建过了,截图都是编辑状态的,和新建略有差异
5.1 创建查询组件的配置
输入步骤2的feed class
添加搜索条件
5.2 创建列表组件的配置
输入步骤3创建的feed class
添加列
5.3 创建图表组件的配置
输入步骤4创建的feed class
图表类型选条形图
5.4 创建OVP概览页面组件配置
通过FPM_OVP_COMPONENT概览页面组件把查询,列表,CHART等组件UIBB BLOCK组合到一个页面
6.创建应用程序配置
点击test fpm应用程序效果