說明:前面的例子是將list和search放到一個Feeder Class里的,這里來做拆解分步說明。
1.創建SEARCH的結構
2.創建RESULT的結構
表類型(不用表類型的話,需要自己在class里定義個內表,這里為了方便截圖定義出來)
3.定義Search的feeder class.
3.1添加接口類:GUIBB (並激活所有method,默認是inactive的)
3.2重定義GET_DEFINITION方法:
method IF_FPM_GUIBB_SEARCH~GET_DEFINITION.
EO_FIELD_CATALOG_ATTR ?= CL_ABAP_STRUCTDESCR=>DESCRIBE_BY_NAME( 'ZLY_SEARCH01' )."獲取查詢參數結構
endmethod.
3.3重定義PROCESS_EVENT方法:將查詢條件raise給result的feeder class。
METHOD IF_FPM_GUIBB_SEARCH~PROCESS_EVENT. DATA:LR_FPM TYPE REF TO IF_FPM, LR_EVENT_DATA TYPE REF TO CL_FPM_PARAMETER. IF IO_EVENT->MV_EVENT_ID = IF_FPM_GUIBB_SEARCH=>FPM_EXECUTE_SEARCH. LR_FPM = CL_FPM_FACTORY=>GET_INSTANCE( )."創建FPM 實例 CREATE OBJECT LR_EVENT_DATA."創建參數對象 LR_EVENT_DATA->IF_FPM_PARAMETER~SET_VALUE("將查詢參數添加對參數對象里 IV_KEY = 'SEL_TAB' IV_VALUE = IT_FPM_SEARCH_CRITERIA ). LR_EVENT_DATA->IF_FPM_PARAMETER~SET_VALUE("將查詢參數添加對參數對象里 IV_KEY = 'MAX_NUM' IV_VALUE = IV_MAX_NUM_RESULTS ). LR_FPM->RAISE_EVENT_BY_ID("將參數對象拋到LIST的事件中處理 IV_EVENT_ID = IF_FPM_GUIBB_LIST=>GC_EVENT_LIST_FILTER IO_EVENT_DATA = LR_EVENT_DATA ). ENDIF. ENDMETHOD.
4.創建RESULT的Feeder class:挨個激活method
4.1將前面創建的查詢結果表類型添加到屬性中:
4.2查詢邏輯處理。
METHOD IF_FPM_GUIBB_LIST~PROCESS_EVENT. DATA:GT_FPM_SEARCH_CRITERIA TYPE FPMGB_T_SEARCH_CRITERIA, GV_MAX_NUM TYPE I, GT_WHERE TYPE RSDS_WHERE_TAB. CASE IO_EVENT->MV_EVENT_ID. WHEN IF_FPM_GUIBB_LIST=>GC_EVENT_LIST_FILTER. IO_EVENT->MO_EVENT_DATA->GET_VALUE( EXPORTING IV_KEY = 'SEL_TAB' IMPORTING EV_VALUE = GT_FPM_SEARCH_CRITERIA ). IO_EVENT->MO_EVENT_DATA->GET_VALUE( EXPORTING IV_KEY = 'MAX_NUM' IMPORTING EV_VALUE = GV_MAX_NUM ). TRY . CALL METHOD CL_FPM_GUIBB_SEARCH_CONVERSION=>TO_ABAP_SELECT_WHERE_TAB EXPORTING IT_FPM_SEARCH_CRITERIA = GT_FPM_SEARCH_CRITERIA IV_TABLE_NAME = 'ZLY_SEARCH01' * IO_FIELD_CATALOG = MO_CATALOG IMPORTING ET_ABAP_SELECT_TABLE = GT_WHERE. SELECT GUID OBJECT_ID DESCRIPTION PROCESS_TYPE POSTING_DATE SALES_ORG PROVIDER END_USER RETAILER STAT_USER TXT30 PRODUCT_ID ZZCHARG_TYPE INTO TABLE GT_RESULT FROM ZHSB_ORDER_INDEX UP TO GV_MAX_NUM ROWS WHERE (GT_WHERE). CATCH CX_FPMGB. ENDTRY. WHEN ''. WHEN OTHERS. ENDCASE. ENDMETHOD.
5.重新以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_RESULT. EV_DATA_CHANGED = ABAP_TRUE. ENDIF. endmethod.
6.數據目錄設置:
method IF_FPM_GUIBB_LIST~GET_DEFINITION. EO_FIELD_CATALOG ?= CL_ABAP_STRUCTDESCR=>DESCRIBE_BY_NAME( 'ZLY_RESULT01T' )."獲取查詢參數結構 endmethod.
到這里,Feeder class的事情基本完成了。下面就是去配置頁面了。
7.創建OVP頁面配置:
7.1T-CODE:FPM_WB
新建空組件,選擇OVP
選擇包,保存。
7.2點擊編輯配置:進入配置主頁面
7.3添加Search組件:
7.4配置UIBB。輸入配置ID,點擊配置UIBB。
7.5回到FPM_WB里選擇Edit configuration
輸入上面的FPM_SEARCH_UIBB和對應的配置ID,然后輸入Feeder class進入配置頁面:
點擊下面添加搜索條件:
保存結束。
8.幾乎相同方式,配置結果頁面:
8.1FPM_WB通過Edit configuration進入,輸入組件和配置ID,點擊新建:
8.2輸入Feeder class后進入配置頁面:
8.3點擊點擊列:
點擊保存。回到前面的配置頁面,輸入剛才配置的ID,保存。
到這里基本的配置已經完成,來看看效果。
說明:因為是通過FPM_WB工作台創建的,所以FPM_OVP_COMPONENT組件下會自動生成application,復制鏈接,直接運行即可:
效果如圖: