ABAP报表中SM30功能的权限控制与过滤设置:从零到实战
ABAP报表中SM30功能的权限控制与过滤设置从零到实战在SAP系统中SM30事务码是维护表数据的标准工具但直接使用往往无法满足企业对数据安全和操作粒度的要求。本文将深入探讨如何在ABAP报表程序中集成SM30功能并通过代码实现精细化的权限控制和数据过滤为终端用户提供安全且定制化的数据维护界面。1. SM30功能集成基础在ABAP开发中VIEW_MAINTENANCE_CALL函数是将SM30功能嵌入报表程序的核心接口。这个函数允许开发者调用标准的表维护视图同时提供了丰富的参数来定制界面行为。典型的函数调用结构如下CALL FUNCTION VIEW_MAINTENANCE_CALL EXPORTING action U U-更新模式S-显示模式 view_name ZHR_AMB11 维护视图名称 TABLES dba_sellist gt_vimsellist 数据过滤条件 excl_cua_funct it_vimexclfun 隐藏的功能按钮 EXCEPTIONS ...关键参数说明action控制视图的初始模式U表示更新模式S表示仅显示模式view_name指定要维护的视图名称需事先在SE11中创建dba_sellist传入数据过滤条件限制用户可见的数据范围excl_cua_funct隐藏特定的功能按钮如新建、复制等2. 数据过滤条件的实现数据过滤是权限控制的重要手段可以确保用户只能看到其权限范围内的数据。在ABAP中过滤条件通过VIMSELLIST结构体数组传递给VIEW_MAINTENANCE_CALL函数。实现步骤定义过滤条件数据结构DATA: gs_vimsellist LIKE vimsellist, gt_vimsellist LIKE TABLE OF gs_vimsellist.构建过滤条件LOOP AT gt_zhr_amb11 INTO gs_zhr_amb11. gs_vimsellist-viewfield POST_TY. 过滤字段名 gs_vimsellist-operator EQ. 操作符EQ等于 gs_vimsellist-value gs_zhr_amb11-post_ty. 过滤值 gs_vimsellist-and_or OR. 条件连接方式 APPEND gs_vimsellist TO gt_vimsellist. ENDLOOP.过滤条件类型操作符描述示例EQ等于POST_TY MNE不等于POST_TY NE MGT大于AMOUNT GT 1000LT小于AMOUNT LT 500CP包含模式NAME CP SMITH*提示复杂的过滤逻辑可以通过组合多个VIMSELLIST条目实现利用and_or字段指定条件间的逻辑关系AND/OR。3. 功能按钮的权限控制SM30界面默认提供新建、修改、删除、复制等功能按钮但实际业务中往往需要根据用户角色限制这些功能。通过EXCL_CUA_FUNCT参数可以隐藏特定的功能按钮。常用功能码对照表功能码对应按钮描述NEWL新建创建新条目DELE删除删除当前条目KOPE复制复制当前条目ANZG显示/修改切换切换显示和修改模式SAVE保存保存更改实现代码示例DATA: wa_vimexclfun TYPE vimexclfun, it_vimexclfun TYPE TABLE OF vimexclfun. 隐藏新建按钮 wa_vimexclfun-function NEWL. APPEND wa_vimexclfun TO it_vimexclfun. 隐藏复制按钮 wa_vimexclfun-function KOPE. APPEND wa_vimexclfun TO it_vimexclfun. 隐藏删除按钮 wa_vimexclfun-function DELE. APPEND wa_vimexclfun TO it_vimexclfun.4. 用户授权与权限检查除了界面级的控制外完整的权限方案还需要结合SAP的授权对象进行检查。常见的做法是在调用VIEW_MAINTENANCE_CALL前进行权限验证。授权检查实现AUTHORITY-CHECK OBJECT S_TCODE ID TCD FIELD SM30 ID ACTVT FIELD 02. 02-修改权限 IF sy-subrc 0. MESSAGE e001(00) WITH 您没有使用SM30的权限. RETURN. ENDIF.推荐的授权对象S_TCODE控制事务码访问权限S_TABU_NAM控制表维护权限S_TABU_CLI控制客户端相关的表维护权限权限检查最佳实践在程序开始时检查用户是否有权访问SM30功能根据用户角色动态设置过滤条件结合业务逻辑进行细粒度的数据访问控制在保存逻辑中添加额外的权限验证5. 高级定制技巧5.1 动态过滤条件在实际应用中过滤条件往往需要根据用户输入或系统状态动态生成。可以通过SELECT-OPTIONS接收用户输入然后转换为VIMSELLIST格式。SELECT-OPTIONS: s_postty FOR zhr_amb11-post_ty. 将SELECT-OPTIONS转换为VIMSELLIST LOOP AT s_postty. gs_vimsellist-viewfield POST_TY. gs_vimsellist-operator s_postty-option. gs_vimsellist-value s_postty-low. IF s_postty-high IS NOT INITIAL. gs_vimsellist-value2 s_postty-high. ENDIF. gs_vimsellist-and_or AND. APPEND gs_vimsellist TO gt_vimsellist. ENDLOOP.5.2 多表关联过滤当需要基于关联表的数据进行过滤时可以先查询关联表获取关键值再构建过滤条件。 查询关联表获取需要过滤的部门列表 SELECT bukrs FROM zhr_dept INTO TABLE lt_dept WHERE dept_head sy-uname. 构建公司代码过滤条件 LOOP AT lt_dept INTO ls_dept. gs_vimsellist-viewfield BUKRS. gs_vimsellist-operator EQ. gs_vimsellist-value ls_dept-bukrs. gs_vimsellist-and_or OR. APPEND gs_vimsellist TO gt_vimsellist. ENDLOOP.5.3 自定义校验逻辑通过创建表维护对话框的出口EXIT可以在保存前执行自定义的校验逻辑。 在调用VIEW_MAINTENANCE_CALL前设置出口函数 CALL FUNCTION VIEW_MAINTENANCE_CALL EXPORTING ... exit_processing X exit_param ZHR_AMB11_CHECK ...然后在出口函数中实现校验逻辑FUNCTION zhr_amb11_check. CASE i_ucomm. WHEN SAVE. 执行自定义校验 IF ... 校验失败 e_reject X. MESSAGE e001(00) WITH 校验失败. ENDIF. ENDCASE. ENDFUNCTION.6. 实战案例HR数据维护界面假设我们需要为HR部门开发一个员工基础数据维护界面要求普通HR只能查看和修改本部门员工数据HR经理可以查看所有部门数据但只能修改特定字段禁止所有用户删除员工记录实现代码框架 1. 根据用户角色确定数据范围 IF is_hr_manager( sy-uname ). HR经理可以看到所有数据 SELECT * FROM zhr_employee INTO TABLE gt_employee. ELSE. 普通HR只能看到本部门数据 SELECT * FROM zhr_employee INTO TABLE gt_employee WHERE department get_user_department( sy-uname ). ENDIF. 2. 构建过滤条件 LOOP AT gt_employee INTO gs_employee. gs_vimsellist-viewfield EMPLOYEE_ID. gs_vimsellist-operator EQ. gs_vimsellist-value gs_employee-employee_id. gs_vimsellist-and_or OR. APPEND gs_vimsellist TO gt_vimsellist. ENDLOOP. 3. 设置功能按钮限制 所有人都不能删除 wa_vimexclfun-function DELE. APPEND wa_vimexclfun TO it_vimexclfun. 如果不是HR经理限制可编辑字段 IF NOT is_hr_manager( sy-uname ). 设置字段为只读 PERFORM set_field_read_only USING SALARY. PERFORM set_field_read_only USING POSITION. ENDIF. 4. 调用维护视图 CALL FUNCTION VIEW_MAINTENANCE_CALL EXPORTING action U view_name ZHR_EMPLOYEE TABLES dba_sellist gt_vimsellist excl_cua_funct it_vimexclfun EXCEPTIONS ...字段级控制技巧 对于更细粒度的字段级控制可以通过以下方式实现在表维护视图的屏幕布局中设置字段属性使用CL_GUI_ALV_GRID自定义ALV网格在出口函数中动态修改字段属性在项目实践中我们发现最常遇到的问题是如何平衡安全性和易用性。过于严格的权限控制会增加用户的操作复杂度而过于宽松又可能带来数据风险。一个实用的建议是采用最小权限原则即只授予用户完成工作所必需的最低权限然后根据实际需求逐步调整。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2435719.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!