wda中使用OVS事件创建搜索帮助

Webdynpro for ABAP中页面上的的搜索帮助,除了参考表字段外,也可以借助WDR_OVS组件,实现像GUI里面通过函数输出自定义的搜索帮助列表的做法。

方法:1、在COMPONENTCONTROLLER引用组件WDR_OVS
在这里插入图片描述
2、在COMPONENTCONTROLLER的方法里添加Event Handle,Event引用WDR_OVS
在这里插入图片描述
3、编辑此方法,打开时里面已有部分代码,对代码进行修改即可

4、在需要添加F4的字段所在的NODE上,属性里添加此搜索帮助
在这里插入图片描述

method NAMEF4 .
* declare data structures for the fields to be displayed and
* for the table columns of the selection list, if necessary
  types:
    begin of lty_stru_input,
*   add fields for the display of your search input here
      BNAME type USR21-BNAME,   "用户名
      PERSNUMBER type ADRP-PERSNUMBER,    "人员编号
      NAME_TEXT TYPE ADRP-NAME_TEXT,    "人员名称
    end of lty_stru_input.
  types:
    begin of lty_stru_list,
*   add fields for the selection list here
      BNAME type USR21-BNAME,   "用户名
      PERSNUMBER type ADRP-PERSNUMBER,    "人员编号
      NAME_TEXT TYPE ADRP-NAME_TEXT,    "人员名称
    end of lty_stru_list.

  data: ls_search_input  type lty_stru_input,
        lt_select_list   type standard table of lty_stru_list,
        ls_select_list type lty_stru_list,
        ls_text          type wdr_name_value,
        lt_label_texts   type wdr_name_value_list,
        lt_column_texts  type wdr_name_value_list,
        lv_window_title  type string,
        lv_table_header  type string.

  field-symbols: <ls_query_params> type lty_stru_input,
                 <ls_selection>    type lty_stru_list.

  case ovs_callback_object->phase_indicator.

    when if_wd_ovs=>co_phase_0.  "configuration phase, may be omitted
*   in this phase you have the possibility to define the texts,
*   if you do not want to use the defaults (DDIC-texts)

      ls_text-name = `BNAME`.  "must match a field name of search
      ls_text-value = `用户ID`. "wd_assist->get_text( `001` ).
      insert ls_text into table lt_label_texts.

      ls_text-name = `PERSNUMBER`.  "must match a field name of search
      ls_text-value = `用户编号`. "wd_assist->get_text( `001` ).
      insert ls_text into table lt_label_texts.

      ls_text-name = `NAME_TEXT`.  "must match a field name of search
      ls_text-value = `用户名`. "wd_assist->get_text( `001` ).
      insert ls_text into table lt_label_texts.

      ls_text-name = `BNAME`.  "must match a field in list structure
      ls_text-value = `用户ID`. "wd_assist->get_text( `002` ).
      insert ls_text into table lt_column_texts.

      ls_text-name = `PERSNUMBER`.  "must match a field in list structure
      ls_text-value = `PERSNUMBER`. "wd_assist->get_text( `002` ).
      insert ls_text into table lt_column_texts.

      ls_text-name = `NAME_TEXT`.  "must match a field in list structure
      ls_text-value = `用户名`. "wd_assist->get_text( `002` ).
      insert ls_text into table lt_column_texts.

*      lv_window_title = wd_assist->get_text( `003` ).
*      lv_table_header = wd_assist->get_text( `004` ).

      ovs_callback_object->set_configuration(
                label_texts  = lt_label_texts
                column_texts = lt_column_texts
                group_header = '计划员选择'
                window_title = lv_window_title
                table_header = lv_table_header ).


    when if_wd_ovs=>co_phase_1.  "set search structure and defaults
*   In this phase you can set the structure and default values
*   of the search structure. If this phase is omitted, the search
*   fields will not be displayed, but the selection table is
*   displayed directly.
*   Read values of the original context (not necessary, but you
*   may set these as the defaults). A reference to the context
*   element is available in the callback object.

      ovs_callback_object->context_element->get_static_attributes(
          importing static_attributes = ls_search_input ).
*     pass the values to the OVS component
      ovs_callback_object->set_input_structure(
          input = ls_search_input ).


    when if_wd_ovs=>co_phase_2.
*   If phase 1 is implemented, use the field input for the
*   selection of the table.
*   If phase 1 is omitted, use values from your own context.

      if ovs_callback_object->query_parameters is not bound.
******** TODO exception handling
      endif.
      assign ovs_callback_object->query_parameters->*
                              to <ls_query_params>.
      if not <ls_query_params> is assigned.
******** TODO exception handling
      endif.

*     call business logic for a table of possible values
*     lt_select_list = ???
*--------------------------搜索列表----------------------------------*
      data: lt_bname type range of USR21-BNAME,
            ls_bname like line of lt_bname,
            lt_name_text TYPE RANGE OF ADRP-NAME_TEXT,
            ls_name_text like line of lt_name_text,
            lt_USR21 type table of USR21,
            ls_USR21 type USR21,
            lt_adrp type table of adrp,
            ls_adrp type adrp.

      IF <ls_query_params>-BNAME IS NOT INITIAL.    "用户ID
        ls_bname-sign = 'I'.
        ls_bname-option = 'EQ'.
        ls_bname-low = <ls_query_params>-bname.
        COLLECT ls_bname INTO lt_bname.
      ELSE.
        REFRESH lt_bname.
      ENDIF.

      IF <ls_query_params>-NAME_TEXT IS NOT INITIAL.    "用户名
        ls_NAME_TEXT-sign = 'I'.
        ls_NAME_TEXT-option = 'EQ'.
        ls_NAME_TEXT-low = <ls_query_params>-NAME_TEXT.
        COLLECT ls_NAME_TEXT INTO lt_NAME_TEXT.
      ELSE.
        REFRESH lt_NAME_TEXT.
      ENDIF.

      select *
        from USR21
        into table lt_USR21
       where bname in lt_bname.

       IF not lt_name_text is initial.
        select *
          from adrp
          into table lt_adrp
         where name_text in lt_name_text.
       ENDIF.

      LOOP AT lt_USR21 into ls_USR21.
        clear ls_adrp.
        read table lt_adrp into ls_adrp with key PERSNUMBER = ls_USR21-PERSNUMBER.
        CLEAR ls_select_list.
        ls_select_list-bname = ls_USR21-bname.
        ls_select_list-name_text = ls_adrp-name_text.
        append ls_select_list to lt_select_list.
      ENDLOOP.
      ovs_callback_object->set_output_table( output = lt_select_list ).


    when if_wd_ovs=>co_phase_3.
*   apply result

      if ovs_callback_object->selection is not bound.
******** TODO exception handling
      endif.

      assign ovs_callback_object->selection->* to <ls_selection>.
      if <ls_selection> is assigned.
        ovs_callback_object->context_element->set_attribute(
                               name  = `ZUSER`
                               value = <ls_selection>-bname ).
*      or
*        ovs_callback_object->context_element->set_static_attributes(
*                               static_attributes = <ls_selection> ).

      endif.
  endcase.

endmethod.

PS:喜欢的同学可以关注微信公众号
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值