FPM五:拆解前面的四——OVP做查詢和結果


說明:前面的例子是將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,復制鏈接,直接運行即可:

效果如圖:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM