FPM实现 Search UIBB 和 List UIBB数据交互

一、创建简单的demo

1、创建 search uibb的feeder class 

2、定义search 字段

  METHOD IF_FPM_GUIBB_SEARCH~GET_DEFINITION.

    DATA: ls_search   TYPE ysfpm_test_001,
          lt_search   TYPE TABLE OF ysfpm_test_001,
          ls_field    TYPE fpmgb_s_searchfield_descr,
          lt_comp_tab TYPE abap_component_tab.
    DATA: lt_fpmgb_name TYPE fpmgb_t_namevalue.

    eo_field_catalog_attr ?= cl_abap_typedescr=>describe_by_data( p_data = ls_search ).
    lt_comp_tab = eo_field_catalog_attr->get_components( ).

    LOOP AT lt_comp_tab REFERENCE INTO DATA(lr_comp_tab).
      ls_field-name = lr_comp_tab->name.
      CASE ls_field-name.
        WHEN 'BWKEY'.
        WHEN 'WERKS'.
      ENDCASE.
      APPEND ls_field TO  et_field_description_attr.
      CLEAR: ls_field.
    ENDLOOP.

  ENDMETHOD.

3、创建FPM application

4、FPM_WE或者右键application + 创建更改 configuration ,添加search uibb ,输入 configuration 并配置 UIBB,填入创建的Search 的feeder class

6、添加search 的条件

 7、创建 list的 feeder class ,配置输出结构的字段

  METHOD if_fpm_guibb_list~get_definition.

    DATA: lt_data TYPE TABLE OF ysfpm_test_001.

    eo_field_catalog ?= cl_abap_typedescr=>describe_by_data( p_data = lt_data ).

  ENDMETHOD.

8、创建list block,输入list 配置名称,配置 UIBB,输入创建的List Feeder Class

9、配置输出列,并配置输出描述,另加一些默认值

  METHOD if_fpm_guibb_list~get_data.

    DATA: lt_data TYPE TABLE OF ysfpm_test_001.

    APPEND VALUE #( bwkey = 'CN01' werks = 'TPW1'
                     ) TO lt_data.

    ct_data = lt_data.

  ENDMETHOD.

10、结果

二、数据交互-实现 Search UIBB 和 List UIBB的数据传递

11、之前是做默认值,list uibb 和 search  uibb 之间并没有任何关联,如何通过search UIBB 得出List UIBB的结果

1)、标准的传递方式,FPM提供了 SET_VALUE 和 GET_VALUE 方法。

  1.  search 的类中,找到process_event的方法,打上外部断点,执行前台条件。

IT_FPM_SEARCH_CRITERIA 中存放着search 中的条件参数

  METHOD if_fpm_guibb_search~process_event.

    DATA: lo_fpm TYPE REF TO if_fpm.
    DATA(lo_fpm_para) = NEW cl_fpm_parameter( ).

    IF io_event->mv_event_id = if_fpm_guibb_search=>fpm_execute_search.
      " Create instance
      lo_fpm = cl_fpm_factory=>get_instance( ).
      " get search result
      lo_fpm_para->if_fpm_parameter~set_value(
        EXPORTING
          iv_key   = 'SEL_TAB'
          iv_value = it_fpm_search_criteria
      ).

      " raise select condition ( by range context )
      lo_fpm->raise_event_by_id(
        EXPORTING
          iv_event_id   = if_fpm_guibb_list=>gc_event_list_filter   " This defines the ID of the FPM Event
          io_event_data = lo_fpm_para " Property Bag
      ).
    ENDIF.

  ENDMETHOD.

   2. 在list uibb 的class中get_data 方法中,使用框架提供的方法 get_value中添加如下:

  METHOD if_fpm_guibb_list~get_data.

    DATA: lt_search TYPE fpmgb_t_search_criteria,
          lo_rtti   TYPE REF TO cl_abap_datadescr,
          lo_exc    TYPE REF TO cx_fpmgb,
          ls_selopt TYPE rsdsselopt,
          ls_range  TYPE rsds_frange,
          lt_range  TYPE TABLE OF rsds_frange,
          lt_bwkey  TYPE RANGE OF bukrs,
          lt_werks  TYPE RANGE OF werks_d.

    DATA: lt_where TYPE rsds_where_tab.

    DATA: lv_range TYPE string.

    CASE iv_eventid->mv_event_id.
      WHEN if_fpm_guibb_list=>gc_event_list_filter.

        iv_eventid->mo_event_data->get_value(
          EXPORTING
            iv_key   = 'SEL_TAB'
          IMPORTING
            ev_value = lt_search
*            er_value = er_value
        ).
        " get search condition
        " transform condition into range context
        CLEAR: lt_bwkey,lt_werks.
        LOOP AT lt_search REFERENCE INTO DATA(lr_search).

          TRY.

              ls_selopt = cl_fpm_guibb_search_conversion=>to_abap_select_option(
                            is_fpm_search_row = lr_search->*
                            io_attr_rtti      = lo_rtti
                          ).

            CATCH cx_fpmgb INTO lo_exc.
          ENDTRY.
          " value of range
          APPEND ls_selopt TO ls_range-selopt_t.
          "field name
          ls_range-fieldname = lr_search->search_attribute.
          "configuration range result
          APPEND ls_range TO lt_range.

          CASE ls_range-fieldname.
            WHEN 'WERKS'.
              APPEND VALUE #( sign = ls_selopt-sign
                option = ls_selopt-option
                low = ls_selopt-low
                high = ls_selopt-high
                ) TO lt_werks .
            WHEN 'BWKEY'.
              APPEND VALUE #( sign = ls_selopt-sign
                option = ls_selopt-option
                low = ls_selopt-low
                high = ls_selopt-high
                ) TO lt_bwkey.

              CLEAR: ls_range.
            WHEN OTHERS.
          ENDCASE.

        ENDLOOP.

        SELECT bwkey , werks FROM t001w INTO TABLE @DATA(lt_t001w)
          WHERE werks IN @lt_werks
          AND   bwkey IN @lt_bwkey.

        ct_data = lt_t001w[].
        ev_data_changed = abap_true.

      WHEN OTHERS.
    ENDCASE.



  ENDMETHOD.

ev_data_changed = 'X' 的语句实现数据刷新,原理和ALV相同。 

2)、使用全局类的方式交互

public class

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值