选择屏幕调用自定义搜索帮助(Searchu Help)简单例子
- 选择屏幕调用:MATCHCODE OBJECT
- 创建搜索帮助(Search Help):SE11
- 搜索帮助的内容:
4. 主要内容说明:
4.1 选择方法:指定搜索帮助表数据来源。
4.2 对话类型:
4.2.1 根据值集合的对话:如果数据量大于100条就不会直接展示数据,会先展示一个筛选界面;
4.2.2 立即显示值:就是立即展示数据源表中的全部数据;
4.2.3 具有值限制的对话:搜索帮助一开始不会将数据表中的全部数据展示出了,会给个筛选条件;
5. 搜索帮助出口: 通过SE37 参考SAP的预定义函数F4IF_SHLP_EXIT_EXAMPLE新建一个常规函数。6.出口函数详细代码例子:
FUNCTION zfm_vendtype_f4.
*"----------------------------------------------------------------------
*"*"本地接口:
*" TABLES
*" SHLP_TAB TYPE SHLP_DESCR_TAB_T
*" RECORD_TAB STRUCTURE SEAHLPRES
*" CHANGING
*" VALUE(SHLP) TYPE SHLP_DESCR_T
*" VALUE(CALLCONTROL) LIKE DDSHF4CTRL STRUCTURE DDSHF4CTRL
*"----------------------------------------------------------------------
RANGES:ra_parentcode FOR zrre_d_bp_type_t-parentcode,
ra_typecode FOR zrre_d_bp_type_t-typecode,
ra_parentname FOR zrre_d_bp_type_t-parentname,
ra_typename FOR zrre_d_bp_type_t-typename.
DATA:BEGIN OF ls_type,
typecode LIKE zrre_d_bp_type_t-typecode,
typename LIKE zrre_d_bp_type_t-typename,
parentcode LIKE zrre_d_bp_type_t-parentcode,
parentname LIKE zrre_d_bp_type_t-parentname,
END OF ls_type.
DATA:lt_type LIKE TABLE OF ls_type.
CHECK callcontrol-step = /rer/if_ccm_constants=>gc_step-select. "'SELECT'.
LOOP AT shlp-selopt INTO DATA(ls_selopt).
CASE ls_selopt-shlpfield.
WHEN 'PARENTCODE'.
ra_parentcode = CORRESPONDING #( ls_selopt ).
APPEND ra_parentcode.
WHEN 'PARENTNAME'.
ra_parentname = CORRESPONDING #( ls_selopt ).
APPEND ra_parentname.
WHEN 'TYPEPCODE'.
ra_typecode = CORRESPONDING #( ls_selopt ).
APPEND ra_typecode.
WHEN 'TYPENAME'.
ra_typename = CORRESPONDING #( ls_selopt ).
APPEND ra_typename.
WHEN OTHERS.
ENDCASE.
ENDLOOP.
SELECT typecode typename
parentcode parentname
FROM zrre_d_bp_type_t
INTO TABLE lt_type
WHERE zstatus = '01'
AND parentcode IN ra_parentcode AND typecode IN ra_typecode
AND parentname IN ra_parentname AND typename IN ra_typename.
IF sy-subrc = 0.
SORT lt_type BY typecode parentcode.
ENDIF.
CLEAR record_tab.
REFRESH record_tab.
* clear: shlp_tab, callcontrol.
callcontrol-sortoff = abap_true.
IF lt_type IS NOT INITIAL.
CALL FUNCTION 'F4UT_RESULTS_MAP'
TABLES
shlp_tab = shlp_tab
record_tab = record_tab
source_tab = lt_type
CHANGING
shlp = shlp
callcontrol = callcontrol
EXCEPTIONS
illegal_structure = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDIF.
*下一个时间点直接转到DISP,否则无法再屏幕上显示帮助列表
callcontrol-step = 'DISP'.
ENDFUNCTION.
注意:输出字段避免长度过长,容易抛出异常Dump掉。
7.函数解读:(此处参考优快云博客所搜索内容)
在选择一次搜索帮助时会调用四次出口,用参数CALLCONTROL-STEP来控制是第几次。
第一次:CALLCONTROL-STEP = ‘SELONE’.
第一次的调用仅用于复合搜索帮助,在这次调用中它可以被使用以减少SHLP_TAB中给出的基本搜索帮助的数量。
第二次:CALLCONTROL-STEP = ‘PRESEL’.
第二次的调用我们可以修改一下限制条件,或者为了完全跳过对话框。
第三次:CALLCONTROL-STEP = ‘SELECT’.
这一步可以用来完全取代数据选择。
第四次:CALLCONTROL-STEP = ‘DISP’.
第四次调用之后前台将展示表RECORD_TAB的数据,可以在这次调用中增减这个表的数据来影响最终展示数据;下一个时间点直接转到DISP,否则无法在屏幕上显示帮助列表。