ECC系统中BAPI_RE_RO_CHANGE及REBDRO屏幕权限检查增强实现问询
权限检查实现方案:REBDRO屏幕与BAPI_RE_RO_CHANGE的状态修改
一、能否通过集中式增强同时处理两种场景?
可以,但需要找到两者共同调用的核心状态修改逻辑节点。在ECC的RE模块中,REBDRO屏幕修改单元状态和BAPI_RE_RO_CHANGE的执行流程,最终都会调用到状态变更的核心函数/方法(例如REBD_RO_STATUS_CHANGE函数或CL_REBD_RO=>CHANGE_STATUS类方法)。
如果能在这个核心节点插入增强逻辑,就能同时覆盖屏幕交互和BAPI调用的权限检查场景,实现集中式管控。具体步骤如下:
- 调试确认核心执行节点:分别跟踪REBDRO屏幕状态修改和BAPI调用的执行路径,找到共同的核心处理函数/方法
- 在核心节点的增强点(如函数入口、方法执行前)插入权限检查:
- 从上下文提取单元编号、状态变更类型、公司代码等关键信息
- 执行
AUTHORITY-CHECK语句,验证用户权限(需提前在SU20/SU21配置好对应的权限对象) - 权限校验失败时,屏幕场景抛出错误消息中断操作;BAPI场景则填充
RETURN参数返回错误并终止后续逻辑
二、若集中式增强不可行,针对BAPI_RE_RO_CHANGE的权限检查步骤
如果核心节点无法增强或两者执行路径无交集,可单独针对BAPI_RE_RO_CHANGE实现权限控制,具体步骤:
1. 确定BAPI的增强入口
选择以下任一增强方式:
- Customer Exit:使用
EXIT_SAPLREBD_002(该出口对应RE对象修改的BAPI增强点) - BAdI:若ECC版本支持,使用
BADI_REBD_RO_CHANGE(专门用于RE单元修改的业务增强接口)
2. 编写权限检查逻辑
- 从BAPI输入参数中提取关键数据:
- 从
I_REBDRO获取单元编号(ROGUID/RONUM)、公司代码(BUKRS)等基础信息 - 从
T_STATUS表或I_STATUS_NEW参数中获取要变更的目标状态
- 从
- 执行权限校验:
AUTHORITY-CHECK OBJECT 'ZRE_RO_STATUS' ID 'BUKRS' FIELD l_bukrs ID 'ROTYPE' FIELD l_rotype ID 'ACTVT' FIELD '02'. "02代表修改操作,根据实际需求调整 - 权限校验失败时处理:
- 向BAPI的
RETURN参数表中添加错误条目:DATA: ls_return TYPE bapiret2. ls_return-type = 'E'. ls_return-id = 'ZRE'. ls_return-number = '001'. ls_return-message = '无修改单元状态的权限'. APPEND ls_return TO return. - 终止BAPI后续执行逻辑(如在Exit中设置
EXIT = ABAP_TRUE,或在BAdI中抛出异常)
- 向BAPI的
3. 测试验证
- 使用无权限用户调用
BAPI_RE_RO_CHANGE,确认返回权限错误 - 使用有权限用户执行状态修改,验证状态正常更新且无错误提示
内容的提问来源于stack exchange,提问作者Mahmoud Farid
相关产品推荐
相关产品推荐

