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:喜欢的同学可以关注微信公众号