本文主要是介绍好记性不如烂笔头-ABAP之简单的搜索帮助例子,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
选择屏幕调用自定义搜索帮助(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 typenameparentcode parentnameFROM zrre_d_bp_type_tINTO TABLE lt_typeWHERE zstatus = '01'AND parentcode IN ra_parentcode AND typecode IN ra_typecodeAND 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'TABLESshlp_tab = shlp_tabrecord_tab = record_tabsource_tab = lt_typeCHANGINGshlp = shlpcallcontrol = callcontrolEXCEPTIONSillegal_structure = 1OTHERS = 2.IF sy-subrc <> 0.MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgnoWITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.ENDIF.ENDIF.*下一个时间点直接转到DISP,否则无法再屏幕上显示帮助列表callcontrol-step = 'DISP'.
ENDFUNCTION.
注意:输出字段避免长度过长,容易抛出异常Dump掉。
7.函数解读:(此处参考CSDN博客所搜索内容)
在选择一次搜索帮助时会调用四次出口,用参数CALLCONTROL-STEP来控制是第几次。
第一次:CALLCONTROL-STEP = ‘SELONE’.
第一次的调用仅用于复合搜索帮助,在这次调用中它可以被使用以减少SHLP_TAB中给出的基本搜索帮助的数量。
第二次:CALLCONTROL-STEP = ‘PRESEL’.
第二次的调用我们可以修改一下限制条件,或者为了完全跳过对话框。
第三次:CALLCONTROL-STEP = ‘SELECT’.
这一步可以用来完全取代数据选择。
第四次:CALLCONTROL-STEP = ‘DISP’.
第四次调用之后前台将展示表RECORD_TAB的数据,可以在这次调用中增减这个表的数据来影响最终展示数据;下一个时间点直接转到DISP,否则无法在屏幕上显示帮助列表。
这篇关于好记性不如烂笔头-ABAP之简单的搜索帮助例子的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!