說明:前面的例子是將list和search放到一個Feeder Class裏的,這裏來作拆解分步說明。app
1.建立SEARCH的結構spa
2.建立RESULT的結構code
表類型(不用表類型的話,須要本身在class裏定義個內表,這裏爲了方便截圖定義出來)對象
3.定義Search的feeder class.blog
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.it
3.3重定義PROCESS_EVENT方法:將查詢條件raise給result的feeder class。io
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:挨個激活methodclass
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,複製連接,直接運行便可:
效果如圖: