最近有个需求,需要对如下图所示的搜索帮助,进行权限控制,即没有权限的人员,点开搜索帮助时,可选择的数据会少一部分
实现方式:对搜索帮助增加出口,并在其DISP中,根据权限有无,以及配置表中的数据对搜索帮助进行数据过滤
此出口可以复制系统标准的函数:F4IF_SHLP_EXIT_EXAMPLE
程序代码如下:
IF CALLCONTROL-STEP = 'DISP'. * PERFORM ZAUTHORITY_CHECK TABLES RECORD_TAB SHLP_TAB * CHANGING SHLP CALLCONTROL. * DATA ls_record LIKE LINE OF record_tab. DATA :LV_GXSTRING TYPE STRING. FIELD-SYMBOLS: <LFS_ZZHGX> TYPE ZE_ZZHGX. SELECT * FROM ZTPP006GX INTO TABLE @DATA(LT_ZTPP006GX). AUTHORITY-CHECK OBJECT 'ZPP006N' ID 'ZYPGXQX' FIELD '1'. IF SY-SUBRC NE 0. LOOP AT record_tab . DATA(I) = SY-TABIX. "去除前导零 LV_GXSTRING = record_tab-STRING. SHIFT LV_GXSTRING LEFT DELETING LEADING SPACE. *根据字符串的中间空格拆分成两个字符串 SPLIT LV_GXSTRING AT '' INTO DATA(lv_str1) DATA(lv_str2). IF lv_str1 IS NOT INITIAL. READ TABLE LT_ZTPP006GX INTO DATA(LS_ZTPP006GX) WITH KEY ZZHGX = lv_str1. IF SY-SUBRC = 0. DELETE record_tab INDEX I. ENDIF. ENDIF. ENDLOOP. ENDIF. EXIT. ENDIF.
其中表ZTPP006GX中保存的即是需要排除的数据
最终实现效果为,没有此权限的人员,点击此搜索帮助时,会比有此权限的人员少ztpp006gx表中对应的工序数据