前言
在项目中,经常需要对某个字段创建搜索帮助,然而 由于设计缺陷 等各方面原因
,字段的键值表中,值可能不是唯一的,就这导致创建搜索帮助时,就出现了重复的项 。本文将介绍两种方式来处理这种问题
具体问题
现在有一张品牌&系列主数据对照表,数据如下
现在需要做一个品牌的搜索帮助,一般创建方式如下
点击测试,结果如下
可见有重复值,这种效果显然不是我们想要的,接下来我将介绍如何处理它。
去重方案一
1.写一个CDS视图,将原数据做去重,然后再基于CDS视图做搜索帮助
@AbapCatalog.sqlViewName: 'ZTEST_CDSV_BRAND'@AbapCatalog.compiler.compareFilter: true@AbapCatalog.preserveKey: true@AccessControl.authorizationCheck: #NOT_REQUIRED@EndUserText.label: '测试'define view ZTEST_CDS_BRAND as select distinct from ztmd001b{ zbrand, zbrand_txt}
2\. 基于CDS视图 创建搜索帮助
3.点击测试,结果如下,结果正确
去重方案二
1.不借助CDS,在"搜索帮助出口"处填入自定义的增强方法,在增强方法中对数据进行去重
FUNCTION zshlp_exit_brand_val.*"----------------------------------------------------------------------*"*"本地接口:*" TABLES*" SHLP_TAB TYPE SHLP_DESCT*" RECORD_TAB STRUCTURE SEAHLPRES*" CHANGING*" REFERENCE(SHLP) TYPE SHLP_DESCR*" REFERENCE(CALLCONTROL) LIKE DDSHF4CTRL STRUCTURE DDSHF4CTRL*"----------------------------------------------------------------------
IF callcontrol-step <> 'SELECT'. EXIT. ENDIF.
SELECT DISTINCT zbrand, zbrand_txt FROM ztmd001b INTO TABLE @DATA(lt_show) .
CALL FUNCTION 'F4UT_RESULTS_MAP' TABLES shlp_tab = shlp_tab[] record_tab = record_tab[] source_tab = lt_show CHANGING shlp = shlp callcontrol = callcontrol EXCEPTIONS illegal_structure = 1 OTHERS = 2.
IF lt_show[] IS NOT INITIAL. callcontrol-step = 'DISP'. ELSE. callcontrol-step = 'SELECT'. ENDIF.
ENDFUNCTION.3 .点击测试,效果同方案一一致,截图此处略过
补充
搜索帮助创建完成后,可以将搜索帮助添加到数据元素的定义中,这样在数据库表中,选择屏幕或ALV中,含有这个数据元素的字段,都会自动带有搜索帮助功能。
总结
两种方式:CDS&搜索帮助增强,朋友们喜欢哪种方式呢?欢迎留下你的观点。